# 接入指南



# 接口域名

<table border="1" id="bkmrk-%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83-https%3A%2F%2Ftest-ri" style="border-collapse: collapse; width: 100%; height: 59.5938px; border-width: 1px; border-color: rgb(53, 152, 219);"><colgroup><col style="width: 9.89174%;"></col><col style="width: 90.1083%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">测试环境</td><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">https://test-rights-platform.e-buy.com</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">生产环境</td><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">https://rights-platform.e-buy.com</td></tr></tbody></table>

# 接口调用方式

<table border="1" id="bkmrk-%E6%8F%90%E4%BA%A4%E6%96%B9%E5%BC%8F-http-post%E6%96%B9%E5%BC%8F%E6%8F%90%E4%BA%A4%EF%BC%8Cc" style="border-collapse: collapse; width: 100%; height: 119.188px; border-width: 1px; border-color: rgb(53, 152, 219);"><colgroup><col style="width: 12.7709%;"></col><col style="width: 87.2291%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">提交方式</td><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">HTTP POST方式提交，CONTENT-TYPE为application/json</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">报文格式</td><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">json</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">字符编码</td><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">utf-8</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">签名算法</td><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">sha256</td></tr></tbody></table>

# 安全规范

- 拼接报文参数

除sign参数外的所有参数按照ASCII顺序排序后，以"参数名1=参数值1&amp;参数名2=参数值2"的方式拼接所有参数

- bizContent业务参数

对所有业务参数的json格式做base64再行拼接

- 拼接签名 appSecret(由易百分配)

最后在尾部拼接双方约定的密钥"appSecret=xxxxx"，

- 签名值计算

sha256加密后即为签名值，并赋给sign参数。

- 注

当参数值为null或为空时不参与签名串拼接

- JAVA签名参考代码

```java
JSONObject notifyJson = new JSONObject(true);
notifyJson.put("orderNo", "4200001172202109274275163730");
notifyJson.put("transDateTime", "20210928102350");
notifyJson.put("ebuyCode", "1002108300000059091");
notifyJson.put("faceValue", "30");
notifyJson.put("outTradeNo", "89392109280163981");

byte[] encodeBase64 = Base64.encodeBase64(notifyJson.toJSONString().getBytes("UTF-8"));
String bizContent = new String(encodeBase64, "UTF-8");

Map<String, String> map = new TreeMap<>();
map.put("appKey", "274b9cf9f01543619baa726ed24ddd19");
map.put("signType", "sha256");
map.put("timestamp", "1483372334");
map.put("bizContent", bizContent);

StringBuilder buffer = new StringBuilder();
for (Map.Entry<String, String> item : map.entrySet()) {
buffer.append(item.getKey()).append("=").append(item.getValue()).append("&");
}

String signStr = buffer.toString() + "appSecret=XXXXXXXXXXXX";// appSecret(需易百提供);
String checkSign = SHAUtil.sha256(signStr);
System.out.println(signStr);
System.out.println(checkSign);
```

拼接后签名串：action=verify&amp;appKey=274b9cf9f01543619baa726ed24ddd19&amp;bizContent=eyJvcmRlck5vIjoiNDIwMDAwMTE3MjIwMjEwOTI3NDI3NTE2MzczMCIsInRyYW5zRGF0ZVRpbWUiOiIyMDIxMDkyODEwMjM1MCIsImVidXlDb2RlIjoiMTAwMjEwODMwMDAwMDA1OTA5MSIsImZhY2VWYWx1ZSI6IjMwIiwib3V0VHJhZGVObyI6Ijg5MzkyMTA5MjgwMTYzOTgxIn0=&amp;charset=utf-8&amp;format=json&amp;signType=sha256&amp;timestamp=1483372334&amp;appSecret=XXXXXXXXXXXX

最终签名值：bc151776f32a0eed26fd97696ece7e8102e5c1f8f594fbf8ddc392bd579693f1

# 接口清单及说明

<table border="1" id="bkmrk-%E6%8E%A5%E5%8F%A3%E8%B0%83%E7%94%A8%E5%90%8D%E7%A7%B0-%E6%8E%A5%E5%8F%A3%E5%90%8D%E7%A7%B0-%E6%8E%A5%E5%8F%A3%E9%80%82%E7%94%A8%E5%9C%BA%E6%99%AF-%E8%B0%83" style="border-collapse: collapse; width: 100%; border-width: 1px;"><colgroup><col style="width: 16.8039%;"></col><col style="width: 17.0459%;"></col><col style="width: 41.2396%;"></col><col style="width: 25.0298%;"></col></colgroup><thead><tr style="border-color: rgb(53, 152, 219);"><td>**接口调用名称**</td><td>**接口名称**</td><td>**接口适用场景**</td><td>**调用方向**</td></tr></thead><tbody><tr><td>queryCodeDetail</td><td>券查询接口</td><td>查询券关联的产品及活动详细信息</td><td>外部商户/渠道 调用易百</td></tr><tr><td>codeExchange</td><td>券兑换接口</td><td>用户在商户/渠道侧绑定或兑换易百券</td><td>外部商户/渠道 调用易百</td></tr><tr><td>codeStatusUpdate</td><td>券状态变更</td><td>外部渠道调易百做券状态更新，如 作废、延期、冻结解冻等，更多类型见接口定义</td><td>外部商户/渠道 调用易百</td></tr><tr><td>verify</td><td>券核销接口</td><td>核销券，该接口成功后券为 “已使用”</td><td>外部商户/渠道 调用易百</td></tr><tr><td>verifyVoid</td><td>券核销撤销接口</td><td>回退核销交易，该接口成功后券为 “可使用”</td><td>外部商户/渠道 调用易百</td></tr><tr><td>  
</td><td>券状态变更通知</td><td>券状态发生变更时易百通知渠道/商户，如 作废、延期、冻结等，详情见接口定义</td><td>易百调用 外部商户/渠道，需商户/渠道向易百提供回调URL</td></tr></tbody></table>

# 公共参数

#### 请求公共参数

<table border="1" id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E8%AF%B4%E6%98%8E-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E5%A1%AB-%E5%A4%87%E6%B3%A8-ap" style="border-collapse: collapse; width: 100%; border-width: 1px; border-color: rgb(53, 152, 219);"><colgroup><col style="width: 14.3096%;"></col><col style="width: 25.7381%;"></col><col style="width: 12.8725%;"></col><col style="width: 17.7592%;"></col><col style="width: 29.4398%;"></col></colgroup><tbody><tr><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">**参数名**</td><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">**说明**</td><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">**类型**</td><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">**是否必填**</td><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">**备注**</td></tr><tr><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">appKey</td><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">由易百分配</td><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">String(32)</td><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">是</td><td style="border-color: rgb(53, 152, 219);">  
</td></tr><tr><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">sign</td><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">签名值</td><td style="border-color: rgb(53, 152, 219);">String(400)</td><td style="border-color: rgb(53, 152, 219);">是</td><td style="border-color: rgb(53, 152, 219);">  
</td></tr><tr><td style="border-color: rgb(53, 152, 219);">timestamp</td><td style="border-color: rgb(53, 152, 219);">时间戳(毫秒)</td><td style="border-color: rgb(53, 152, 219);">Number(13)</td><td style="border-color: rgb(53, 152, 219);">是</td><td style="border-color: rgb(53, 152, 219);">  
</td></tr><tr><td style="border-color: rgb(53, 152, 219);">bizContent</td><td style="border-color: rgb(53, 152, 219);">业务参数集合</td><td style="border-color: rgb(53, 152, 219);">  
</td><td style="border-color: rgb(53, 152, 219);">是</td><td style="border-color: rgb(53, 152, 219);">  
</td></tr></tbody></table>

#### 返回公共参数

<table border="1" id="bkmrk-%E5%8F%82%E6%95%B0%E5%90%8D-%E8%AF%B4%E6%98%8E-%E7%B1%BB%E5%9E%8B-%E6%98%AF%E5%90%A6%E5%BF%85%E5%A1%AB-%E5%A4%87%E6%B3%A8-re" style="border-collapse: collapse; width: 100%; border-width: 1px; border-color: rgb(53, 152, 219); height: 119.188px;"><colgroup><col style="width: 13.826%;"></col><col style="width: 26.2217%;"></col><col style="width: 20.0238%;"></col><col style="width: 10.381%;"></col><col style="width: 29.6667%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">**参数名**</td><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">**说明**</td><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">**类型**</td><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">**是否必填**</td><td style="height: 29.7969px; border-color: rgb(53, 152, 219);">**备注**</td></tr><tr style="height: 29.7969px;"><td style="border-color: rgb(53, 152, 219); height: 29.7969px;">returnCode</td><td style="border-color: rgb(53, 152, 219); height: 29.7969px;">返回码</td><td style="border-color: rgb(53, 152, 219); height: 29.7969px;">String(20)</td><td style="border-color: rgb(53, 152, 219); height: 29.7969px;">是</td><td style="border-color: rgb(53, 152, 219); height: 29.7969px;">00: 成功 其他为失败或异常</td></tr><tr style="height: 29.7969px;"><td style="border-color: rgb(53, 152, 219); height: 29.7969px;">returnMsg</td><td style="border-color: rgb(53, 152, 219); height: 29.7969px;">返回描述</td><td style="border-color: rgb(53, 152, 219); height: 29.7969px;">String(200)</td><td style="border-color: rgb(53, 152, 219); height: 29.7969px;">是</td><td style="border-color: rgb(53, 152, 219); height: 29.7969px;">  
</td></tr><tr style="height: 29.7969px;"><td style="border-color: rgb(53, 152, 219); height: 29.7969px;">data</td><td style="border-color: rgb(53, 152, 219); height: 29.7969px;">具体的交易请求返回结果</td><td style="border-color: rgb(53, 152, 219); height: 29.7969px;">Object</td><td style="border-color: rgb(53, 152, 219); height: 29.7969px;">否</td><td style="border-color: rgb(53, 152, 219); height: 29.7969px;">  
</td></tr></tbody></table>