5. 订单审核状态异步回调通知
订单审核通过后,EM 系统会通知到开发者请求提供的 notify_url。
回调方式:HTTP POST
5.1 回调通知数据示例:
{
"appid": "KEY_AAAAAA",
"sign": "ae49f7782e215b4bf49a80c99e1f7855",
"request_data": "{\"notify_type\":\"OUT_TRADE_AUDIT\",\"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 参数列表 | 说明 | 示例 | ||
| notify_type | String | 是 | 通知类型:OUT_TRADE_AUDIT:订单审核通知,IN_STOCK_AUDIT:入库单审核通知 | |
| trade_no | String | 否 | 订单号 | DD202409240007 | 
| trade_status | int | 否 | 订单状态: 1:待审核 2:待送货(审核通过) | 1 | 
| message | String | 否 | 订单明细备注 | 审核成功 | 
| instock_no | String | 否 | 入库单号 | RK202409240007 | 
| instock_status | int | 否 | 入库单状态: 1:待审核 2:审核通过 | 1 | 
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...
            JSONObject data = JSON.parseObject(requestData);
            String notifyType = data.getString("notify_type");
            if("OUT_TRADE_AUDIT".equals(notifyType)){
                //订单审核回调处理
            }else if("IN_STOCK_AUDIT".equals(notifyType)){
                //入库单审核回调处理
            }
    }catch (Exception e){
        log.error("处理异常:",e);
        return "ERROR";
    }
    return "SUCCESS";
}说明:
1.开发者要做到通知的幂等处理,对于相同的交易订单在特殊情况下,可能会多次推送。 2.开发者确认服务器可公网正常访问,收到消息后,及时返回大写 SUCCESS, 如果推送失败,每隔 30 秒重试一次,最大重试时间为 1 小时,超过该时间不再推送
文档更新时间: 2025-09-17 09:37   作者:hanson
