5. 订单审核状态异步回调通知
订单审核通过后,EM 系统会通知到开发者请求提供的 notify_url。
回调方式:HTTP POST
5.1 回调通知数据示例:
{
"appid": "KEY_AAAAAA",
"sign": "ae49f7782e215b4bf49a80c99e1f7855",
"request_data": "{\"trade_no\":\"DD202409250002\",\"trade_status\":2,\"message\":\"审核通过\"}",
"timestamp": "1727324523"
}
5.2 参数列表
参数名 | 类型 | 是否必填 | 说明 | 示例 |
---|---|---|---|---|
appid | String | 是 | 合作伙伴 AppId | 对接时,由 EM 生成并提供 |
timestamp | String | 是 | 当前时间戳 | |
sign | String | 是 | 服务端返回的签名,为安全起见,开发者需要进行验签 | 如何计算生成见示例代码 |
request_data | Object | 是 | 回调消息内容 json 数据 | 订单及相关信息 |
-request_data 参数列表 | 说明 | 示例 | ||
trade_no | String | 是 | 订单号 | DD202409240007 |
trade_status | int | 否 | 订单状态: 1:待审核 2:待送货(审核通过) | 1 |
message | String | 否 | 订单明细备注 | 审核成功 |
5.3 回调处理示例代码
@RequestMapping(value = "/notify",method = RequestMethod.POST)
public String Notify(@RequestBody String jsonData) {
log.info("回调参数:",jsonData);
try{
JSONObject jsonObject = JSON.parseObject(CheeliUtils.getJsonStrByQueryUrl(jsonData));
log.info("订单创建序列化请求参数:" + JSON.toJSONString(jsonObject));
String requestData = jsonObject.getString("request_data");
String serverSign = jsonObject.getString("sign");
String appId = jsonObject.getString("appid");
Map<String, String> dataMap = new HashMap<String, String>();
dataMap.put("appid", appId);
dataMap.put("request_data", requestData);
dataMap.put("timestamp", jsonObject.getString("timestamp"));
//参数签名
String franchiserLocalSign = "SECRET_AAAAAA";//客户从服务商处获取的appSecret
if (!CheeliUtils.Sign(dataMap, franchiserLocalSign).equals(serverSign)) {
System.out.println("签名不相等, server " + serverSign + " local:" + CheeliUtils.Sign(dataMap, franchiserLocalSign));
return "ERROR,签名不相等";
}
//验签通过 处理相关业务
//do something...
}catch (Exception e){
log.error("处理异常:",e);
return "ERROR";
}
return "SUCCESS";
}
说明:
1.开发者要做到通知的幂等处理,对于相同的交易订单在特殊情况下,可能会多次推送。 2.开发者确认服务器可公网正常访问,收到消息后,及时返回大写 SUCCESS, 如果推送失败,每隔 30 秒重试一次,最大重试时间为 1 小时,超过该时间不再推送
文档更新时间: 2024-10-14 11:23 作者:hanson