对接
1、前期需要根据京东物流开放平台的指引,注册相关平台账号,需申请相关服务此步骤暂且略过。 2、使用平台方所提供的本地sdk,参照sdk进行标准接口的接入,这一步也掠过。
京东接口的回调
此处接收来自京东的回调,以及相关回调参数。在此,根据业务需求将其中几个相关节点分别进行处理。 A.上门打卡,上门完成 B.取消 C.其他
此处可以根据自己的需求,定义不同的常量进行接受。
/**
* 统一回调接口
*
* @param requestBody ServletRequest
*/
@PostMapping("/callback")
public JdResult updateOrderByJd(@RequestBody String requestBody) {
try {
JSONObject jsonObject = new JSONObject(requestBody);
//获取当前回调类型
String orderStatus = jsonObject.getStr("orderStatus");
//获取其中订单
String orderNumber = jsonObject.getStr("orderNumber");
//根据订单编号查询出当前订单信息
DejiaService deJiaServiceDomain = deJiaService.selectServiceByOrderNum(orderNumber);
if (deJiaServiceDomain == null) {
return new JdResult("1", "未找到当前订单信息");
}
logger.info("回调开始===================================》");
logger.info("当前回调为:" + orderStatus);
if (ORDER_STATUS_MAP_CHECKIN.equals(orderStatus) || ORDER_STATUS_MAP_COMPLETE.equals(orderStatus)) {
//回调为 上门打卡 上门完成
return handelMapCallback(jsonObject);
} else if (ORDER_STATUS_CONFIRM_CANCEL.equals(orderStatus)) {
//回调为 确认取消
return handleCancelCallback(jsonObject);
} else {
//回调为 其他
return handelOtherCallback(jsonObject);
}
} catch (Exception e) {
logger.error("回调有误: {}", e.getMessage());
return new JdResult("1", "接收订单信息错误: " + e.getMessage());
}
}
上门打卡、上门完成
private JdResult handelMapCallback(JSONObject jsonObject) {
try {
//获取其中的key
String orderNumber = jsonObject.getStr("orderNumber");
//根据订单编号查询出当前订单信息
DejiaService deJiaServiceDomain = deJiaService.selectServiceByOrderNum(orderNumber);
String orderStatusCode = jsonObject.getStr("orderStatusCode");
String orderStatus = jsonObject.getStr("orderStatus");
//更新当前订单状态
deJiaServiceDomain.setStatus(Long.valueOf(orderStatusCode));
deJiaServiceDomain.setLat(jsonObject.getStr("punchHomeLatitude"));
deJiaServiceDomain.setLng(jsonObject.getStr("punchHomeLongitude"));
deJiaServiceDomain.setUpdateTime(DateTime.now());
deJiaService.updateDejiaService(deJiaServiceDomain);
logger.info("回调结束=====================================《");
// 返回处理结果
return new JdResult("1", "更新状态为:" + orderStatus);
} catch (JSONException e) {
// JSON 转换异常
logger.error("JSON转换异常: {}", e.getMessage());
return new JdResult("-1", "" + e.getMessage() + "");
} catch (Exception e) {
// 出错,返回错误信息
return new JdResult("-1", "" + e.getMessage() + "");
}
}
取消
private JdResult handleCancelCallback(JSONObject jsonObject) {
try {
//获取其中的key
String orderNumber = jsonObject.getStr("orderNumber");
//根据订单编号查询出当前订单信息
DejiaService deJiaServiceDomain = deJiaService.selectServiceByOrderNum(orderNumber);
if (deJiaServiceDomain == null) {
return new JdResult("-1", "无当前订单信息");
}
String orderStatusCode = jsonObject.getStr("orderStatusCode");
String orderStatus = jsonObject.getStr("orderStatus");
String cancelReason = jsonObject.getStr("cancelReason");
//更新当前订单状态
deJiaServiceDomain.setStatus(Long.valueOf(orderStatusCode));
deJiaServiceDomain.setCancelReason(cancelReason);
deJiaService.updateDejiaService(deJiaServiceDomain);
logger.info("回调结束=====================================《");
// 返回处理结果
return new JdResult("-1", "单号为:" + orderNumber + "已被商家取消");
} catch (Exception e) {
// 出错,返回错误信息
return new JdResult("-1", "接收订单信息错误。" + e.getMessage());
}
}
其他
private JdResult handelOtherCallback(JSONObject jsonObject) {
try {
//获取其中的key
String orderNumber = jsonObject.getStr("orderNumber");
//根据订单编号查询出当前订单信息
DejiaService deJiaServiceDomain = deJiaService.selectServiceByOrderNum(orderNumber);
String orderStatusCode = jsonObject.getStr("orderStatusCode");
String orderStatus = jsonObject.getStr("orderStatus");
//更新当前订单状态
deJiaServiceDomain.setStatus(Long.valueOf(orderStatusCode));
deJiaService.updateDejiaService(deJiaServiceDomain);
logger.info("回调结束=====================================《");
// 返回处理结果
return new JdResult("1", "更新状态为:" + orderStatus);
} catch (JSONException e) {
// JSON 转换异常
logger.error("Failed to parse JSON. Error: {}", e.getMessage());
return new JdResult("-1", "接收订单信息错误。" + e.getMessage());
} catch (Exception e) {
// 出错,返回错误信息
return new JdResult("-1", "接收订单信息错误。" + e.getMessage());
}
}
##结语 其中参数可以根据自己的业务进行相关的调整。