场景需求描述
电商平台及 ISV 商家对物流 api 接口的需求有很多,今天我们主要分享的就是快递鸟快递单号查询接口的对接指南,快递单号查询接口对接的应用场景有很多,很多场景会遇到,最主要的就是电商网站用户打开“我的订单”时调用此 API 显示物流信息详情,电商管理后台的物流系统,客服在对账前查询所有运单的签收状态,并追踪问题,电商平台对商家物流管控,要求必须在多久快递必须发出要看到揽件状态,多久必须收到货物看到签收状态,根据这些状态对商家管控从而提升用户的整体满意度。
API对接使用流程
- 注册快递鸟账号并申请认证
- 快递鸟根据单号和快递公司查询到物流轨迹状态
- 快递鸟将查询到的物流轨迹状态反馈給电商平台或 ISV 服务商
- 电商平台或 ISV 服务商接收数据并实时处理做数据展示或应用
快递鸟功能非常强大,免费,可以随时查询快递轨迹,也可以推送快递状态,很强大很方便。直接上实现代码。直接上代码:这是开发的快递鸟推送的快递信息接口,接收数据处理数据。这里 method 一定要 post
@RequestMapping(value = "tuisong",method=RequestMethod.POST)
@ResponseBody
public Map tuisong(String RequestData,String RequestType,String DataSign) {
RequestData=Encodes.unescapeHtml(RequestData);
Map result=new HashMap();
//判断是从快递鸟进入
if(!(RequestType.equals("101") && KdniaoUtils.isFromKdniao(RequestData, DataSign))){
result.put("Success",false);
result.put("Reason","不是快递鸟推送来的数据。");
return result;
}
JSONObject jsonObj=new JSONObject(RequestData);
result.put("EBusinessID",jsonObj.getString("EBusinessID"));
result.put("UpdateTime",jsonObj.getString("PushTime"));
try {
JSONArray jsonArray=jsonObj.getJSONArray("Data");
List shipList=Lists.newArrayList();
Ship ship=null;
for(int i=0;i
public class KdniaoUtils {
//DEMO
public static void main(String[] args) throws UnsupportedEncodingException, Exception {
}
//电商 ID
private static String EBusinessID="1283391";
//电商加密私钥,快递鸟提供,注意保管,不要泄漏
private static String AppKey="9df9507a-62fa-47f3-9227-bdd02b95ccf1";
//请求 url
private static String ReqURL="http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx";
public static Map StateMap=new HashMap();
static{
StateMap.put("0", "没有记录");
StateMap.put("1", "已揽收");
StateMap.put("2", "运输途中");
StateMap.put("201", "到达目的城市");
StateMap.put("3", "已签收");
StateMap.put("4", "问题件");
}
// 物流状态: 0-无轨迹,1-已揽收,2-在途中 201-到达派件城市,3-签收,4-问题件
public static int getShipStatus(String state){
switch (state){
case "0":
return Ship.STATUS_SHIPPED;
case "1":
return Ship.STATUS_SHIPPED;
case "2":
return Ship.STATUS_ONTHEWAY;
case "201":
return Ship.STATUS_PAISONG;
case "3":
return Ship.STATUS_SIGN;
case "4":
return Ship.STATUS_DIFFICULT;
default:
return Ship.STATUS_SHIPPED;
}
}
/**
* 快递物流轨迹跟踪
* @param ship
* @return
*/
public static Map trace(Ship ship){
Map map = new HashMap();
try {
String result=getOrderTracesByJson(ship.getExpress().getKdniao(),ship.getExpressNo());
JSONObject dataJson = new JSONObject(result);
if(dataJson.getBoolean("Success")){
map.put("errCode",0);
String state=dataJson.getString("state");
map.put("status",getShipStatus(state));
map.put("statusName",StateMap.containsKey(state)?StateMap.get(state):state);
JSONArray list = (JSONArray) dataJson.get("Traces");
if(list!=null&&list.length()>0) {
List