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

79 阅读2分钟

接口概述

京东开放平台提供了商品详情查询接口,开发者可以通过SKUID获取商品的详细信息,包括标题、价格、图片、促销信息等。该接口需要申请API权限和认证密钥。

点击获取key和secret 接口特点

支持批量查询(最多20SKU)
返回JSON格式数据
需要签名验证
支持HTTPS协议

Java实现示例

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

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

public static String queryProductDetail(long skuId, String appKey, String appSecret) {
    try {
        // 构造请求参数
        Map<String, Object> 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<String, Object> params, String appSecret) {
    StringBuilder sb = new StringBuilder(appSecret);
    for (Map.Entry<String, Object> entry : params.entrySet()) {
        sb.append(entry.getKey()).append(entry.getValue());
    }
    sb.append(appSecret);
    return DigestUtils.md5Hex(sb.toString()).toUpperCase();
}

}

Python实现示例

import hashlib import time import json import requests

class JdProductApi: API_URL = "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()

接口返回示例

jsonCopy Code

{ "code": 0, "message": "success", "data": { "skuId": 1234567, "skuName": "示例商品名称", "price": 299.00, "imageList": ["img1.jpg", "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次/秒)
签名算法必须严格按照文档实现
建议使用HTTPS协议保证传输安全
处理异常情况(网络超时、参数错误等)

以上代码提供了Java和Python两种语言的实现,开发者可以根据自己的技术栈选择合适的版本。实际使用时需要替换appKey和appSecret为实际值,并添加适当的错误处理逻辑。