Skip to content

换货接口文档(exchange)

基本信息

  • 接口地址:/index.php/api
  • 请求方法:POST
  • 接口类型:接收方接口(第三方平台推送 → OMS 接收)
  • 路由参数:method = {app_id}.exchange.{action}

接口方法列表

接口名方法功能描述
ome.exchange.addPOST新增换货单

系统级参数

参数名类型必填名称描述
flagstring接入标识固定值 erpapi
app_idstring应用IDecos.ome
certi_idstring证书ID系统证书编号
from_node_idstring来源节点推送方节点ID
node_idstring目标节点店铺节点ID(OMS节点)
node_typestring节点类型ecos.ome
timestampint时间戳10位时间戳
methodstring接口方法名形如 {app_id}.exchange.add
signstring签名用于验证请求合法性

签名算法说明

  • 生成公式:sign = strtoupper(md5(strtoupper(md5(assemble($params))). $token))
  • 要点:
    • 参与签名的参数集合不包含 sign 本身;常以键名排序后按约定拼装
    • 首次 md5 后转大写,与 token 拼接后再 md5,最终再转大写
    • 保持编码一致、去除多余空白

接收参数(业务参数)

注:换货接收参数较为复杂,字段可为 JSON 字符串或对象/数组,组件会自动解码。以下参数根据实际接收数据整理。表格中通过缩进和层级标记区分字段层级:

  • 一级字段:直接字段名
  • 二级字段:parent.field 格式
  • 三级字段:parent.child.field 格式
  • 数组字段:parent[]parent[].field 格式

add

参数名类型必填说明
基础字段
tidstring/int订单号(平台订单号)
order_bnstring/int订单号(与 tid 同义)
dispute_idstring/int换货申请单号(平台售后单ID,对应 return_bn)
return_bnstring/int换货申请单号(与 dispute_id 同义)
exchange_bnstring换货 SKU 编码(换出的新商品 bn)
statusstring换货状态(平台态,如 WAIT_BUYER_SEND_GOODS、EXCHANGE_SUCCESS、EXCHANGE_CLOSE 等)
source_statusstring平台售后状态(组件赋值到 platform_status)
refund_phasestring售后阶段(如 onsale、aftersale 等)
refund_versionstring/int售后版本号(用于版本变更校验)
reasonstring换货原因
descstring换货描述
commentstring备注内容
createdstring/int创建时间(字符串将转为时间戳)
createtimestring/int创建时间(字符串将转为时间戳,与 created 同义)
modifiedstring/int平台修改时间(字符串将转为时间戳)
good_statusstring商品状态(如 已收到货)
advance_statusstring提前状态
cs_statusstring/int客服状态
time_outstring超时时间(格式:YYYY-MM-DD HH:mm:ss)
datestring日期(格式:YYYY-MM-DD HH:mm:ss)
operation_contraintstring操作约束(注意拼写为 contraint)
订单相关字段
oidstring/int子订单ID
alipay_nostring/int支付宝单号
platform_order_bnstring/int平台订单号(组件默认等于 tid)
to_node_idstring/int目标节点ID
买家信息字段
buyer_nickstring买家昵称(组件会过滤表情符号)
buyer_namestring买家姓名
buyer_phonestring买家电话(可能为密文占位符)
buyer_addressstring买家地址(完整地址,可能包含分隔符)
buyer_address_detailstring买家详细地址(组件优先使用此字段)
buyer_statestring买家省份(组件赋值到 buyer_province)
buyer_citystring买家城市
buyer_districtstring买家区县
buyer_townstring买家镇/街道
卖家/物流信息字段
seller_nickstring卖家店铺名称
addressstring卖家收货地址(组件赋值到 seller_address)
seller_logistic_namestring卖家物流公司名称
seller_logistic_nostring卖家物流单号
buyer_logistic_namestring买家物流公司名称(组件赋值到 logistics_company)
buyer_logistic_nostring买家物流单号(组件赋值到 logistics_no)
商品信息字段
bought_bnstring原购买货号(退货商品 bn)
bought_skustring原购买 SKU 编码
exchange_skustring换货 SKU 编码(换出的新商品 bn)
titlestring商品标题
numstring/int换货数量
pricestring/number商品单价
扩展字段
index_field[]object/string索引字段(可为 JSON 字符串,包含 oaid 等隐私索引)
  index_field.oaidstring隐私索引ID(用于加密)
attributes[]object/string属性信息(可为 JSON 字符串,组件会自动解码)
  attributes.newExchangeRepairstring新换货标识(值为 "1" 时标记为新换货)
extend_field[]object/string扩展字段(可为 JSON 字符串)
  extend_field.new_bought_skustring新购买 SKU(如 "0")
logistics[]object/string物流信息(退回/重发两个阶段,可为 JSON 字符串)
other_reship_itemsarray/string其他换货商品信息(可为 JSON 字符串)

说明:内部存在单号变更、换货明细提取与一致性检查(参见 _isModify_exchange_bn_getReshipExchangeItems)。换货状态会根据 status 字段映射到系统内部状态(如 WAIT_BUYER_SEND_GOODS→3,EXCHANGE_SUCCESS→4 等)。如果订单已发货且换货明细为空,将返回失败。

响应参数

响应格式统一为 JSON,包含以下字段:

字段名类型必填说明
rspstring响应状态:succ(成功)或 fail(失败)
msgstring响应消息(成功时包含操作描述,失败时包含错误信息)
dataobject响应数据(成功时可能包含换货单号等信息)

数据示例

请求示例(新增换货单)

json
{
  "flag": "erpapi",
  "app_id": "ecos.ome",
  "certi_id": "20215858518",
  "from_node_id": "20218888",
  "node_id": "1311861837",
  "node_type": "ecos.ome",
  "timestamp": 1762399984,
  "method": "ome.exchange.add",
  "sign": "837AAC22D61C89E1E6724D986C6F0ACD",
  "to_node_id": "1081190530",
  "buyer_name": "缪**",
  "seller_logistic_name": "",
  "buyer_logistic_no": "",
  "buyer_city": "台州市",
  "dispute_id": "238577917987575445",
  "date": "2025-11-06 11:37:15",
  "num": "1",
  "good_status": "已收到货",
  "bought_bn": "887350098396",
  "advance_status": "",
  "title": "男款牛皮绒面革软底Boston包头拖鞋",
  "refund_phase": "onsale",
  "refund_version": "1762399984717",
  "seller_logistic_no": "",
  "exchange_sku": "4867096297825",
  "tid": 2526959714656153498,
  "buyer_logistic_name": "",
  "status": "WAIT_BUYER_SEND_GOODS",
  "buyer_state": "浙江省",
  "buyer_address": "浙江省^^^台州市^^^黄岩区^^^西*街道**城**城,**路**号",
  "price": "",
  "bought_sku": "4867096297819",
  "cs_status": "1",
  "reason": "尺码没选对",
  "address": "上海^^^上海市^^^奉贤区^^^   青村镇金钱公路3329号 6号库1楼6-2(TM-圆具嘉收)",
  "buyer_district": "黄岩区",
  "index_field": {
    "oaid": "1meibN6On7ktPb4ib2ficv2efbjspoWtjxedTibRg3fa414ZKg0StqeYIAMvJ6PfANqsll5e1j"
  },
  "desc": "",
  "operation_contraint": "",
  "buyer_nick": "m**",
  "extend_field": {
    "new_bought_sku": "0"
  },
  "seller_nick": "天猫工具旗舰店",
  "modified": "1762400029",
  "createtime": "1762399984",
  "buyer_phone": "***********",
  "buyer_address_detail": "西*街道**城**城,**路**号",
  "exchange_bn": "0660463-37",
  "time_out": "2025-11-13 11:33:05",
  "alipay_no": "2526959714656153498",
  "attributes": {
    "newExchangeRepair": "1"
  }
}

注:实际请求中,attributesindex_fieldextend_field 等对象字段可能以 JSON 字符串形式传递,组件会自动解码。上例中已格式化为对象结构以便阅读。

响应示例

响应成功

新增换货单成功ome.exchange.add):

json
{
    "rsp": "succ",
    "msg": "换货单创建成功"
}

响应失败

新增换货单失败(参数缺失)

json
{
    "rsp": "fail",
    "msg": "参数缺失"
}

新增换货单失败(不满足换货条件)

json
{
    "rsp": "fail",
    "msg": "不满足换货条件"
}

业务说明

  • 本接口为接收方,第三方平台推送换货单至 OMS;幂等建议:method + node_id + dispute_id(或 return_bn)。
  • 换货状态会根据平台状态自动映射到系统内部状态(如 WAIT_BUYER_SEND_GOODS→3,EXCHANGE_SUCCESS→4 等)。
  • 系统会进行状态校验,未发货订单(ship_status=0)不接收换货单。
  • 如果换货明细为空,将返回失败。
  • 支持"换了又换"场景,系统会自动处理换货订单的转换和关联。
  • attributes.newExchangeRepair="1" 时会标记为新换货标识。

错误码定义(示例)

  • E_PARAM:参数缺失
  • E_STATE:不满足换货条件(未发货、状态不允许等)
  • E_DUPLICATE:单号冲突/重复提交
  • E_EMPTY:换货明细不可为空