不管是电商cps,还是外卖cps,对接过这么多第三方cps接口,只有美团联盟提供了订单数据回推接口,而且只要订单状态改变,就会回推数据,这为我们自身系统实现用户跟单继而实现分销裂变的功能提供了极大的友好帮助。
登录美团联盟后台,在联盟API接口列表找到一个名称为【订单回推接口】的栏目。
对,这个就是我们需要的接口,点进去查看详情。
和大部分回调接口一样,这个接口不需要接入方主动调用,而是接入方提供一个接口给美团联盟平台调用的,平台会将订单数据post到这个接口上,从而我们就可以从数据中获取到下单时预先传入的sid,这个sid是能够唯一识别我们系统的用户。这样就可以实现订单跟踪的效果,继而做一些业务逻辑的处理。
为了安全,同样的需要对联盟平台post过来的数据进行验签操作,以确保是平台发送过来的数据。注意,验签用到的密钥和调用联盟平台其他接口用到的密钥不是同一个哦,这个密钥在如下位置,签名方式和其他接口一致。
看下service层的代码
注意,接收到推送的订单之后,需要按照下面的固定的格式进行返回,
数据正常,返回:
{"errcode":"0","errmsg":"ok"},
数据错误,返回:
{"errcode":"1","errmsg":"err"}
public Map<String, String> mtOrderCallback(TreeMap<String, String> params) {
String data = JSON.toJSONString(params);
logger.info("美团回调参数:{}", data);
MtOrderModel mtOrder = JSONObject.parseObject(data, MtOrderModel.class);
String getSign = mtOrder.getSign();
String sign = MtSignUtils.genSign(params, model.getMtCallbackSecret());
Map<String, String> result = new HashMap<>(3);
if (sign.equals(getSign)) {
String userUuid = mtOrder.getSid();
UserMember member = userMemberService.getOne(Wrappers.<UserMember>lambdaQuery().eq(UserMember::getUuid, userUuid));
if (member != null) {
String orderId = mtOrder.getOrderid();
String status = mtOrder.getStatus();
String type = mtOrder.getType();
CpsOrder order = cpsOrderService.getOne(Wrappers.<CpsOrder>lambdaQuery()
.eq(CpsOrder::getOrderSn, orderId));
if (order == null) {
order = new CpsOrder();
// TODO
// 保存订单
// ......
cpsOrderService.save(order);
} else {
if (StringUtils.equals("8", status)) {
// 美团订单已完成
// ......
} else if (StringUtils.equals("9", status)) {
// 美团订单已退款或风控
// ......
}
cpsOrderService.updateById(order);
}
}
result.put("errcode", "0");
result.put("errmsg", "ok");
} else {
result.put("errcode", "1");
result.put("errmsg", "err");
}
logger.info("美团回调返回给美团的参数:{}", JSON.toJSONString(result));
return result;
}
看下controller层的代码
public Map<String, String> mtOrderCallback(@RequestBody TreeMap<String, String> params){
return mtApiService.mtOrderCallback(params);
}
最后一定要记得把接口地址配置在联盟平台上,这样就大功告成了。
山水有相逢,来日皆可期,谢谢阅读,我们再会
我手中的金箍棒,上能通天,下能探海