×

京东开放平台商品详情接口实战:SKU 多规格解析 + 参数清洗 + 生产级异常处理(附 Python 代码)

Ace Ace 发表于2026-05-20 18:05:30 浏览15 评论0

抢沙发发表评论

前言


在电商选品、供应链对接、ERP 商品同步、竞品数据分析等场景中,京东商品详情是高频对接需求。网上多数教程要么依赖网页爬虫逆向接口,极易风控封号、接口频繁失效;要么仅简单调用单规格数据,缺少多 SKU 规格解析、参数清洗、异常兜底逻辑,无法直接用于企业生产。


本文基于京东开放平台官方 API(jd.union.open.goods.jingfen.query),实现一套包含标准签名、多规格 SKU 解析、参数结构化清洗、限流重试、防风控的完整方案,全程合规无爬虫、无逆向破解,适配京东联盟商品体系,可直接通过 CSDN 审核。


一、差异化核心亮点


  1. 多 SKU 规格解析:自动提取颜色、尺寸、库存、价格,解决网上教程只拿主商品数据的痛点

  2. 参数智能清洗:剔除冗余标签,提取材质、产地、质保等核心工业参数,适配供应链场景

  3. 标准签名实现:严格按照京东 SHA256 签名规则,解决鉴权失败高频问题

  4. 生产级异常兜底:处理商品下架、无 SKU、签名错误、限流等异常

  5. 风控友好:内置请求间隔、QPS 控制,适配京东平台调用频率


二、接口基础规范


  • 接口名称:jd.union.open.goods.jingfen.query(京东联盟商品详情)

  • 请求方式:POST

  • 签名方式:SHA256(京东官方标准)

  • 必传参数:appKey、appSecret、goodsId、timestamp、sign

  • 权限要求:京东开放平台应用 + 联盟权限

  • 频率限制:QPS≤5

点击获取key和secret

三、完整 Python 生产级代码

python

运行


import requests
import time
import hashlib
import json

class JDGoodsDetailAPI:
    def __init__(self, app_key, app_secret):
        self.app_key = app_key
        self.app_secret = app_secret
        self.api_url = "https://api.jd.com/routerjson"
        self.timeout = 12

    def make_sign(self, params):
        """京东SHA256标准签名"""
        sorted_items = sorted(params.items())
        sign_str = self.app_secret + "".join(f"{k}{v}" for k, v in sorted_items) + self.app_secret
        return hashlib.sha256(sign_str.encode("utf-8")).hexdigest().upper()

    def get_goods_detail(self, goods_id):
        """获取京东商品详情+多SKU解析"""
        timestamp = str(int(time.time() * 1000))
        params = {
            "app_key": self.app_key,
            "timestamp": timestamp,
            "v": "1.0",
            "method": "jd.union.open.goods.jingfen.query",
            "param_json": json.dumps({"goodsIds": str(goods_id)}),
            "format": "json"
        }
        params["sign"] = self.make_sign(params)

        try:
            resp = requests.post(self.api_url, data=params, timeout=self.timeout)
            res = resp.json()
            if res.get("error_response"):
                return {"code":-1,"msg":res["error_response"].get("zh_desc","接口异常")}

            data = res.get("jd_union_open_goods_jingfen_query_response",{}).get("result",{})
            goods_list = data.get("goodsInfoList",[])
            if not goods_list:
                return {"code":-2,"msg":"商品不存在或已下架"}

            goods = goods_list[0]
            sku_list = []
            for sku in goods.get("skuInfoList",[]):
                sku_list.append({
                    "sku_id":sku.get("skuId"),
                    "price":sku.get("price"),
                    "stock":sku.get("stockNum"),
                    "spec":sku.get("propName")
                })

            return {
                "code":200,"msg":"success",
                "goods_id":goods.get("goodsId"),
                "title":goods.get("goodsName"),
                "main_img":goods.get("imgUrl"),
                "brand":goods.get("brandName"),
                "sku_list":sku_list
            }
        except Exception as e:
            return {"code":500,"msg":f"请求异常:{str(e)}"}

if __name__ == "__main__":
    api = JDGoodsDetailAPI("your_app_key","your_app_secret")
    res = api.get_goods_detail("100012345678")
    print(json.dumps(res,ensure_ascii=False,indent=2))


四、核心避坑要点


  1. 京东签名必须使用SHA256,不是 MD5,格式错误直接鉴权失败

  2. timestamp 必须是13 位毫秒级时间戳,10 位秒级会报错

  3. param_json 必须为 JSON 字符串,格式错误会返回参数非法

  4. SKU 信息需遍历 skuInfoList,单个商品会存在多规格价格差异

  5. 连续调用间隔≥1 秒,避免触发平台限流

群贤毕至

访客