京东商品详情接口技术速览:从签名到JSON解析
一、主题定位
本文只讲开发实现这一层:请求怎么构造、签名怎么算、返回的 JSON 怎么解析。面向正在写对接代码的开发者,不铺开讲业务价值。
二、请求构造的三步
第 1 步:组装公共参数
params = {
"app_key": "your_app_key",
"method": "jd.union.open.goods.detail.query",
"timestamp": "2026-10-12 16:30:00", # 东八区,格式固定
"format": "json",
"v": "1.0",
"sign_method": "md5",
"skuId": "100012345678" # 业务参数,核心入参
}第 2 步:计算签名
京东的签名规则是只拼 value、不拼 key:
import hashlib
def make_sign(params, app_secret):
# 1. 剔除 sign,按 key 的 ASCII 升序排序
keys = sorted(k for k in params if k != "sign" and params[k] != "")
# 2. 只拼接 value
raw = "".join(str(params[k]) for k in keys)
# 3. 首尾各拼一次 secret
src = app_secret + raw + app_secret
# 4. MD5 后转大写
return hashlib.md5(src.encode("utf-8")).hexdigest().upper()第 3 步:POST 到网关
https://api.jd.com/routerjson,Content-Type 用 application/x-www-form-urlencoded。
三个高频踩坑点:① 拼成 key=value(应为只拼 value);② 排序前没剔除空值参数;③ timestamp 格式不是 yyyy-MM-dd HH:mm:ss,超出 ±10 分钟窗口会被网关直接拒绝。
三、标准 JSON 返回参考
测试o0b.cn/anzexi
{
"jd_union_open_goods_detail_query_response": {
"code": "0",
"msg": "success",
"requestId": "req_20261012163012456",
"result": {
"goodsInfo": {
"skuId": "100012345678",
"spuId": "100012345600",
"title": "2026夏季新款纯棉短袖T恤 男女同款宽松版",
"brandName": "XX品牌",
"shopName": "XX官方旗舰店",
"isJdSelf": false,
"itemUrl": "https://item.jd.com/100012345678.html",
"priceInfo": {
"originalPrice": "99.00",
"discountPrice": "59.00",
"lowestPrice30Days": "55.00"
},
"couponInfo": {
"hasCoupon": true,
"finalPrice": "49.00",
"couponList": [
{
"couponId": "cp20261012001",
"couponDiscount": "10.00",
"couponDesc": "满59减10元店铺券",
"endTime": "2026-10-31 23:59:59"
}
]
},
"stockInfo": {
"totalStock": 950,
"isSale": true,
"stockStatus": "in_stock"
},
"salesInfo": {
"totalSales": 12580,
"monthSales": 3210
},
"imageInfo": {
"mainImg": "https://img10.360buyimg.com/n1/jfs/t1/xxx/main.jpg",
"detailImgList": [
"https://img10.360buyimg.com/n1/jfs/t1/xxx/d1.jpg",
"https://img10.360buyimg.com/n1/jfs/t1/xxx/d2.jpg"
]
},
"skuList": [
{
"skuId": "10001234567801",
"specText": "白色 M",
"specs": [
{"name": "颜色", "value": "白色"},
{"name": "尺码", "value": "M"}
],
"skuPrice": "59.00",
"skuStock": 320,
"isAvailable": true
},
{
"skuId": "10001234567803",
"specText": "红色 S",
"skuPrice": "59.00",
"skuStock": 0,
"isAvailable": false
}
],
"productParams": [
{"name": "面料", "value": "100%棉"},
{"name": "版型", "value": "宽松型"}
],
"commentSummary": {
"goodRateShow": "97.2",
"commentCount": 1860
}
}
}
}
}