1. 事件定义#
2. 事件的订阅方式#
目前我们均推送全部的事件,暂不支持只订阅指定的事件。所有事件我们均采用 POST 的 方式推送,要接收事件消息,必须现在商户管理后台设置好接收事件的地址 商户管理后台->开发配置->商户数据通知配置 中进行设置事件的接收地址。
处理事件需要注意一下几点:
接收到事件后必须再 5s 内进行响应,否则系统会认为推送超时而主动终止会话,并且稍候会重新进行事件推送,重试规则详见 【推送重试策略】 如果事件处理完成之后,无需影响任何数据,直接响应Http StatusCode为200-299段的代码即可,如果响应200-299之外的StatusCode,系统则会认为推送失败,会进行重试,重试规则详见 【推送重试策略】 为了安全起见,接收事件的URL地址必须使用TLS通道,也就是必须是https,其次URL中不能包含“?”、“&”、“#”等特殊字符
3. 推送重试策略#
当事件推送超时或者响应失败后,系统会重新尝试推送三次,重试的策略为:
10min后第三次重试
如果三次都失败后,系统将终止推送,如业务需要,则主动发起响应的业务查询。
由于事件的重试策略可能会导致事件的重复处理,因此处理事件需要自行做好 幂等 处理
为了安全起见,接收事件也最好验证签名,我们推送事件时的签名完全遵守 【签名规范】中约定的签名方式。 4. 事件数据格式#
展开/收缩
{
"eventId":"abdsdsfsd",
"eventType":100000,
"eventCode":"RecycleOrderQualityCheckResult"
"description":"回收订单品质检查结果通知"
"dateTime":1677063205771,
"content":{}
}
| 参数 | 数据类型 | 是否可空 | 说明 |
|---|
| eventId | string | 否 | 事件ID,全局唯一,可以利用该ID做幂等处理 |
| eventType | int | 否 | 事件类型,一个number的值,事件体系内唯一 |
| eventCode | string | 否 | 事件类型代码,事件类型的字符串表示形式,和事件类型一一对应,事件体系内唯一 |
| description | string | 是 | 事件描述 |
| dateTime | long | 否 | 事件触发的时间,是一个毫秒级别的时间戳 |
| content | object | 是 | 事件数据,可能是null,也可能是字符串,也可能是对象,不同的事件类型,这部分内容不同 |
5. 事件类型定义#
展开/收缩
| 事件类型 | 事件代码 | 事件数据 | 说明 |
|---|
| 100100 | OrderRecycleQualityCheckedResult | 查看 | 回收订单品质检查结果通知 |
| 100101 | OrderRecycleStatusChanged | 查看 | 回收订单状态变化通知 |
| 100102 | OrderRecyclePaymentResult | 查看 | 回收订单付款结果通知 |
| 100103 | OrderRecycleInitiatePayment | 查看 | 回收订单发起付款通知 |
| 101100 | ScrmMerchantApplyForResult | 查看 | 商户申请结果通知 |
| 102100 | CapitalAccountAmountChanged | 查看 | 资金账户变化通知 |
6. 事件数据#
回收订单品质检查结果通知#
展开/收缩
{
"orderNo":"1222222",
"result":false,
"description":"品质达不到回收要求",
"products":
[
{
"code":"AS2222222",
"weight":10.5,
"pureWeight":10.00,
"quality":9998,
"materialType":1,
"result":true,
"description":"合格"
},
{
"code":"AS2222222",
"weight":10.5,
"pureWeight":10.00,
"quality":9900,
"materialType":1,
"result":false,
"description":"品质太低,达不到回收要求"
}
]
}
| 参数 | 数据类型 | 是否可空 | 说明 |
|---|
| orderNo | string | 否 | 回收订单号 |
| result | boolean | 否 | 订单检测是否通过 |
| description | string | 是 | 结果描述 |
| products | array | 否 | 回收单产品列表 |
| 参数 | 数据类型 | 是否可空 | 说明 |
|---|
| code | string | 否 | 回收产品代码 |
| weight | float | 否 | 回收产品的重量,单位g |
| pureWeight | float | 否 | 折足的重量,单位g |
| quality | int | 否 | 产品的品质 |
| materialType | enum | 否 | 产品的材质 |
| result | boolean | 否 | 产品检测是否通过 |
| description | string | 是 | 描述 |
回收订单状态变化通知#
展开/收缩
{
"orderNo":"1222222",
"orderStatus":1,
"description":"订单已取消"
}
| 参数 | 数据类型 | 是否可空 | 说明 |
|---|
| orderNo | string | 否 | 回收订单号 |
| orderStatus | enum | 否 | 订单状态 |
| description | string | 是 | 描述 |
回收订单付款结果通知#
展开/收缩
{
"orderNo":"1222222",
"paymentStatus":1,
"description":"付款成功",
"tradeInfo":
{
"tradedNo":"CS2222222",
"amount":444.35,
"tradedType":3,
"dataTime":1677133189149,
"payeeAccount":
{
"name":"张三",
"account":"5225887811338850",
"description":"招商银行"
}
}
}
| 参数 | 数据类型 | 是否可空 | 说明 |
|---|
| tradedNo | string | 是 | 交易流水号 |
| amount | float | 否 | 交易数量(金额或者克重) |
| tradedType | enum | 否 | 交易类型(收付款类型) |
| dataTime | long | 否 | 交易时间 |
| payeeAccount | object | 是 | 收款账号,如果收款账号为1(系统资金账户)或者2(原料账户)的时候,则该值为null |
| 参数 | 数据类型 | 是否可空 | 说明 |
|---|
| name | string | 否 | 收款人 |
| account | string | 否 | 收款账户 |
| description | string | 是 | 收款账号描述 |
商户申请结果通知#
展开/收缩
{
"orderNo":"1222222",
"result":true,
"merchantNo":"1234567",
"storeNo":"7654321",
"userName":"admin",
"password":"*******",
"description":"订单已取消"
}
| 参数 | 数据类型 | 是否可空 | 说明 |
|---|
| orderNo | string | 否 | 商户申请单号 |
| result | boolean | 否 | 是否通过 |
| merchantNo | string | 是 | 商户号,如果result为false,则为null |
| storeNo | string | 是 | 店铺号,如果result为false,则为null |
| userName | string | 是 | 商户管理后台账号,如果result为false,则为null |
| password | string | 是 | 商户管理后台密码,如果result为false,则为null |
| description | string | 是 | 描述 |
资金账户变化通知#
展开/收缩
{
"changedAccount":
{
"code":"1222222",
"name":"xxxxxxx",
"userType":1,
},
"tradeAccount":
{
"code":"13333333",
"name":"xxxxxxx",
"userType":1,
},
"amount":125.23,
"capitalAccountType":1,
"tradeType":1,
"dateTime":1677133189149,
"description":"订单已取消"
}
| 参数 | 数据类型 | 是否可空 | 说明 |
|---|
| changedAccount | object | 否 | 变动账户 |
| tradeAccount | object | 是 | 交易账户 |
| amount | float | 否 | 交易数量 |
| capitalAccountType | enum | 否 | 资产账户类型, 查看 |
| dateTime | long | 否 | 交易时间 |
| tradeType | enum | 否 | 交易类型, 查看 |
| description | string | 是 | 描述 |
changedAccount/tradeAccount 参数说明:
| 参数 | 数据类型 | 是否可空 | 说明 |
|---|
| code | string | 否 | 账户代码 |
| name | float | 否 | 账户名称 |
| userType | enum | 否 | |