首页 > 教程攻略 > ai教程 >京东商品详情API接口开发指南(含Java/Python实现)

京东商品详情API接口开发指南(含Java/Python实现)

来源:互联网 时间:2026-06-11 07:24:08

接口概述

京东商品详情API接口开发指南(含Ja va/Python实现)

京东开放平台给开发者留了个不错的接口——商品详情查询。简单来说,只要有一个SKUID,就能把商品的标题、价格、高清图、促销信息一股脑儿全拿回来。在如今电商数据抓得紧、反应要快的环境下,这个接口确实省事。不过别着急,用之前得先申请权限、拿到认证密钥,这是硬门槛。

接口特点

先说说它的几个真本事。

批量查询是亮点:一次最多能查20个SKU,效率瞬间拉满。据市场调研反馈,用批量查询功能,数据获取时间能缩短70%左右,特别适合那种需要大量商品对比分析的场景。

数据格式方面,返回的是标准的JSON,主流编程语言几乎都能直接上手解析,开发成本自然也就降下来了。

安全这块也考虑得很周全:采用签名验证机制,数据在传输过程中不会被篡改或攻击,开发者和平台都省心。再加上全面支持HTTPS协议,在当前网络环境下,这就是给数据加了把加密锁。

Ja va实现示例

先看看Ja va版本怎么写的。代码结构很清晰,核心就是构造参数、生成签名、发送请求。注意签名算法用的是MD5,拼接时要严格按照参数排序来,别搞错顺序。

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.codec.digest.DigestUtils;
import ja va.io.BufferedReader;
import ja va.io.InputStreamReader;
import ja va.net.HttpURLConnection;
import ja va.net.URL;
import ja va.util.HashMap;
import ja va.util.Map;
import ja va.util.TreeMap;

public class JdProductApi {
    private static final String API_URL = "https://api.jd.com/routerjson";
    private static final String VERSION = "1.0";

    public static String queryProductDetail(long skuId, String appKey, String appSecret) {
        try {
            // 精心构造请求参数
            Map params = new TreeMap<>();
            params.put("method", "jd.union.open.goods.detail.query");
            params.put("app_key", appKey);
            params.put("timestamp", System.currentTimeMillis());
            params.put("v", VERSION);
            params.put("format", "json");

            // 构建商品请求参数
            JSONObject goodsReq = new JSONObject();
            goodsReq.put("skuIds", new long[]{skuId});
            params.put("goodsReq", goodsReq);

            // 严格生成签名
            String sign = generateSign(params, appSecret);
            params.put("sign", sign);

            // 准确发送请求
            URL url = new URL(API_URL);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setDoOutput(true);
            conn.getOutputStream().write(JSON.toJSONString(params).getBytes());

            // 高效处理响应
            BufferedReader reader = new BufferedReader(
                new InputStreamReader(conn.getInputStream()));
            StringBuilder response = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            return response.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    private static String generateSign(Map params, String appSecret) {
        StringBuilder sb = new StringBuilder(appSecret);
        for (Map.Entry entry : params.entrySet()) {
            sb.append(entry.getKey()).append(entry.getValue());
        }
        sb.append(appSecret);
        return DigestUtils.md5Hex(sb.toString()).toUpperCase();
    }
}

Python实现示例

Python版本更简洁,用requests库一行就能搞定请求。签名逻辑跟Ja va完全一样,只是语法换成了Python风格。

import hashlib
import time
import json
import requests

class JdProductApi:
    API_URL = "https://api.jd.com/routerjson"
    VERSION = "1.0"

    @staticmethod
    def query_product_detail(sku_id, app_key, app_secret):
        params = {
            "method": "jd.union.open.goods.detail.query",
            "app_key": app_key,
            "timestamp": int(time.time() * 1000),
            "v": JdProductApi.VERSION,
            "format": "json",
            "goodsReq": {"skuIds": [sku_id]}
        }

        # 严谨生成签名
        sign = JdProductApi.generate_sign(params, app_secret)
        params["sign"] = sign

        # 可靠发送请求
        response = requests.post(
            JdProductApi.API_URL,
            json=params,
            headers={"Content-Type": "application/json"}
        )
        return response.json()

    @staticmethod
    def generate_sign(params, app_secret):
        param_str = app_secret
        for key in sorted(params.keys()):
            param_str += f"{key}{params[key]}"
        param_str += app_secret
        return hashlib.md5(param_str.encode()).hexdigest().upper()

接口返回示例

请求成功后,返回的数据长这样(JSON格式):

{
    "code": 0,
    "message": "success",
    "data": {
        "skuId": 1234567,
        "skuName": "示例商品名称",
        "price": 299.00,
        "imageList": ["http://img1.jpg", "http://img2.jpg"],
        "brandName": "示例品牌",
        "category": "电子产品",
        "shopId": 10001,
        "shopName": "官方旗舰店",
        "promotionList": [
            {
                "promotionId": 1,
                "promotionName": "满299减30",
                "startTime": "2025-05-01 00:00:00",
                "endTime": "2025-05-31 23:59:59"
            }
        ]
    }
}

开发注意事项

最后提几个容易踩坑的点:

  • 权限申请先行

    :别一上来就调接口,先去京东开放平台申请API权限,这是硬性前提。
  • 频率限制牢记

    :每个应用默认每秒最多调用100次,超出就会被限流。得提前规划好调用节奏,别让程序跑着跑着突然断粮。
  • 签名算法精准

    :文档怎么写就怎么实现,一点偏差都会导致签名验证失败。参数排序、拼接顺序、MD5大小写,都得对得上。
  • 协议选择恰当

    :强烈建议用HTTPS,虽然HTTP也能用,但数据传输没加密,容易被截获。
  • 异常处理全面

    :网络超时、参数错误、返回码非0……这些情况都要提前考虑,加上try-catch或容错逻辑,否则线上会出大问题。

以上代码给出了Ja va和Python两种实现,大家可以根据技术栈选合适的版本。实际使用时,记得把appKey和appSecret替换成自己的值,并且补上完善的错误处理逻辑。这样一来,基本就能稳稳拿到京东商品的详细数据了。