# 消息推送 消息推送由企得宝ERP系统主动向开发者配置的推送地址推送消息,共 **8** 种推送类型。 --- ## 推送说明 ### 推送方式 - **请求方式:** HTTP POST - **Content-Type:** `application/json;charset=UTF-8` ### 推送签名规则 1. 所有参数(除 sign)按照字典序排列 2. 排序好的参数(除 sign)根据参数名称+参数值直接拼接(key1value1key2value2) 3. 拼接完成后字符串两端加上当前企业的 `secret` 进行 MD5 加密并转小写 ### 返回结果 接收方处理完成后,返回字符串 `success` 认为推送成功,返回其他认为失败。 --- ## 推送类型列表 | 序号 | 推送类型 | 说明 | |------|----------|------| | 1 | [库存推送](#1-库存推送) | 库存变更时触发 | | 2 | [发货推送(旧版)](#2-发货推送旧版) | 发货时触发 | | 3 | [发货推送(新)](#3-发货推送新) | 发货时触发(需联系开启) | | 4 | [路由推送](#4-路由推送) | 物流路由更新时触发 | | 5 | [入库推送](#5-入库推送) | 退货入库时触发 | | 6 | [订单流程消息推送](#6-订单流程消息推送) | 订单流程状态变更时触发 | | 7 | [发货单推送](#7-发货单推送) | 发货单创建或状态变更时触发 | | 8 | [退货单推送](#8-退货单推送) | 退货单创建或状态变更时触发 | --- ## 1. 库存推送 **推送时机:** ERP系统中商品库存发生变更时触发 ### 请求参数 | 参数名 | 必选 | 类型 | 说明 | |--------|------|------|------| | productId | 否 | String | 平台商品Id | | skuId | 否 | String | 平台商品SkuId | | skuCode | 否 | String | 平台商品Sku编码 | | shopId | 否 | String | 当前商品所属店铺ID | | quantity | 否 | String | 根据店铺选择的上传类型×上传比例 | | modifyDate | 否 | String | 库存变更时间 | | timestamp | 否 | String | 时间戳(毫秒) | | sign | 否 | String | 签名 | ### 响应参数 | 参数名 | 必选 | 类型 | 说明 | |--------|------|------|------| | state | 否 | boolean | 响应结果:true-成功;false-失败 | | code | 否 | int | 响应码:0-成功;1-错误 | | message | 否 | String | 错误信息 | --- ## 2. 发货推送(旧版) **推送时机:** 发货时触发 **推送须知:** 推送成功后,如果当前订单在对方系统是整单发货,请调用 `foonsu.erp.orders.save` 接口同步当前订单为已发货;如果是部分发货可同步成部分发货。 ### 请求参数 | 参数名 | 必选 | 类型 | 说明 | |--------|------|------|------| | orderKind | 否 | String | 订单类别 | | logisticsCompanyCode | 否 | String | 物流公司编码 | | tradeNo | 否 | String | 交易单号 | | logisticsNo | 否 | String | 运单号 | | timestamp | 否 | String | 时间戳(毫秒) | | sign | 否 | String | 签名 | **返回结果:** 返回 `success` 认为推送成功。 --- ## 3. 发货推送(新) **推送时机:** 发货时触发(对接此推送方式需要联系对接负责人员为企业开启) **推送须知:** 推送成功后,如果当前订单在对方系统是整单发货,请调用 `foonsu.erp.orders.save` 接口同步当前订单为已发货。 ### 请求参数 | 参数名 | 必选 | 类型 | 说明 | |--------|------|------|------| | pushJson | 否 | String | 推送内容Json字符串 | | timestamp | 否 | String | 时间戳(毫秒) | | sign | 否 | String | 签名 | ### pushJson 推送内容参数 | 参数名 | 必选 | 类型 | 说明 | |--------|------|------|------| | logisticsCompanyCode | 否 | String | 物流公司编码 | | externalStorageCode | 否 | String | 外部仓库编码 | | tradeNo | 否 | String | 交易单号 | | logisticsNo | 否 | String | 运单号 | | orderKind | 否 | String | 订单类别 | | addLogistcisNo | 否 | String | 追加运单号 | | subLogistcisNo | 否 | String | 子运单号 | | payAmount | 否 | BigDecimal | 付款金额 | | postAmount | 否 | BigDecimal | 运费 | | deliveryOrderParentGoodsList | 否 | List[Object] | 发货父商品列表 | | deliveryOrderGoodsList | 否 | List[Object] | 发货商品列表 | | packages | 否 | List[Object] | 订单包裹信息 | ### deliveryOrderParentGoodsList 参数 | 参数名 | 类型 | 说明 | |--------|------|------| | goodsId | String | 商品id | | goodsCode | String | 系统商品编码 | | goodsName | String | 商品名称 | | goodsQuantity | BigDecimal | 商品数量 | | goodsUnit | String | 商品单位 | | goodsPlatformCode | String | 平台商品编码 | | platformGoodsCode | String | 平台商品id | | platformQuantity | BigDecimal | 平台数量 | | payAmount | BigDecimal | 付款金额 | | batchList | String | 唯一码/序列号列表,多个逗号隔开 | ### deliveryOrderGoodsList 参数 | 参数名 | 类型 | 说明 | |--------|------|------| | goodsId | String | 商品id | | parentGoodsId | String | 父商品id | | goodsCode | String | 商品编码 | | goodsName | String | 商品名称 | | goodsQuantity | BigDecimal | 商品数量 | | goodsUnit | String | 商品单位 | | goodsPlatformCode | String | 平台商品编码 | | platformGoodsCode | String | 平台商品id | | platformQuantity | BigDecimal | 平台数量 | | payAmount | BigDecimal | 付款金额 | | batchList | String | 唯一码/序列号列表,多个逗号隔开 | ### packages 参数 | 参数名 | 类型 | 说明 | |--------|------|------| | expressCode | String | 运单号 | | items | List[Object] | 商品列表 | | packageCode | BigDecimal | 包裹编号 | | batchCode | String | 唯一码/序列号列表,多个逗号隔开 | ### items 参数 | 参数名 | 类型 | 说明 | |--------|------|------| | itemCode | String | 商品编码 | | itemId | String | 商品仓储系统编码 | | quantity | Long | 包裹内该商品的数量 | ### 推送示例 ```json { "pushJson": "{\"addLogistcisNo\":\"SF1040358886694,SF1040358886709,SF1310010989521\",\"deliveryOrderGoodsList\":[{\"goodsCode\":\"S1110\",\"goodsName\":\"测试商品\",\"goodsQuantity\":2.4,\"batchList\":\"A0001,A0002\"}],\"logisticsCompanyCode\":\"01\",\"logisticsNo\":\"SF1310010946622\",\"subLogistcisNo\":\"\",\"tradeNo\":\"2999\",\"packages\":[{\"expressCode\":\"fake_data\",\"items\":[{\"itemCode\":\"fake_data\",\"itemId\":\"fake_data\",\"quantity\":66}],\"packageCode\":\"fake_data\",\"batchCode\":\"A0001,A0002\"}],\"externalStorageCode\":\"121212\"}", "sign": "58c3f00cc3792c9ad6f0c7575154a518", "timestamp": "1611562103183" } ``` --- ## 4. 路由推送 **推送时机:** 物流路由信息更新时触发(如揽件、中转、派送、签收等) ### 请求参数 | 参数名 | 必选 | 类型 | 说明 | |--------|------|------|------| | routePushList | 否 | String | 路由消息集合(JSON数组字符串) | | timestamp | 否 | String | 时间戳(毫秒) | | sign | 否 | String | 签名 | ### routePushList 对象参数 | 参数名 | 类型 | 说明 | |--------|------|------| | acceptAddress | String | 路由发生的地点 | | acceptTime | Date | 路由发生的时间 | | exceptionType | String | 路由异常状态:0-正常;1-揽件超时;2-中转超时;3-派送超时;4-虚假签收;5-问题件;6-退件;7-拒收 | | logisticsNo | String | 运单号 | | parcelType | String | 路由包裹状态:1-已发货未揽件;2-已揽收未中转;3-已中转未派送;4-已派送未签收;5-已派送已签收;6-异常单;7-拒收;8-已送达 | | remark | String | 备注 | | expressman | String | 派送员姓名(目前只有顺丰路由才有该字段) | | expressmanMobile | String | 派送员电话(目前只有顺丰路由才有该字段) | | tradeNo | String | 交易单号 | ### 请求示例 ```json { "sign": "695eca7dcadd9fac7cc678f284553862", "routePushList": "[{\"acceptAddress\":\"深圳市\",\"acceptTime\":\"2020-04-15 21:50:18\",\"exceptionType\":\"0\",\"logisticsNo\":\"SF1011737074881\",\"parcelType\":\"5\",\"remark\":\"已派送已签收\"},{\"acceptAddress\":\"深圳市\",\"acceptTime\":\"2020-04-15 20:50:18\",\"exceptionType\":\"0\",\"logisticsNo\":\"SF1011737074881\",\"parcelType\":\"4\",\"remark\":\"已派送未签收\"}]", "timestamp": "1590042103647" } ``` --- ## 5. 入库推送 **推送时机:** 退货商品入库时触发 ### 请求参数 | 参数名 | 必选 | 类型 | 说明 | |--------|------|------|------| | orderNo | 否 | String | 退货单编号 | | afterSaleOrderId | **是** | String | 平台售后单号(平台退货单编号) | | tradeNo | **是** | String | 平台交易单号 | | warehouseId | 否 | Long | 仓库ID | | warehouseName | 否 | String | 仓库名称 | | stockType | 否 | String | 入库类型:1-退货入库 | | statusDate | 否 | String | 入库时间 | | timestamp | 否 | String | 时间戳(毫秒) | | sign | 否 | String | 签名 | ### 请求示例 ```json { "orderNo": "DRO274201560000", "warehouseId": "9900100000000082", "stockType": "1", "sign": "2f045f4e12b37bb8bafc5f4785f36f56", "warehouseName": "深圳仓", "timestamp": "1655284940722" } ``` --- ## 6. 订单流程消息推送 **推送时机:** 订单流程状态变更时触发(接单、客审、打印物流单、打印发货单、外仓操作等) ### 请求参数 | 参数名 | 必选 | 类型 | 说明 | |--------|------|------|------| | shopId | 否 | String | 店铺Id | | tradeNo | 否 | String | 交易单号 | | status | 否 | String | 状态:1-已接单;2-已客审;3-已打印物流单;4-已打印发货单;5-外仓已接单;6-外仓已拣货;7-外仓已打包;8-外仓已发货;9-订单已同步外仓;10-订单已从外仓取消;11-订单异常;12-订单已作废 | | exceptionMessage | 否 | String | 订单异常信息 | | operationDate | 否 | String | 操作时间 | | operationTimestamp | 否 | String | 操作时间戳(毫秒级) | | timestamp | 否 | String | 当前时间戳(毫秒) | | sign | 否 | String | 签名 | ### 响应参数 | 参数名 | 必选 | 类型 | 说明 | |--------|------|------|------| | state | 否 | boolean | 响应结果:true-成功;false-失败 | | code | 否 | int | 响应码:0-成功;1-错误 | | message | 否 | String | 错误信息 | --- ## 7. 发货单推送 **推送时机:** 发货单创建或状态变更时触发 ### 请求参数 | 参数名 | 类型 | 说明 | |--------|------|------| | deliveryOrdersId | String | 发货单ID | | deliverOrderNo | String | 发货单号 | | orderNo | String | 订单编号 | | shopId | String | 当前商品所属店铺ID | | outShopId | String | 外部店铺ID | | tradeNo | String | 平台交易单号 | | deliveryDate | String | 发货时间 | | sourceCreateDate | String | 订单创建时间 | | postAmount | BigDecimal | 运费 | | goodsWeight | BigDecimal | 重量 | | systemLogisticsCompanyCode | String | 快递公司编码 | | logisticsNo | String | 快递单号(运单号) | | logisticsCompanyNameZh | String | 快递公司 | | orderKind | String | 订单类别 | | expressType | String | 业务类型 | | payAmount | BigDecimal | 付款金额 | | platformPromotionAmount | BigDecimal | 店铺让利金额 | | orderAgioAmount | BigDecimal | 平台让利金额 | | shopArrivalAmount | BigDecimal | 店铺到账金额 | | receiverName | String | 收件人名称 | | receiverMobile | String | 收件人手机 | | receiverPhone | String | 收件人电话 | | receiverProvince | String | 收件人省份 | | receiverCity | String | 收件人城市 | | receiverDistrict | String | 收件人区/县级市 | | receiverAddress | String | 收件人地址 | | payDate | String | 付款时间 | | operationDate | String | 操作时间 | | orderStatus | String | 单据状态 | | platformCode | String | 平台编号 | | deliveryStatus | String | 发货状态 | | warehouseName | String | 发货仓库 | | warehouseId | Long | 发货仓库id | | outWarehouseId | Long | 外部仓库ID | | oriChangeOrderNo | String | 当前发货单原换货单号 | | remark | String | 系统备注 | | sellerMessage | String | 卖家留言 | | buyerMessage | String | 买家留言 | | sendName | String | 发件人名称 | | sendProvince | String | 发件人省份 | | sendCity | String | 发件人城市 | | sendDistrict | String | 发件人区/县级市 | | sendAddress | String | 发件人地址 | | sendMobile | String | 发件人手机 | | sendPhone | String | 发件人电话 | | sendZipCode | String | 发件人邮编 | | bicOrderCode | String | BIC订单码 | | shopCode | String | 店铺编码 | | platformWarehouseCode | String | 平台仓库编码 | | externalStorageCode | String | 仓储仓库代码 | | desensitizeReceiverName | String | 脱敏后的收件人名称 | | desensitizeReceiverMobile | String | 脱敏后的收件人手机 | | desensitizeReceiverPhone | String | 脱敏后的收件人电话 | | desensitizeReceiverAddress | String | 脱敏后的收件人地址 | | merchantSubsidyAmount | String | 卖家承担的优惠金额 | | enterpriseId | String | 企业号 | | shopName | String | 店铺名称 | | logisticsCompanyCode | String | 物流公司编码 | | insuranceType | String | 保价类型 | | insureFlag | String | 是否保价 | | insuranceAmount | BigDecimal | 保价金额 | | postAmountPromotion | BigDecimal | 运费优惠 | | deliveryOrdersGoodsList | array | 发货订单商品明细列表 | | ordersPayList | array | 发货单支付方式列表 | | ordersInvoice | array | 订单发票明细列表 | ### 发货订单商品明细参数 | 参数名 | 类型 | 说明 | |--------|------|------| | outGoodsId | Long | 外部商品ID | | outKindId | Long | 外部类别ID | | outUnitId | Long | 外部单位ID | | goodsCode | String | 商品编码 | | goodsName | String | 商品名称 | | unit | String | 商品单位 | | goodsSpecs | String | 商品规格 | | quantity | BigDecimal | 购买数量 | | realPrice | BigDecimal | 实际售价 | | payAmount | BigDecimal | 实际金额 | | taxRate | BigDecimal | 税率 | | taxType | String | 税率类型:0-含税;1-免税;2-未税 | | combinationFlag | String | 商品组合类型:0-普通商品;1-组合父商品;2-组合子商品 | | tradeNo | String | 交易单号 | | deliverOrderNo | String | 发货单号 | | agioAmount | BigDecimal | 折扣金额 | | afterAgioAmount | BigDecimal | 让利后金额 | | platformGoodsName | String | 平台商品名称 | | platformGoodsSpecs | String | 平台商品规格 | | gift | String | 是否赠品:1-赠品;0-不是赠品 | | authorId | String | 直播主播id(达人id) | | authorName | String | 直播主播名称(达人姓名) | | picUrl | String | 图片链接 | | ordersBatchs | List[String] | 商品唯一码列表 | | useGovSubsidy | String | 是否使用国补:0-否;1-是 | | ordersBatchsAndSn | array | 商品唯一码和SN码列表 | | supplierShopId | String | 销售公司ID | | supplierShopName | String | 销售公司名称 | | platformPromotionAmount | BigDecimal | 平台优惠金额 | | shopPromotionAmount | BigDecimal | 店铺优惠金额 | | govPromotionAmount | BigDecimal | 电商国补金额 | | paymentPromotionAmount | BigDecimal | 支付渠道国补金额 | | platformPaymentPromotionAmount | BigDecimal | 支付渠道优惠(平台承担) | | shopPaymentPromotionAmount | BigDecimal | 支付渠道优惠(商家承担) | | externalDetailNo | String | 外部系统单据行号 | ### 订单发票明细参数 | 参数名 | 类型 | 说明 | |--------|------|------| | invoiceKind | String | 发票种类:1-增值专用发票;2-增值普通发票 | | invoiceTitleKind | String | 发票种类:1-个人;2-企业 | | invoiceTitleType | String | 发票类型:1-纸质发票;2-电子发票 | | invoiceTitle | String | 发票抬头 | | invoiceContent | String | 发票内容 | | taxpayerNumber | String | 纳税人识别号 | | depositBank | String | 开户行 | | invoiceAmount | BigDecimal | 发票金额 | | phone | String | 电话 | | address | String | 地址 | | remark | String | 备注 | | unvoiceAmount | BigDecimal | 未开票金额 | | accounts | String | 帐号 | ### 支付方式参数 | 参数名 | 类型 | 说明 | |--------|------|------| | payTypeCode | String | 支付方式编码:1-支付宝;2-微信;3-线下支付;4-在线支付;5-代收货款;6-银行转账 | | payTypeName | String | 支付方式名称 | | orderNo | String | 订单编号 | ### 商品唯一码和SN码列表明细 | 参数名 | 类型 | 说明 | |--------|------|------| | batchNo | String | 唯一码 | | sn | String | sn码 | --- ## 8. 退货单推送 **推送时机:** 退货单创建或状态变更时触发 ### 请求参数 | 参数名 | 类型 | 说明 | |--------|------|------| | shopPlatformCode | String | 平台编码 | | deliverReturnOrderId | String | 退货单ID | | deliverOrderNo | String | 发货单号 | | deliverReturnOrderNo | String | 退货单号 | | orderNo | String | 订单编号 | | tradeNo | String | 平台交易单号 | | shopId | String | 当前商品所属店铺ID | | outShopId | String | 外部店铺ID | | shopName | String | 店铺名称 | | platformReturnNo | String | 平台退货单号 | | orderSourceCode | String | 建单类型:1-手工建单;2-平台单 | | returnWarehouseId | String | 退回仓库id | | returnWarehouseName | String | 退回仓库 | | changeWarehouseId | String | 换货的仓库id | | changeWarehouseName | String | 换货仓库 | | returnLogisticsCompanyId | String | 退回物流公司Id | | changeLogisticsCompanyId | String | 换出物流公司id | | returnLogisticsNo | String | 退回运单号 | | refundAmount | String | 退款金额 | | returnDate | String | 退回入仓时间 | | remark | String | 备注 | | receiverName | String | 收件人名称 | | receiverMobile | String | 收件人手机 | | receiverPhone | String | 收件人电话 | | receiverProvince | String | 收件人省份 | | receiverCity | String | 收件人城市 | | receiverDistrict | String | 收件人区/县级市 | | receiverAddress | String | 收件人地址 | | encryptReceiverCode | String | 加密收件人编码 | | refundReason | String | 退款原因 | | agreeToReturn | String | 审核状态 | | urgentOrder | String | 加急订单 | | status | String | 收货入仓状态 | | createDate | String | 创建时间 | | statusDate | String | 收货入仓时间 | | agreeDate | String | 审核时间 | | creator | String | 创建人 | | returnType | String | 退货类别 | | shopCode | String | 店铺编码 | | platformWarehouseCode | String | 平台仓库编码 | | externalStorageCode | String | 仓储仓库代码 | | returnKind | String | 退货类别 | | platformReturnStatus | String | 平台退货状态 | | refundableAmount | String | 应退金额 | | returnOrdersGoodsList | array | 退回商品列表 | | changeOrdersGoodsList | array | 换出商品列表 | ### 退货/换货商品明细 | 参数名 | 类型 | 说明 | |--------|------|------| | tradeNo | String(50) | 交易单号 | | goodsCode | String(50) | 商品编码 | | outGoodsId | Long(20) | 外部商品ID | | goodsName | String(400) | 商品名称 | | unit | String(100) | 商品单位 | | goodsSpecs | String(100) | 规格名称 | | quantity | BigDecimal | 商品数量 | | price | BigDecimal | 标准售价 | | amount | BigDecimal | 标准金额 | | realPrice | BigDecimal | 实际售价 | | payAmount | BigDecimal | 实际金额 | | agioAmount | BigDecimal | 折扣金额 | | taxRate | BigDecimal | 税率 | | taxType | String | 税率类型:0-含税;1-免税;2-未税 | | remark | String(100) | 备注 | | ordersBatchs | List[String] | 商品唯一码列表 | | useGovSubsidy | String | 是否使用国补:0-否;1-是 | | ordersBatchsAndSn | array | 商品唯一码和SN码列表 | ### 响应参数 | 参数名 | 必选 | 类型 | 说明 | |--------|------|------|------| | state | 否 | boolean | 响应结果:true-成功;false-失败 | | code | 否 | int | 响应码:0-成功;1-错误 | | message | 否 | String | 错误信息 |