回调通知服务用于接入方在购买或出售时,若订单状态发生变化会通过主动配置的回调接口或websocket消息对用户发送事件通知。
通知场景包括:1.等待发货 2.等待收货 3.购买成功 4.订单取消 5.交易保护
目前支持HTTP和WebSocket两种方式接收回调通知。HTTP方式说明:#
回调地址设置#
1.
申请开通开放能力,审核通过后可设置回调地址;注意:回调地址域名必须以http:或https:开头;
2.
已成功申请通过开放能力用户可在查看身份ID页面点击设置回调通知功能进入回调通知设置页面;
3.
填写回调地址后点击保存,开放平台服务器将发送GET请求到填写的服务器地址URL上,收到开放平台的Get请求后,需要返回result参数内容,result内容为用户身份ID MD5后小写的值如下。响应content-type格式为application/json。返回指定内容验证通过后生效,否则接入失败。
{
"result":"2b15b258641b3701b54a0fa634e6dd94"
}
4.
打开设置内的回调开关即可接收回调通知。订单状态发生变化后开放平台服务器将发送Post请求到填写的服务器地址URL上。设置页面内可获取到ECO回调公钥,为了防止伪造请求建议收到通知后使用ECO回调公钥做签名验证。
5.
若回调请求响应的结果非success,ECO平台会向你的服务器不断重发通知,最多7次。首次是即时推送,重试通知时间间隔为 10s、30s、2min、5min、10min、30min、1h,直到你正确回复success或者超过最大重发次数,ECO平台将不再发送。正确响应示 例如下:注意响应结构大小写敏感,需完全一致
{
"Status":"success",
"ErrorMsg":""
}
| 参数名称 | 参数值 | 是否必须 | 示例 | 备注 |
|---|
| Content-Type | application/json | 是 | application/json | |
WebSocket方式说明:#
3.
订单状态有变化时会收到对应的推送消息,消息结构如下:
{
"PartnerId": "xxxxxxxxxxxxx",
"Content": "{\"CallBackInfo\":\"{\\\"OrderNum\\\":\\\"2025011111993203040731137\\\",\\\"GoodsNum\\\":\\\"2025011111993203040731137\\\",\\\"MerchantNo\\\":\\\"\\\",\\\"OrderState\\\":\\\"订单交易取消\\\",\\\"CurrentReasons\\\":\\\"报价被拒绝,系统自动取消\\\",\\\"FinishTime\\\":\\\"2025-03-26 14:21:42\\\",\\\"OrderStateCode\\\":3,\\\"SendOfferRole\\\":2,\\\"OfferID\\\":\\\"123456\\\"}\",\"MessageNo\":\"5a0359e15bf4444e8eed87fc7e86ebc0\"}",
"GroupId": "",
"MessageType": 1
}
其中MessageType=1代表本条消息类型是订单状态通知,其余信息内容与HTTP方式收到的相同。Content是回调信息字符串形式,需要反序列化。WebSocket内的消息不需要验签,也不需要返回success。请注意连接断开期间的消息不会再次推送。建议通过开放平台订单查询接口作为辅助补偿措施。
Body:#
| 参数名称 | 数据类型 | 是否必须 | 备注 |
|---|
| MessageNo | String | 是 | 消息幂等编号。 |
| CallBackInfo | String | 是 | 回调信息字符串形式,需要反序列化。 |
| 详细说明参照:CallBackInfo-JSON解释 | | | |
| Sign | String | 是 | API输入参数签名结果。 |
CallBackInfo-JSON解释:#
| 参数名称 | 数据类型 | 备注 |
|---|
| OrderNum | String | 订单号 |
| GoodsNum | String | 商品编号 |
| MerchantNo | String | 商户订单号 |
| OrderState | String | 订单状态描述 |
| OrderStateCode | Int | 订单状态枚举数值:等待发货=1 等待对方确认=2 交易取消=3 交易成功=6 交易暂挂=9 交易保护=30 |
| SendOfferRole | Int | 发报价用户角色 1买家 2卖家 |
| OfferID | String | 报价ID |
| CurrentReasons | String | 订单状态对应原因说明 |
| FinishTime | String | 订单结束时间 |
请求示例:#
{
"CallBackInfo": "{\"OrderNum\":\"202301110278660107943936\",\"GoodsNum\":\"202301110278660107943936\",\"MerchantNo\":\"\",\"OrderState\":\"等待发货\",\"CurrentReasons\":\"\",\"FinishTime\":\"\",\"SendOfferRole\":2,\"OfferID\":\"123456\"}",
"MessageNo": "1da667bcbc3c45c0b07228e86aaa7e40",
"Sign": "k69bpTSu3DukNCZq8er7Sro6oPuQa3w+Qgx2wirMEjURuIvcBD1/vjlxvH0DdneEpjBDNPkU5y9DXOlo9WuHI4+UAjCErhlUz0Tk6HPGsDScr9VL9lx2qdhklAddN5Vqo4un78DeCxfIYsXdkb27ePwXczon16i0fb6/YVb6UgHs5UEWPam+cBBZ1vRUXnc7OyTMYter/IRjKMBaEzreFI27LpdxFCRf+o/4upBiyiKm4+hXaT/CxW3xJa1URvHqUzY5cjUjCyuSw6IJEWNBHX8qRXQDPtlb3OHIb7QL0x1fvtUZI2r+Y2S5Z34ddoH/2cK7/MDrggZ0NQ+fJUdtpg=="
}
JAVA验签示例#
c#验签示例#
被调用接口返回内容:#
| 参数名称 | 数据类型 | 是否必须 | 备注 |
|---|
| Status | String | 是 | success:成功。未响应成功会定时重试,超过最大次数不再重试。 |
| ErrorMsg | String | 否 | 状态描述。 |
返回内容示例:#
{
"Status":"success",
"ErrorMsg":""
}