Java小程序|网页后台 物流查询 第三方平台:极速数据物流查询
注:采用jfinal框架,代码有一丢丢差别,基本上就是接收参数区别,无影响,
与SSM框架无异。
1、主体代码
/**
* 提供物流单号+手机号(顺丰需要)----查询实时物流信息(小程序接口)
*/
public void getLogistics() {
String orderId = getPara("id");
String sql0 = "SELECT * FROM mall_orders WHERE id=?";
Record first = Db.findFirst(sql0, orderId);
if (first == null) {
renderJson(Ret.fail("info", "订单信息不存在!"));
}
String sql = "SELECT deliverySn, shipPhone FROM mall_shipping WHERE order_id=?";
Record record = Db.findFirst(sql, orderId);
String deliverySn = record.getStr("deliverySn");
String phone = record.getStr("shipPhone");
if (deliverySn != null) {
try {
//物流轨迹接口,先调阿里云接口,阿里云没有,再查询快递鸟
deliverySn = deliverySn + "," + phone;//如果是顺丰需要手机号
JSONObject jsonObject = YunKdUtil.getOrderTracesXcx(deliverySn);
if (jsonObject != null && "0".equals(jsonObject.getString("status"))) {//查询成功
JSONArray traces = jsonObject.getJSONObject("result").getJSONArray("list");
System.out.println("traces = " + traces);
setAttr("traces", traces);
setAttr("type", "aliyun");
}
renderJson(Ret.ok("data", jsonObject));
// render("logistics_info.html");
} catch (Exception e) {
e.printStackTrace();
}
} else {
setAttr("type", "kdn");
setAttr("reasonAdmin", "该订单未关联物流信息!");
render("logistics_info.html");
}
}
2、工具类(YunKdUtil)
/**
* 物流查询
* @param deliverySn
* @return
*/
public class YunKdUtil {
private static String host = "https://api.jisuapi.com";
private static String method = "GET";
private static String AppCode = "xxxx"; //找官网https://www.jisuapi.com/,申请一个免费的就可以测试了,填写自己的AppCode
public static JSONObject getOrderTracesXcx(String deliverySn) {
System.out.println("deliverySn-------------" + deliverySn);
//取第一个部分为单号,第二个为手机号
String[] split = deliverySn.split(",");
Cache cache = Redis.use(PropUtil.cacheName);
JSONObject returnJson = cache.get(split[0]);
if (returnJson == null) {
String path = "/express/query";
Map<String, String> headers = new HashMap<String, String>();
headers.put("Authorization", "APPCODE " + AppCode);
Map<String, String> querys = new HashMap<String, String>();
querys.put("number", split[0]);
querys.put("type", "auto");
querys.put("appkey", AppCode);
try {
String s = split[0];
String substring = s.substring(0, 2);
// boolean b = !"SF".equals(substring);
if (!"SF".equals(substring)) {//此处不是顺丰
HttpResponse response = HttpUtils.doGet(host, path, method, headers, querys);
//获取response的body
String str = EntityUtils.toString(response.getEntity());
System.out.println("str----" + str);
if (StrKit.notBlank(str)) {
returnJson = JSON.parseObject(str);
cache.setex(split[0], 2 * 3600, returnJson);//缓存两个小时
}
} else {//此处是顺丰
// int mobile = Integer.parseInt(split[1]);
String mobile = split[1];
querys.put("mobile", mobile);
System.out.println(querys+" -----------------");
HttpResponse response = HttpUtils.doGet(host, path, method, headers, querys);
//获取response的body
String str = EntityUtils.toString(response.getEntity());
System.out.println("str----" + str);
if (StrKit.notBlank(str)) {
returnJson = JSON.parseObject(str);
cache.setex(deliverySn, 2 * 3600, returnJson);//缓存两个小时(与ssm略有不同,本质就是redis缓存而已)
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
return returnJson; //SSM框架自己return就行,我们封装了,略有差异,无影响
}
}
//普通快递,输入物流单号就可以查,顺丰除了物流单号,还必须提供该订单手机号才可。
有问题欢迎评论区讨论哦!
欢迎订阅微信订阅号:是小李哦