京东商品详情API接口开发指南(含Java/Python实现)
接口概述
京东开放平台提供了商品详情查询接口,开发者可以通过SKUID获取商品的详细信息,包括标题、价格、图片、促销信息等。该接口需要申请API权限和认证密钥。
点击获取key和secret
接口特点
- 支持批量查询(最多20个SKU)
- 返回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 = "https://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 = "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()
接口返回示例
jsonCopy Code
{ "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次/秒)
- 签名算法必须严格按照文档实现
- 建议使用HTTPS协议保证传输安全
- 处理异常情况(网络超时、参数错误等)
以上代码提供了Java和Python两种语言的实现,开发者可以根据自己的技术栈选择合适的版本。实际使用时需要替换appKey和appSecret为实际值,并添加适当的错误处理逻辑。