🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 1.消息说明 开放平台向接入商的系统实时推送业务变更消息,接入商系统收到消息后,进行相应的处理,实现数据同步,从而满足接入商系统业务功能。 ### [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#2%E6%8E%A8%E9%80%81%E6%96%B9%E5%BC%8F)2.推送方式 为避免接入商轮询,开放平台采用推送的方式,以`http post`的形式向商户指定的回调地址(自行在聚合供应链商户后台的应用上配置)进行推送。推送的消息数据(Body中除sign以外的部分)会进行消息摘要([详见签名规则](签名规则.md)),接收方收到数据后,需对数据进行验签,以保证数据的可靠性。接收方正常处理完消息后,需回执`SUCCESS`,若接收或处理失败,消息会自动重发(参见生命周期) ### [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#3%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F)3.生命周期 正常情况下,每条消息最多会进行8次通知 (通知的间隔频率一般是:`立即`,`10s`,`30s`,`1m`,`2m`,`3m`,`4m`,`5m`) ### [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#4%E5%B9%82%E7%AD%89%E5%A4%84%E7%90%86)4.幂等处理 由于网络原因、接入商系统原因,或接入商系统接收成功但未正常回执等,会触发消息的重试机制,接收方需要对同一个id的消息多次投递结果实现幂等。 ### [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#5%E6%8E%A8%E9%80%81%E6%95%B0%E6%8D%AE%E6%A0%BC%E5%BC%8F)5.推送数据格式 **请求方式:**`POST` **请求参数** Headers | 参数名称 | 参数值 | 必填 | 类型 | 备注 | | --- | --- | --- | --- | --- | | Content-Type | application/json | 是 | String | | Body | 名称 | 类型 | 必须 | 示例值 | 备注 | | --- | --- | --- | --- | --- | | id | java.lang.Long | 是 | 1601051353780715520 | 消息唯一标识 | | pushTime | java.lang.Long | 是 | 1670555403922 | 消息推送时间 | | type | java.lang.String | 是 | order.status.change | 消息类型 | | data | java.lang.String | 是 | {“dbyOrderId”:“1411601040867127328768”} | 推送数据 (json字符串) | | sign | java.lang.String | 是 | 21A5C3C007A5998166602C6B1133E47C | 签名 | 示例 ~~~json { "id":1601051353780715520, "pushTime":1670555403922, "type":"order.status.change", "data":"{\"dbyOrderId\":\"1411601040867127328768\"}", "sign":"21A5C3C007A5998166602C6B1133E47C" } ~~~ > 基于`type`字段值,区分不同的消息类型,各种类型的消息,`data`字段对应的json字符串格式不同 ## [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#%E6%B6%88%E6%81%AF%E7%B1%BB%E5%9E%8B)消息类型 * * * ### [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#%E5%95%86%E5%93%81)商品 #### [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#%E5%95%86%E5%93%81%E6%B1%A0%E6%B7%BB%E5%8A%A0%E5%95%86%E5%93%81)商品池添加商品 > type:`goods.pool.add` * * * **`data`字段对应的json数据格式:** | 名称 | 类型 | 示例值 | 描述 | | --- | --- | --- | --- | | goodsIds | String\[\] | \[“50165434620”,“50165241120”\] | 商品skuCode数组 | **收到消息后的处理方式:** 通过[查询商品详情](查询商品详情.md)接口,获取商品详细信息,保存到接入方系统商品库中 #### [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#%E5%95%86%E5%93%81%E6%B1%A0%E7%A7%BB%E9%99%A4%E5%95%86%E5%93%81)商品池移除商品 > type:`goods.pool.remove` * * * **`data`字段对应的json数据格式:** | 名称 | 类型 | 示例值 | 描述 | | --- | --- | --- | --- | | goodsIds | String\[\] | \[“50165434620”,“50165241120”\] | 商品skuCode数组 | **收到消息后的处理方式:** 移除接入方系统商品库中对应的商品 #### [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#%E5%95%86%E5%93%81%E4%B8%8A%E6%9E%B6)商品上架 > type:`goods.publish` * * * **`data`字段对应的json数据格式:** | 名称 | 类型 | 示例值 | 描述 | | --- | --- | --- | --- | | goodsIds | String\[\] | \[“50165434620”,“50165241120”\] | 商品skuCode数组 | **收到消息后的处理方式:** 变更对应商品的状态为`上架`。为避免因消息推送延迟,对应商品的最新状态已发生变化,建议在收到消息后,通过[查询商品上下架状态](查询商户商品上下架状态.md)接口,获取商品当前最新的上下架状态 #### [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#%E5%95%86%E5%93%81%E4%B8%8B%E6%9E%B6)商品下架 > type:`goods.un.publish` * * * **`data`字段对应的json数据格式:** | 名称 | 类型 | 示例值 | 描述 | | --- | --- | --- | --- | | goodsIds | String\[\] | \[“50165434620”,“50165241120”\] | 商品skuCode数组 | **收到消息后的处理方式:** 变更对应商品的状态为`下架`。为避免因消息推送延迟,对应商品的最新状态已发生变化,建议在收到消息后,通过[查询商品上下架状态](查询商户商品上下架状态.md)接口,获取商品当前最新的上下架状态 #### [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#%E5%95%86%E5%93%81%E4%BF%A1%E6%81%AF%E5%8F%98%E6%9B%B4)商品信息变更 > type:`goods.detail.alter` * * * **`data`字段对应的json数据格式:** | 名称 | 类型 | 示例值 | 描述 | | --- | --- | --- | --- | | goodsIds | String\[\] | \[“50165434620”,“50165241120”\] | 商品skuCode数组 | **收到消息后的处理方式:** 通过[查询商品详情](查询商品详情.md)接口,获取商品最新的信息进行更新 #### [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#%E5%95%86%E5%93%81%E4%BB%B7%E6%A0%BC%E5%8F%98%E6%9B%B4)商品价格变更 > type:`goods.price.alter` * * * **`data`字段对应的json数据格式:** | 名称 | 类型 | 示例值 | 描述 | | --- | --- | --- | --- | | goodsIds | String\[\] | \[“50165434620”,“50165241120”\] | 商品skuCode数组 | **收到消息后的处理方式:** 通过[查询商品价格](查询商品价格.md)接口,获取商品最新的价格进行更新 ### [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#%E8%AE%A2%E5%8D%95)订单 #### [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#%E8%AE%A2%E5%8D%95%E6%8B%86%E5%8D%95)订单拆单 > type:`order.split` * * * **`data`字段对应的json数据格式:** | 名称 | 类型 | 示例值 | 描述 | | --- | --- | --- | --- | | dbyOrderId | String | 1411601121460812906496 | 小象订单号 | **收到消息后的处理方式:** 通过[查询订单详情](查询订单详情.md)接口,获取订单最新的信息,将订单详情中的子订单列表,覆盖更新到接入方系统中。 `注意`:确认下单后,系统会进行异步拆单,推送拆单消息。但一个订单可能会出现**多次拆单**的情况(按渠道—>按商家—>按仓库…),每次收到拆单消息时,都应通过订单详情去获取最新的订单数据,和本地系统里的数据进行对比更新。例如:一批商品下单后,第一次拆单,通过订单详情查询到的子订单有\[1、2\],后续发生了二次拆单,此时订单详情查询到的子订单可能会是\[1、3、4\],子订单2 中的商品被再次拆分,变成了子订单3和4。接入商系统需要对数据做更新。**订单发货后,不会在再出现拆单的情况**。 #### [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#%E8%AE%A2%E5%8D%95%E7%8A%B6%E6%80%81%E5%8F%98%E6%9B%B4)订单状态变更 > type:`order.status.change` * * * **`data`字段对应的json数据格式:** | 名称 | 类型 | 示例值 | 描述 | | --- | --- | --- | --- | | dbyOrderId | String | 1411601121460812906496 | 小象订单号 | **收到消息后的处理方式:** 通过[查询订单详情](查询订单详情.md)接口,获取订单最新的信息,将每个子订单的最新状态更新到接入方系统中,结合接入方系统的业务,对不同的状态做其他处理 #### [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#%E8%AE%A2%E5%8D%95%E5%8F%91%E8%B4%A7)订单发货 > type:`order.deliver` * * * **`data`字段对应的json数据格式:** | 名称 | 类型 | 示例值 | 描述 | | --- | --- | --- | --- | | dbyOrderId | String | 1411601121460812906496 | 小象订单号 | **收到消息后的处理方式:** 通过[查询订单物流信息](查询订单物流信息.md)接口,获取子订单的物流信息 ### [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#%E5%94%AE%E5%90%8E)售后 #### [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#%E5%94%AE%E5%90%8E%E7%8A%B6%E6%80%81%E5%8F%98%E6%9B%B4)售后状态变更 > type:`after-sales.status.change` * * * **`data`字段对应的json数据格式:** | 名称 | 类型 | 示例值 | 描述 | | --- | --- | --- | --- | | afterSaleOrderId | String | 1411601149457016160256 | 售后订单号 | **收到消息后的处理方式:** 通过[查询售后订单详情](查询售后订单详情.md)接口,获取售后订单的最新状态,更新到接入方系统中 #### [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#%E5%94%AE%E5%90%8E%E9%80%80%E6%AC%BE)售后退款 > type:`after-sales.refund` * * * **`data`字段对应的json数据格式:** | 名称 | 类型 | 示例值 | 描述 | | --- | --- | --- | --- | | afterSaleOrderId | String | 1411601149457016160256 | 售后订单号 | **收到消息后的处理方式:** 通过[查询售后退款详情](查询售后退款详情.md)接口,获取售后订单的退款信息,结合接入方自身的业务逻辑,进行相应的退款操作 ### [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#%E5%9C%B0%E5%9D%80%E5%BA%93)地址库 #### [](https://duobaoyu.com.cn/documentcenter?onlyFlag=f0d7549de2ab52f3eac45d6384c00476#%E5%9C%B0%E5%9D%80%E5%BA%93%E5%8F%98%E6%9B%B4)地址库变更 > type:`area-code.change` * * * **`data`字段对应的json数据格式:** | 名称 | 类型 | 示例值 | 描述 | | --- | --- | --- | --- | | operation | Integer | 2 | 变动类型 2-修改 3-删除 | | level | Integer | 4 | 当前变更的地址等级 | | originalAreaCode | String | 11010100111 | 原来的地址编号 | | changeAreaCode | String | 11010100112 | 改变后的地址编号 | | parentAreaCode | String | 110101 | 改变后的上级地址编号 | **收到消息后的处理方式:** 方案一(全量更新): 通过[省市区街道4级地址查询](省市区街道4级地址查询.md)接口,重新从一级地区开始,逐级同步最新的省市区code信息,保存到本地系统 方案二(局部更新): 基于变动类型,针对性处理 变动类型为`修改`: 根据 originalAreaCode 找到本地系统中对应的地址信息,将其地址code更新为 changeAreaCode,上级地址code更新为 parentAreaCode。如果当前变更的地址level不是4(县/街道),还需通过[省市区街道4级地址查询](省市区街道4级地址查询.md)接口,同步更新下级地址信息; 变动类型为`删除`: 根据 originalAreaCode 找到本地系统中对应的地址信息,删除对应的地址信息。如果当前变更的地址level不是4(县/街道),还需通过[省市区街道4级地址查询](省市区街道4级地址查询.md)接口,同步更新下级地址信息;