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