目录

对接京东快递查询物流信息

对接京东快递查询物流信息

[https://csdnimg.cn/release/blogv2/dist/pc/img/activeVector.png VibeCoding·九月创作之星挑战赛 10w+人浏览 2.2k人参与

https://csdnimg.cn/release/blogv2/dist/pc/img/arrowright-line-White.png]( )

京东快递查询物流轨迹信息的API在2025-04-29的时候更新过,我这里使用的新的接口
通过对接方案编码可以判断,之前是ECAP,现在改为了Tracking_JD

https://i-blog.csdnimg.cn/img_convert/2e17419bb04cd0d2db274ee634151c95.png

前期准备

  1. 京东物流开放平台账号并通过企业认证

    第一个ISV是相对比较好认证的,我使用的就是这个

    https://i-blog.csdnimg.cn/img_convert/2d1e5272a6352afd7129d7c330ff8e98.png

  2. 有与京东物流签约的账号(京东物流的销售开通的账号(不是物流开放平台的账号))

    这个我不太清楚怎么签约,这应该是你们公司有这个账号,跟负责这个功能的岗位的人要账号就行

    这个账号一定要有,否则查不出物流信息

开放平台操作

创建应用

  1. 登录京东物流开放平台后应用管理➡️创建应用➡️ISV应用,输入应用名称、应用描述,确定之后就创建成功了,过几秒会自动跳转到对接方案界面

    https://i-blog.csdnimg.cn/img_convert/fa65a6b96be558c28f82f83e45aa4e05.png

    https://i-blog.csdnimg.cn/img_convert/c13c2c4d390e3f5de6f0c00d56c0ab8e.png

  2. 我们点击订阅新的对接方案,找到京东物流标准轨迹服务➡️申请使用

    申请之后订阅状态先在审批状态,过一会就审批通过变成订阅成功,就可以使用了

    https://i-blog.csdnimg.cn/img_convert/69f1c103ca26a0d9e1658c0f1dccf1fd.png

    https://i-blog.csdnimg.cn/img_convert/f1b4f2150771b8791dbff5741bd8c704.png

  3. 点击对接文档,选择开发工具,再选择京东物流轨迹查询通用接口,我们可以在这里使用API测试工具进行测试

    https://i-blog.csdnimg.cn/img_convert/8c9749e251dc90d870881bea04b0d053.png

  4. 这里需要填写一些必要的参数,我一一说明一下

    AppKey和AppSecret在应用详情中查看

    https://i-blog.csdnimg.cn/img_convert/c9ae4ff4518c9bcc1d34575769b02afa.png

    AccessToken通过点击应用详情中的授权链接登录签约账号获取,获取后会给你一个access_token和refresh_token

    access_token有效期为1年,refresh_token有效期为1年1个月,在refresh_token有效期内,

    • access_token临过期超过10天,调用刷新接口会固定返回原来的access_token 和 refresh_token,也就是说没有效果;
    • access_token临过期10天内,调用刷新接口可以延长1年原有access_token有效期,并生成新的有效期为1年1个月的refresh_token,原refresh_token失效。
    • 调用接口的完整代码在 最下面

    https://i-blog.csdnimg.cn/img_convert/aa1b043e952ea21f4ef93d172c749e7f.png

    referenceNumber:京东物流单号

    referenceType:单号类型,填固定值20000就行

    phone:快递发送方或接收方的手机号后四位

  5. 都填好之后点击发起测试,就会调用接口查询出物流信息,code返回1000即为成功

    https://i-blog.csdnimg.cn/img_convert/aec5491ffb7a95fdfab423c6d1fb08dd.png

  6. api测试工具没问题了之后点击旁边的代码示例,里面有现成的代码,可以直接用。当然也可以自己写,因为本质上就是请求一个接口,把参数组装好就行

    https://i-blog.csdnimg.cn/img_convert/c47224a2b98292e8a243ab6a648fa76b.png

自行编写代码

下面这个是我根据官方的示例代码简化的,因为我当时对接的时候不止是京东,还有顺丰和德邦,用已经封装好的方法会比较好写好维护

使用前记得先引入hutool依赖

<!--hutool工具类-->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.11</version>
</dependency>

ExpressConstants是存放静态常量的一个类,自行编写即可

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.erp.common.constant.ExpressConstants;
import org.apache.commons.codec.binary.Hex;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.time.OffsetTime;
import java.util.*;

    /**
     * 查询京东物流路由信息
     * @param expressNum
     * @return
     */
    private String queryJDExpress(String expressNum,String phoneNumber) throws IOException, GeneralSecurityException {
        //按照API要求放置参数
        List<Map<String,Object>> list = new ArrayList<>();
        Map<String,Object> json = new HashMap<>();
        json.put("referenceNumber",expressNum);
        json.put("referenceType","20000");
        json.put("phone",phoneNumber);
        list.add(json);
        String body = JSONUtil.toJsonStr(list);

        String timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());DateUtils.getTime();
        String content = String.join("", new String[]{
                ExpressConstants.JD_APP_SECRET,
                "access_token", ExpressConstants.JD_ACCESS_TOKEN,
                "app_key", ExpressConstants.JD_APP_KEY,
                "method", ExpressConstants.JD_QUERY_URL,
                "param_json", body,
                "timestamp", timestamp,
                "v", "2.0",
                ExpressConstants.JD_APP_SECRET});
        //md5加密签名 并转为十六进制字符串
        String sign = Hex.encodeHexString(MessageDigest.getInstance("md5").digest(content.getBytes(StandardCharsets.UTF_8)));
        String uri = ExpressConstants.JD_CALL_URL_PROD + ExpressConstants.JD_QUERY_URL;

        Map<String, String> query = new HashMap<>();
        query.put("LOP-DN", ExpressConstants.JD_DOCKING_CODE);
        query.put("access_token", ExpressConstants.JD_ACCESS_TOKEN);
        query.put("app_key", ExpressConstants.JD_APP_KEY);
        query.put("timestamp", timestamp);
        query.put("v", "2.0");
        query.put("sign", sign);
        query.put("algorithm", "md5-salt");
        //在路径上拼接参数
        StringBuilder stringBuilder = new StringBuilder();
        boolean first = true;
        for (Map.Entry<String, String> entry : query.entrySet()) {
            if (!first) {
                stringBuilder.append("&");
            } else {
                first = false;
            }
            stringBuilder.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8.name()));
        }
        String url =  uri + "?" + stringBuilder;
        HttpRequest request = HttpUtil.createPost(url);
        int offset = OffsetTime.now().getOffset().getTotalSeconds() / 3600;
        Map<String, String> headers = new HashMap<>();
        //lop-tz代表时区,为接口调用当地的时区;删去后默认为东八区
        //headers.put("lop-tz", String.valueOf(offset));
        //用于开放平台识别客户调用API方式,客户无需修改/
        headers.put("User-Agent", "lop-http/java");
        headers.put("content-type", "application/json;charset=utf-8");
        request.addHeaders(headers);
        request.body(body);
        String result = request.execute().body();
        System.out.println("result = " + result);
        return result;
    }

ExpressConstants.java

public class ExpressConstants
{
    /**京东APPKEY——zmq*/
    public static final String JD_APP_KEY = "";
    /**京东APPSECRET*/
    public static final String JD_APP_SECRET = "";
    /**京东ACCESSTOKEN*/
    public static final String JD_ACCESS_TOKEN = "";
    /**京东对接方案编码*/
    //public static final String JD_DOCKING_CODE = "ECAP";
    public static final String JD_DOCKING_CODE = "Tracking_JD";  //2025-04-29 京东接口修改,原接口不再维护
    /**京东查询路由接口地址*/
    //public static final String JD_QUERY_URL = "/ecap/v1/orders/trace/query";
    public static final String JD_QUERY_URL = "/jd/tracking/query";  //2025-04-29 京东接口修改,原接口不再维护
    /**京东预发环境的地址 -PRO*/
    public static final String JD_CALL_URL_BOX = "https://uat-api.jdl.com";
    /**京东生产环境的地址 -PRO*/
    public static final String JD_CALL_URL_PROD = "https://api.jdl.com";
}

有需要云服务器的小伙伴推荐使用 以及 ,都很实惠,适合长期使用
另外,欢迎来我的博客——