Java 调用京东商品详情接口全攻略(2026 版)

admin16小时前淘宝api9


在电商数据对接、比价工具、选品分析等场景中,获取京东商品详情是最常见的需求。本文基于 2026 年京东开放平台的最新规则,系统讲解 Java 调用京东商品详情接口 的完整流程:从接口选型、签名鉴权、完整代码实现到高频避坑。

一、先分清两套 API,选对方向

京东商品详情接口分为两大体系,调用前先判断自己属于哪类用户:
表格
对比项京东联盟 API宙斯 JOS 商家 API
面向人群个人、CPS 推广者、比价工具有自有京东店铺的商家/ERP 服务商
核心接口jd.union.open.goods.detail.queryjingdong.item.read.get
数据特点含佣金、优惠券、券后价数据最全:真实库存、售后、内部价
门槛个人实名认证即可企业认证 + 店铺授权
限制未参加联盟的商品查不到只能查自己店铺的商品
统一调用网关https://api.jd.com/routerjson(POST)
如果你没有京东店铺,只想做比价、选品、导购,直接选京东联盟 API 即可。

二、接入准备

  1. 注册与认证:在京东联盟官网注册媒体账号,完成个人实名认证。
  2. 创建应用:进入「开发者管理」创建应用,获取 AppKeyAppSecret(密钥务必存服务器,禁止暴露到前端)。
  3. 申请权限:申请商品详情 API 权限,填写用途(比价/选品/导购),一般当天审核通过。

三、签名机制(90% 的调用失败都源于签名错误)

签名流程:将所有请求参数(除 sign 本身)按 ASCII 升序 排序,拼接成 key1value1key2value2...,再使用 AppSecret 做 HMAC-SHA256 加密并转大写。
常见错误码速查:401 签名错误、403 权限不足、10003 限流、1004 AppKey 无效。

四、Maven 依赖

xml
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.14</version></dependency><dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>2.0.53</version></dependency>

五、Java 完整实现

5.1 签名工具类

java
package com.example.jdapi.util;import javax.crypto.Mac;import javax.crypto.spec.SecretKeySpec;import java.util.Map;import java.util.TreeMap;public class JdSignUtil {

    /**
     * 京东联盟签名:参数 ASCII 升序拼接 + HmacSHA256 + 转大写
     */
    public static String sign(Map<String, String> params, String appSecret) throws Exception {
        // TreeMap 天然按 key 字典序(ASCII)排序
        Map<String, String> sorted = new TreeMap<>(params);

        StringBuilder raw = new StringBuilder();
        for (Map.Entry<String, String> entry : sorted.entrySet()) {
            String key = entry.getKey();
            String value = entry.getValue();
            // 跳过空值与 sign 本身
            if (key.equals("sign") || value == null || value.isEmpty()) {
                continue;
            }
            raw.append(key).append(value);
        }

        Mac mac = Mac.getInstance("HmacSHA256");
        mac.init(new SecretKeySpec(appSecret.getBytes("UTF-8"), "HmacSHA256"));
        byte[] digest = mac.doFinal(raw.toString().getBytes("UTF-8"));

        StringBuilder sb = new StringBuilder();
        for (byte b : digest) {
            sb.append(String.format("%02x", b));
        }
        return sb.toString().toUpperCase();
    }}

5.2 商品详情 API 客户端

java
package com.example.jdapi.client;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.example.jdapi.util.JdSignUtil;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.util.EntityUtils;import java.util.HashMap;import java.util.Map;public class JdGoodsApiClient {

    private static final String API_URL = "https://api.jd.com/routerjson";
    private final String appKey;
    private final String appSecret;
    private final CloseableHttpClient httpClient = HttpClients.createDefault();

    public JdGoodsApiClient(String appKey, String appSecret) {
        this.appKey = appKey;
        this.appSecret = appSecret;
    }

    /**
     * 查询商品详情(京东联盟)
     *
     * @param skuIds 商品 SKU ID,支持多个,逗号分隔(批量最多 20 个)
     */
    public JSONObject queryGoodsDetail(String skuIds) throws Exception {
        // 1. 公共参数
        Map<String, String> params = new HashMap<>();
        params.put("app_key", appKey);
        params.put("method", "jd.union.open.goods.detail.query");
        params.put("timestamp", String.valueOf(System.currentTimeMillis()));
        params.put("format", "json");
        params.put("v", "2.0");

        // 2. 业务参数:指定字段可减少响应体积、提升速度
        JSONObject goodsReq = new JSONObject();
        goodsReq.put("skuIds", skuIds);
        goodsReq.put("fields", "skuId,name,price,mainImg,stock,monthSales,promotionInfo");
        params.put("goods_req", goodsReq.toJSONString());

        // 3. 生成签名
        params.put("sign", JdSignUtil.sign(params, appSecret));

        // 4. 发送 POST 请求
        HttpPost post = new HttpPost(API_URL);
        post.setEntity(new StringEntity(JSON.toJSONString(params),
                "application/json"));
        post.setHeader("Content-Type", "application/json");

        try (CloseableHttpResponse response = httpClient.execute(post)) {
            String body = EntityUtils.toString(response.getEntity(), "UTF-8");
            JSONObject result = JSON.parseObject(body);

            // 5. 统一错误处理
            if (result.containsKey("error_response")) {
                JSONObject err = result.getJSONObject("error_response");
                throw new RuntimeException(
                        "调用失败: " + err.getString("msg")
                                + " (code=" + err.getString("code") + ")");
            }
            return result;
        }
    }

    public static void main(String[] args) throws Exception {
        JdGoodsApiClient client = new JdGoodsApiClient("你的AppKey", "你的AppSecret");
        JSONObject result = client.queryGoodsDetail("100012345678");
        System.out.println(result.toJSONString());
    }}

5.3 响应示例

JSON
{
  "jd_union_open_goods_detail_query_response": {
    "code": "0",
    "result": {
      "goodsInfo": {
        "skuId": 100012345678,
        "title": "Apple iPhone 17 Pro 256GB",
        "lowPrice": 8999.00,
        "monthSales": 5200,
        "mainImg": "https://img10.360buyimg.com/...",
        "promotionInfo": "满8000减500"
      }
    }
  }}

六、调用频率限制(2026 官方标准)

  • 京东联盟基础权限:QPS ≤ 10 次/秒,日上限 5000 次;高级权限可提升至 QPS ≤ 20、日上限 10 万。
  • 商家 JOS:个人/基础账号 QPS ≤ 2,企业账号默认 5 QPS,可申请至 50 QPS。
  • 批量接口:单次最多 20 个 SKU,注意 1 次批量调用按 20 次单品调用计数。

七、高频避坑指南

  1. 签名失败排査:时间戳必须是毫秒级(误差需在有效期内);参数值含空格或空值参与拼接会破坏签名;排序必须严格按 ASCII 升序。
  2. 限流应对:生产环境加请求间隔(建议 ≥1 秒)+ 本地缓存 + 失败退避重试,不要粗暴并发打满 QPS。
  3. 批量查询分批:一次最多 20 个 SKU,超过要分批处理。
  4. 合规红线:严禁爬取售卖数据、绕链引流或伪造商品信息;密钥放服务端,前端绝不暴露。
  5. 按需指定 fields:只取需要的字段,能显著减小响应体积并提升接口速度。

八、总结

Java 接入京东商品详情接口的核心就三步:申请密钥 → HmacSHA256 签名 → POST 到 routerjson 网关。把签名工具类封装好、错误码处理好、限流做平滑,一个稳定可靠的京东商品数据服务就搭建完成了。如果是商家自建 ERP,则切换到 jingdong.item.read.get 体系并额外携带 OAuth2 的 access_token 即可,整体签名逻辑保持一致。


如遇任何疑问或有进一步的需求,请随时与我私信或者评论联系。

相关文章

Java爬虫是什么,如何获取API接口

一、Java爬虫的定义Java爬虫是一种基于Java编程语言开发的网络爬虫程序。它通过模拟浏览器行为,向目标网站发送HTTP请求,获取网页内容并解析出所需数据。Java爬虫技术广泛应用于数据采集、市场...

获取淘宝SKU商品详情数据api的实战指南

在电商数据分析、竞品监控、个性化推荐等场景中,获取淘宝商品的SKU(Stock Keeping Unit,库存进出计量的基本单元)详情数据至关重要。本文将详细介绍如何通过合法途径获取淘宝SKU商品详情...

2025能用、能落地” 的 Walmart 商品详情 API(item_get_desc 维度)实战指南

以下内容基于 2025 年最新公开文档与社区逆向方案,给你一份 “能用、能落地” 的 Walmart 商品详情 API(item_get_desc 维度)实战指南,涵盖官方通道、第三方逆向、代码示例与...

Java 获取淘宝/天猫推荐商品列表实战指南

一、方案选择:官方 API vs 第三方数据服务1. 淘宝开放平台官方 API(推荐用于自有店铺)淘宝开放平台(Taobao Open Platform, TOP)提供了官方 SDK,适合管理自有店铺...

如何借助淘宝/天猫的 API 接口,实现订单系统的自动同步

在电商运营中,订单管理是商家的核心工作之一。随着业务的增长,手动处理订单的方式不仅效率低下,还容易出错。因此,实现订单信息的自动同步变得尤为重要。本文将详细介绍如何借助淘宝/天猫的 API 接口,实现...

1688 图搜接口(拍立淘)实战指南:以图搜货的技术实现与选品落地

在跨境电商和供应链选品的场景中,"有图无货号"是最常见的痛点——你在亚马逊、TikTok Shop 或展会上看到一款潜力商品,只有图片却不知道源头工厂在哪里。1688 的图搜接口(...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。