消息服务是跨境分销开放平台为提高效率而推出的一种主动推送服务,推送内容包括账号授权、商品、订单、逆向等消息。基于该推送服务,应用获取分销数据不再需要轮询API,只需要在消息对应的业务数据发生变化时开放平台会主动推送业务内容给分销商,分销商仅需提前订阅该消息并可对该消息内容做解析。需要注意的点,由于消息无法保证有序性,部分消息需要在搭配OpenAPI 查询接口做数据同步。消息接入可以有效降低API的调用频率,降低系统压力。
位置:开放平台应用控制台-应用详情-消息服务
步骤:开发者可在开放平台上配置一个回调 URL 来接收消息请求
{ "seller_id": "2100004250000", "message_type": 11, "data": { "mp_id": "2048212708534489", "status": "ON" }, "timestamp": 1686646893, "site": "taobao_hk" }
属性 |
类型 |
说明 |
示例描述 |
seller_id |
String |
分销商账号ID |
如2100004250000 |
message_type |
Number |
消息类型 |
参考消息类目列表 |
data |
String |
具体推送的业务消息数据,json格式,字段说明,参考各个业务消息说明 |
如{"key1":"value1"} |
timestamp |
String |
消息推送时间 |
1686646893 |
site |
String |
租户站点(可忽略) |
taobao_hk |
描述:开发者需提供消息接收通道,接收推送形式为 HTTPS POST 请求。
使用消息服务,需要准备一个接收消息的回调接口,请严格按以下要求执行:
描述:数据將使用明文传输,为安全起见,开放平台会对消息体做摘要签名处理,签名结果会放在POST请求头的
Authorization字段中,签名算法如下:
#请求签名参数 Base = "{your_app_key}" + "{message_body_you_receieved}" Secret = "{your_app_Secret}" #签名算法 HMAC-SHA256 #生成签名 Authorization = HEX_ENCODE(HMAC-SHA256(Base, Secret));
Java签名代码参考:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; public class SignatureUtil { private static final String HMAC_SHA256 = "HmacSHA256"; private static final Logger LOGGER = LoggerFactory.getLogger(SignatureUtil.class); /** * 产生基于Hmac-SHA256,并经过16进制编码的签名。 * @param base {AppKey} + {messageBody} * @param secret {AppSecret} * E.g.: AppKey = 123456, AppSecret = 3412gyo124goi3124 * 收到的消息体Json :{"seller_id":"1234567", "message_type":0, "data":{...}..} * * base = "123456" + "{\"seller_id\":\"1234567\", \"message_type\":0, "data":{...}..}" * secret = 3412gyo124goi3124 * signature = getSignature(base, secret); * signature = f3d2ca947f16a50b577c036adecd18bec126ea19cadedd59816e255d3b6104ab * @return 签名 */ public static String getSignature(String base, String secret) { try { Mac sha256Hmac = Mac.getInstance(HMAC_SHA256); SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes(), HMAC_SHA256); sha256Hmac.init(secretKey); return byteArraytoHexString(sha256Hmac.doFinal(base.getBytes())); } catch (Exception e) { LOGGER.error("Failed to generate signature"); } return null; } /** * 十六进制Encode * @param bytes * @return */ private static String byteArraytoHexString(byte[] bytes) { if(bytes == null) { return null; } StringBuilder sb = new StringBuilder(); String stmp; for (byte aByte : bytes) { stmp = Integer.toHexString(aByte & 0XFF); if (stmp.length() == 1) { sb.append('0'); } sb.append(stmp); } return sb.toString().toLowerCase(); } }
消息示例如下:
POST /example/uri HTTP/1.1 #HTTP请求头 Host: www.example.com Content-Type: application/json Content-Length: 1238 #开放平台摘要签名 Authorization: 34f7b258df045d4ed9341850ca85b866f34828fd7d51862f11137216294a894c #HTTP请求Body { "seller_id": "2100004250000", # 分销商ID "message_type": 18, # 消息类型 "data": { "mp_id": "2048212708534489", # 供销商品ID "action": "BIND" # 操作类型,铺货绑定 }, "timestamp": 1686647231, # 推送时间 "site": "taobao_hk" # 站点,可忽略 }
接口列表:/batch/src/products/check、/product/get、/product/recommend
接口列表:/product/details/query
message_type:18
分销商或平台运营,在跨境供销平台铺货/取消铺货。
{ "seller_id": "2100004250000", "message_type": 18, "data": { "mp_id": "2048212708534489", "action": "BIND" }, "timestamp": 1686647231, "site": "taobao_hk" }
属性 |
类型 |
说明 |
示例描述 |
mp_id |
String |
供货平台商品ID |
如2048196206207634 |
action |
String |
操作类型 |
"BIND":铺货 "UNBIND":取消铺货 |
message_type:11
已铺货商品上下架/删除
{ "seller_id": "2100004250000", "message_type": 11, "data": { "mp_id": "2048212708534489", "status": "ON" }, "timestamp": 1686646893, "site": "taobao_hk" }
属性 |
类型 |
说明 |
示例描述 |
mp_id |
String |
供销平台商品ID |
如2048196206207634 |
status |
String |
商品状态 |
status="ON" 上架(可售) status="OFF" 下架(不可售) status="DELETED" 已删除(不可售) |
message_type:13
已铺货商品信息编辑发布,包含商品标题、详描、商品图片等,会触发此类消息推送。
{ "seller_id": "2100004250000", "message_type": 13, "data": { "mp_id": "2048196206207634", "update_fields": [ "ITEM_IMG" ] }, "timestamp": 1686646939, "site": "taobao_hk" }
属性 |
类型 |
说明 |
示例描述 |
mp_id |
String |
供货平台商品ID |
如2048196206207634 |
update_fields |
|
商品更新的字段列表 |
"ITEM_TITLE" 商品标题 "ITEM_DESC" 商品详描 "ITEM_IMG" 商品图片 |
message_type:15
已铺货商品价格修改
{ "seller_id": "2100004250000", "message_type": 15, "data": { "mp_id": "2048195498077245", "distributor_id": "2100004250000" }, "timestamp": 1686646990, "site": "taobao_hk" }
属性 |
类型 |
说明 |
示例描述 |
mp_id |
String |
供货平台商品ID |
如2048196206207634 |
distributor_id |
String |
分销商账号ID |
"2100004250000" |
message_type:16
已铺货商品库存发生变化时通知
{ "seller_id": "2100004250000", "message_type": 16, "data": { "mp_id": "2048212708534489", }, "timestamp": 1686647024, "site": "taobao_hk" }
属性 |
类型 |
说明 |
示例描述 |
mp_id |
String |
供货平台商品ID |
如2048196206207634 |
message_type:14
已铺货商品sku 编辑发布,包含sku新增/删除
{ "seller_id": "2100004250000", "message_type": 14, "data": { "mp_id": "2048212708534489", "sku_id": "4890015831257", "status": "ADDED" }, "timestamp": 1686647153, "site": "taobao_hk" }
属性 |
类型 |
说明 |
示例描述 |
mp_id |
String |
供货平台商品ID |
如2048212708534489 |
sku_id |
String |
供货平台商品sku_id |
"4890015831257" |
status |
String |
操作状态 |
"ADDED" 增加 "DELETED" 删除 |
message_type:17
已铺货商品sku编辑发布,包含sku图片 或 属性备注
{ "seller_id": "2100004250000", "message_type": 17, "data": { "mp_id": "2048212708534489", "skus": [ { "sku_id": "4873649155289", "update_fields": [ "SKU_IMG", "SKU_ALIAS" ] }, { "sku_id": "4873649178841", "update_fields": [ "SKU_IMG", "SKU_ALIAS" ] } ] }, "timestamp": 1686647187, "site": "taobao_hk" }
属性 |
类型 |
说明 |
示例描述 |
mp_id |
String |
供货平台商品ID |
如2048212708534489 |
skus |
Object[] |
sku_id: 供货商品skuId update_fields: sku更新的字段信息 |
update_fields 字段列表 "SKU_IMG":SKU图片 "SKU_ALIAS":SKU属性备注 |
该消息无法保证开发者接收的有序性,所以请收到该消息后通过“订单查询接口”进行反查,再做相关业务处理。
接口列表:/purchase/orders/query
message_type:3
跨境供销平台采购单状态变更,仅包含订单状态变更推送:待支付、待发货、已发货、已关闭
{ "seller_id": "2100000927014", "message_type": 3, "data": { "business_time": 1650939687564, "outer_purchase_id": "FY20220426002", "purchase_id": 200002638011, "seller_id": 2100000927014, "sku_list": [ { "item_id": 600123256363335000, "logistic_company_name": "顺丰速运", "logistic_number": "SF4548527307631", "order_line_no": "1", "sku_id": 4808332513272, "status": "WAIT_BUYER_CONFIRM_GOODS" } ], "status": "WAIT_SELLER_SEND_GOODS" }, "timestamp": 1650939687, "site": "taobao_hk" }
属性 |
类型 |
说明 |
示例描述 |
business_time |
Number |
状态变更时间 |
如1650939687564 |
outer_purchase_id |
String |
ISV采购单号 |
FY20220426002 |
purchase_id |
Number |
供货平台采购主单ID |
200002638011 |
seller_id |
Number |
分销商ID |
2100000927014 |
sku_list |
Object[] |
"item_id": 供货平台商品Id "logistic_company_name": 物流公司名称 "logistic_number": 物流单号 "order_line_no": ISV采购子单号 "sku_id": 供货平台商品sku_id "status": 采购子单状态 |
子单商品列表 |
status |
String |
采购单状态 |
详情见如下status列表 |
采购单status的值:
采购单状态 |
描述 |
BULIDING |
采购单创建中 |
WAIT_BUYER_P |
等待付款 |
WAIT_SELLER_SEND_GOODS |
已付款,待发货 |
WAIT_BUYER_CONFIRM_GOODS |
已付款,已发货 |
TRADE_CLOSED |
交易关闭 |
message_type:8
创建订单,客户联系淘宝卖家进行订单议价改价,商家改价成功,则会同步推送该消息给分销商,需要注意支
付后的订单不支持订单改价。
{ "seller_id": "2100000927014", "message_type": 8, "data": { "features": {}, "salesOrderId": "500000-GSP2021031415594", "salesSellerId": 2100000927014, "purchaseMarket": "PANAMA", "purchaseOrderId": 200002372069, "purchaseOrderPriceDTO": { "purchaseCurrency": "CNY", "purchaseTotalFee": 1, "purchaseProductFee": 1, "purchaseShippingFee": 0 }, "purchaseOrderLinePriceChangeMessageDTOList": [ { "features": {}, "salesOrderLineIdList": [ "1" ], "purchaseOrderLineId": 200002372070, "purchaseOrderItemPriceDTO": { "purchaseCurrency": "CNY", "purchaseTotalFee": 1, "purchaseProductFee": 1, "purchaseProductUnitFee": 1, "purchaseShippingFee": 0 }, "bizFeatures": {} } ], "actionTime": 1647306796326, "bizFeatures": { "appKey": "500000", "orderSource": "taobao", "purchase_warehouse_address": "{\"city\":\"广州市\",\"country\":\"中国\",\"detailAddress\":\"落潭镇长腰岭村第三经济合作社长兴工业路3号派亚物流\",\"district\":\"白云区\",\"divisionId\":\"440111108\",\"mobile\":\"18500176747\",\"name\":\"李澳洲\",\"phone\":\"\",\"state\":\"广东省\"}", "sellerOrderNumber": "-" } }, "timestamp": 1647306796, "site": "taobao_hk" }
属性 |
类型 |
说明 |
示例描述 |
salesOrderId |
String |
ISV采购单号 |
如“500000-GSP2021031415594” |
salesSellerId |
Number |
分销商ID |
2100000927014 |
purchaseOrderId |
Number |
供货平台采购主单ID |
200002372069 |
purchaseOrderLineId |
Number |
供货平台采购子单ID |
200002372070 |
改价注意事项
下单收货地址在国内的无需订阅该类消息
message_type:19
若包裹为禁限运商品类型(如液体、纯电等)将无法正常履约,则会发出禁限运信息消息通知分销商,需要分销商走逆向流程完结此单。
{ "seller_id":"2100000927014", "message_type":19, "data":{ "outerPurchaseId":"xxxx", "purchaseId":200020416005, "purchaseLines":[ { "logisticNumbers":[ { "consignTime":1690968022000, "lpNumber":"LP00590951846613", "trackingNumber":"4201111192612909900774583257396847" } ], "purchaseLineId":200020416006, "supplyChainServiceOrderIds":[ { "detailErrorCode":"COSMETICS", "detailErrorMessage":"化妆品", "errorCode":"B-12-10-110", "errorMessage":"禁限运拦截", "price":{ "amount":1, "currency":"CNY" }, "serviceId":354, "serviceName":"###巴拿马物流测试商品-测试请不要拍-2", "serviceType":"LOGISTICS", "ssoOrderItemId":3459590786750736161, "status":"CANCELLED" }, { "detailErrorCode":"COSMETICS", "detailErrorMessage":"化妆品", "errorCode":"B-12-10-110", "errorMessage":"禁限运拦截", "price":{ "amount":1, "currency":"CNY" }, "serviceId":356, "serviceName":"【仓库作业】巴拿马测试请不要拍", "serviceType":"QUALITY_INSPECTION", "ssoOrderItemId":3459590786751736161, "status":"CANCELLED" }, { "detailErrorCode":"COSMETICS", "detailErrorMessage":"化妆品", "errorCode":"B-12-10-110", "errorMessage":"禁限运拦截", "price":{ "amount":1, "currency":"CNY" }, "serviceId":357, "serviceName":"【高级质检】巴拿马测试请不要拍", "serviceType":"ADVANCED_QUALITY_INSPECTION", "ssoOrderItemId":3459590786752736161, "status":"CANCELLED" } ] } ], "sellerId":2100000927014 }, "timestamp":1693380050, "site":"taobao_hk" }
消息体data字段数据结构明细如下:
属性 |
类型 |
说明 |
sellerId |
Number |
分销商ID |
purchaseId |
Number |
采购主单id |
outerPurchaseId |
Number |
ISV采购单号 |
purchaseLines |
List<PurchaseLine> |
采购子单列表 |
PurchaseLine结构如下:
属性 |
类型 |
说明 |
purchaseLineId |
Number |
采购子单号 |
supplyChainServiceOrderIds |
List<SupplyChainServiceOrder> |
物流服务订单列表 |
logisticNumbers |
List<PackageInfo> |
国际物流编号 |
SupplyChainServiceOrder结构如下:
属性 |
类型 |
说明 |
ssoOrderItemId |
Number |
物流服务子订单id |
serviceType |
String |
物流服务类型 |
status |
String |
物流服务订单状态 |
serviceId |
Long |
服务id |
serviceName |
String |
服务名称 |
price |
Money |
价格 |
errorMessage |
String |
错误信息 |
errorCode |
String |
错误码 |
detailErrorCode |
String |
详细错误码 |
detailErrorMessage |
String |
详细错误信息 |
PackageInfo结构如下:
属性 |
类型 |
说明 |
consignTime |
Long |
发货时间 |
trackingNumber |
String |
国际运单号 |
lpNumber |
String |
LP单号 |
message_type:20
在国际履约过程存在特殊商品会路由到其他可运渠道,此时国际物流单号变更,则会发出二次路由消息通知分销商,分销商需要查询供应链物流订单更新国际物流单号。
{ "seller_id":"2100000927014", "message_type":20, "data":{ "outerPurchaseId":"xxxx", "purchaseId":200020416005, "purchaseLines":[ { "logisticNumbers":[ { "consignTime":1690968022000, "lpNumber":"LP00590951846613", "trackingNumber":"4201111192612909900774583257396847" } ], "purchaseLineId":200020416006, "supplyChainServiceOrderIds":[ { "price":{ "amount":1, "currency":"CNY" }, "serviceId":354, "serviceName":"###巴拿马物流测试商品-测试请不要拍-2", "serviceType":"LOGISTICS", "ssoOrderItemId":3459590786750736161, "status":"WAREHOUSE_OUTBOUND" }, { "price":{ "amount":1, "currency":"CNY" }, "serviceId":356, "serviceName":"【仓库作业】巴拿马测试请不要拍", "serviceType":"QUALITY_INSPECTION", "ssoOrderItemId":3459590786751736161, "status":"WAREHOUSE_OUTBOUND" }, { "price":{ "amount":1, "currency":"CNY" }, "serviceId":357, "serviceName":"【高级质检】巴拿马测试请不要拍", "serviceType":"ADVANCED_QUALITY_INSPECTION", "ssoOrderItemId":3459590786752736161, "status":"WAREHOUSE_OUTBOUND" } ] } ], "sellerId":2100000927014 }, "timestamp":1693380050, "site":"taobao_hk" }
消息体data字段数据结构明细如下:
属性 |
类型 |
说明 |
sellerId |
Number |
分销商ID |
purchaseId |
Number |
采购主单id |
outerPurchaseId |
Number |
ISV采购单号 |
purchaseLines |
List<PurchaseLine> |
采购子单列表 |
PurchaseLine结构如下:
属性 |
类型 |
说明 |
purchaseLineId |
Number |
采购子单号 |
supplyChainServiceOrderIds |
List<SupplyChainServiceOrder> |
物流服务订单列表 |
logisticNumbers |
List<PackageInfo> |
国际物流编号 |
SupplyChainServiceOrder结构如下:
属性 |
类型 |
说明 |
ssoOrderItemId |
Number |
物流服务子订单id |
serviceType |
String |
物流服务类型 |
status |
String |
物流服务订单状态 |
serviceId |
Long |
服务id |
serviceName |
String |
服务名称 |
price |
Money |
价格 |
PackageInfo结构如下:
属性 |
类型 |
说明 |
consignTime |
Long |
发货时间 |
trackingNumber |
String |
国际运单号 |
lpNumber |
String |
LP单号 |
该消息无法保证开发者接收的有序性,所以请收到该消息后通过“逆向单详情接口”进行反查,再做相关业务处理。
接口列表:/order/refund/query
message_type:9
逆向单状态发生变更时,如卖家同意退款/退货等动作,都会触发消息通知分销商,其次留言有新增(卖家留
言)或更新(留言图片覆盖)也会发送留言变更消息给分销商,分销商需要拿到对应消息,做逆向单同步、或留言
同步,保持与供销平台数据一致性。
{ "seller_id": "2100000927014", "message_type": 9, "data": { "sellerId": 2100000927014, "messageType": 2, "refundId": 110000312001, "businessTime": 1652266980661, "purchaseOrderId": 2608284132117736161 }, "timestamp": 1652266980, "site": "taobao_hk" }
属性 |
类型 |
说明 |
示例描述 |
sellerId |
Number |
分销商ID |
2100000927014 |
messageType |
Number |
逆向消息类型,区别于"message_type" |
1 逆向单同步 2 留言同步 |
refundId |
Number |
逆向单ID |
110000312001 |
businessTime |
Number |
消息发送时间戳 |
1652266980 |
purchaseOrderId |
Number |
淘宝主单ID |
2608284132117736161 |