Java小程序|网页后台 物流查询 第三方平台:极速数据物流查询

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就行,我们封装了,略有差异,无影响
    }

}


//普通快递,输入物流单号就可以查,顺丰除了物流单号,还必须提供该订单手机号才可。

有问题欢迎评论区讨论哦!
欢迎订阅微信订阅号:是小李哦
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值