在京东开放平台获取商品详情的API接口操作需遵循京东官方规范,以下为分步骤的详细解答及关键注意事项:
一、前期准备
- 注册开发者账号
- 访问京东开放平台或万邦开放平台,完成企业或个人开发者注册。
- 提交资质审核(企业需营业执照,个人需身份证)。
- 创建应用并获取密钥
- 登录开发者后台,创建新应用,填写应用名称、描述等。
- 审核通过后,获取
App Key和App Secret,用于后续接口调用。
- 申请API权限
- 在应用管理页面,申请"商品详情查询"等相关权限。
- 等待京东审核通过(通常1-3个工作日)。
二、API接口调用流程
1. 接口文档查阅
- 官方文档地址:京东开放平台文档。
- 核心接口:
- 商品详情查询 :
jd.union.open.goods.query(用于查询商品基本信息、佣金、价格等)。 - SKU详情查询 :
jd.union.open.goods.skuid.query(通过SKU ID获取详细规格)。
- 商品详情查询 :
2. 请求参数准备
- 公共参数 :
app_key:应用唯一标识。method:接口名称(如jd.union.open.goods.query)。timestamp:当前时间戳(毫秒级)。sign:签名(需按规则生成)。
- 业务参数 :
goodsReq:JSON格式,包含商品ID(materialId)、分类ID(cid1/cid2/cid3)等。
3. 签名生成规则
-
步骤 :
- 将所有参数按字典序排序。
- 拼接为
key1=value1&key2=value2...格式。 - 在末尾追加
app_secret,进行MD5加密,转为大写。
-
示例 :
plaintext|---|--------------------------------------------------------------------|
| |参数排序后:app_key=xxx&method=xxx×tamp=xxx|
| |拼接密钥:app_key=xxx&method=xxx×tamp=xxx&app_secret=your_secret|
| |MD5加密:生成32位大写签名|
4. 发起请求
-
请求方式 :
POST(推荐)或GET。 -
请求URL :
https://router.jd.com/api -
请求头 :
http|---|---------------------------------------------------|
| |Content-Type: application/x-www-form-urlencoded| -
请求体 :
plaintext|---|--------------------------------------------------------------------------------------------------------------------|
| |app_key=xxx&method=jd.union.open.goods.query×tamp=123456789&sign=SIGNATURE&goodsReq={"materialId":"123456"}|
5. 响应处理
-
成功响应 :
json|---|------------------------------|
| |{|
| |"code": "200",|
| |"data": {|
| |"goodsInfoList": [|
| |{|
| |"materialId": "123456",|
| |"goodsName": "商品名称",|
| |"priceInfo": {|
| |"price": "100.00",|
| |"discountPrice": "80.00"|
| |},|
| |"commissionInfo": {|
| |"commissionShare": "10.00"|
| |}|
| |}|
| |]|
| |}|
| |}| -
错误响应 :
json|---|---------------------|
| |{|
| |"code": "1001",|
| |"message": "签名错误"|
| |}|
三、关键注意事项
- 接口权限与频率限制
- 确保已申请对应接口权限,未授权调用会返回
403错误。 - 频率限制:单应用每分钟最多调用
100次(具体以文档为准)。
- 确保已申请对应接口权限,未授权调用会返回
- 数据时效性
- 商品价格、库存等信息可能实时变动,建议缓存数据并定期更新。
- 错误处理
- 常见错误码:
1001:签名错误(检查签名生成逻辑)。1002:参数缺失(核对必填参数)。1004:App Key无效(检查密钥是否正确)。
- 常见错误码:
- 合规性要求
- 不得将API数据用于非法用途(如爬虫、竞品分析)。
- 遵守京东《开放平台服务协议》,违规可能导致封号。
四、代码示例(Python)
python
|---|----------------------------------------------------------------------------|
| | import requests |
| | import hashlib |
| | import time |
| | import json |
| | |
| | def generate_sign(params, app_secret): |
| | sorted_params = sorted(params.items(), key=lambda x: x[0]) |
| | sign_str = "&".join([f"{k}={v}" for k, v in sorted_params]) + app_secret |
| | return hashlib.md5(sign_str.encode("utf-8")).hexdigest().upper() |
| | |
| | def get_goods_detail(app_key, app_secret, material_id): |
| | base_url = "https://router.jd.com/api" |
| | timestamp = int(time.time() * 1000) |
| | params = { |
| | "app_key": app_key, |
| | "method": "jd.union.open.goods.query", |
| | "timestamp": timestamp, |
| | "v": "1.0", |
| | "goodsReq": json.dumps({"materialId": material_id}) |
| | } |
| | params["sign"] = generate_sign(params, app_secret) |
| | |
| | response = requests.post(base_url, data=params) |
| | return response.json() |
| | |
| | # 示例调用 |
| | app_key = "your_app_key" |
| | app_secret = "your_app_secret" |
| | material_id = "123456" |
| | result = get_goods_detail(app_key, app_secret, material_id) |
| | print(result) |
五、替代方案
- 京东联盟Web服务:通过京东联盟后台直接获取商品推广链接和基础信息(无需API)。
- 第三方数据服务:如慢慢买、什么值得买等,提供商品数据接口(需付费)。
通过以上步骤,开发者可合规获取京东商品详情数据。如遇问题,可联系京东开放平台技术支持(邮箱:open@jd.com)。