🕵️《京东联盟API爬坑:不用店铺授权也能拿商品详情,但库存只有“有货/无货”》(附Python源码)

简介: 京东联盟API(jd.union.*)无需店铺授权,仅返回库存状态(有货/无货),适用于选品、CPS推广;而京东开放平台JOS接口需企业认证+卖家OAuth授权,可获取真实库存数量、区域仓存等,专用于ERP、防超卖等业务。二者权限、数据深度严格隔离,切勿混用。

这是京东开放体系里最容易混淆、也最容易踩坑的点之一:
京东联盟API(jd.union.*)≠ 京东开放平台JOS(商家ERP接口),两者在数据深度与授权要求上完全不同。

一、核心结论先给

• 京东联盟API(jd.union.open.goods.detail.query)

✅ 不需要店铺授权,只要京东联盟实名应用 + AppKey/Secret 就能调
❌ 库存只返回状态(有货 / 无货 / 预售),不返回具体可售库存数量
✅ 适合:选品、比价、佣金监控、CPS推广、价格追踪

• 京东开放平台JOS(jingdong.ware.read.get / jingdong.stock.get)

✅ 需要企业认证 + 店铺卖家OAuth授权
✅ 返回真实SKU库存数量、区域库存、锁定库存
✅ 适合:ERP商品同步、防超卖、WMS出入库、店铺自营管理

如果你做电商ERP、库存预占、发货回写,联盟接口库存不够用,必须走JOS商家接口。

二、京东联盟接口“坑点”拆解

坑序号 现象 真相

① 以为不用授权就能拿全量数据 联盟无店铺权限,看不到真实库存、成本价、商家编码

② skuList[].stock 要么没有,要么是1/0 联盟返回的是 stockState(1=有货 / 0=无货),不是 stockNum

③ 价格字段和京东前台不一致 联盟返回促销价/券后价/佣金价,不是商家后台“基准库存价”

④ 调订单/物流接口报403 联盟只有商品/推广/订单概览,没有 jd.order.detail.get 这种商家接口

⑤ 以为AppKey通用 联盟应用 ≠ JOS应用,网关不同,权限体系隔离

三、Python:京东联盟商品详情调用(含库存状态解析)

jd_union_detail_demo.py

"""
京东联盟API 商品详情查询
jd.union.open.goods.detail.query

  • 无需店铺授权
  • 库存仅返回 有货(1) / 无货(0) / 预售 状态
    依赖: requests
    """
    import hashlib
    import json
    import time
    import requests
    from typing import Dict, List

class JdUnionClient:
GW = "https://api.jd.com/routerjson"

def __init__(self, app_key: str, app_secret: str):
    self.ak = app_key
    self.ask = app_secret

# ───── JOS/联盟通用 MD5签名(秒级timestamp)─────
def _sign(self, params: Dict) -> str:
    filt = sorted(
        (k, v) for k, v in params.items()
        if k != "sign" and v is not None and str(v).strip() != ""
    )
    qs = "".join(f"{k}{v}" for k, v in filt)
    raw = f"{self.ask}{qs}{self.ask}"
    return hashlib.md5(raw.encode("utf-8")).hexdigest().upper()

def get_goods_detail(self, sku_ids: List[int], fields: str = None) -> Dict:
    """
    sku_ids: 最多20个SKU ID
    fields 建议: skuId,productName,price,promotionPrice,couponInfo,
                  stockState,commissionInfo,salesCount,shopName
    """
    fields = fields or (
        "skuId,productName,price,promotionPrice,couponInfo,"
        "stockState,commissionInfo,salesCount,shopName,logisticsType"
    )
    biz = {"skuIds": sku_ids, "fields": fields}

    params = {
        "app_key": self.ak,
        "method": "jd.union.open.goods.detail.query",
        "timestamp": str(int(time.time())),   # ← 秒级!
        "format": "json",
        "v": "2.0",
        "sign_method": "md5",
        "360buy_param_json": json.dumps(biz, ensure_ascii=False,
                                         separators=(',', ':'))
    }
    params["sign"] = self._sign(params)

    r = requests.post(self.GW, data=params, timeout=15)
    r.raise_for_status()
    d = r.json()

    resp_key = "jd_union_open_goods_detail_query_response"
    data = d.get(resp_key, {})
    if "error_response" in str(data):
        err = data.get("error_response")
        raise Exception(f"Union API Err: {err.get('code')} {err.get('zh_desc')}")
    return data

# ───── 解析库存状态 ─────
def parse_stock(self, item: Dict) -> str:
    """
    联盟接口库存只有状态,不是数量
    stockState: 1=有货, 0=无货, 可能含预售标识
    """
    state = item.get("stockState")
    if state == 1:
        return "有货"
    elif state == 0:
        = "无货"
    else:
        return f"未知状态({state})"

    # 有些返回在 skuList[].stock 用 1/0 表示
    skus = item.get("skuList", [])
    if skus:
        print("   SKU库存示意:", [(s.get("skuId"), s.get("stock", "N/A"))
                                   for s in skus[:3]])

=========================================================

使用示例

=========================================================

if name == "main":
client = JdUnionClient("YOUR_JD_APP_KEY", "YOUR_JD_APP_SECRET")
SKU_IDS = [100012345678, 100087654321] # ← 替换真实SKU ID

try:
    result = client.get_goods_detail(SKU_IDS)
    data_list = result.get("data", [])
    if isinstance(data_list, dict):
        data_list = data_list.get("data") or []

    for item in (data_list or []):
        title = item.get("productName")
        price = item.get("promotionPrice") or item.get("price")
        stock_flag = client.parse_stock(item)
        commission = item.get("commissionInfo", {}).get("commission", "N/A")

        print(f"✅ SKU:{item.get('skuId')}")
        print(f"   标题:{title}")
        print(f"   促销价:¥{price}")
        print(f"   库存状态:{stock_flag}  ← 仅状态,无具体库存数")
        print(f"   预估佣金:{commission}")
        client.parse_stock(item)  # 打印sku示意

except Exception as e:
    print("❌", e)
    print("→ 确认: 京东联盟应用已实名、jd.union.open.goods.detail.query 已申请")

四、如果你必须要真实库存数量,怎么办?

走 京东JOS商家接口(需企业+店铺授权):

接口 能力

jingdong.ware.sku.read / jingdong.ware.stock.get 返回 stockNum(可售库存)、lockStock(锁定)、hsStockNum(在途)

jingdong.stock.get 多仓库存、区域库存

需 access_token 卖家OAuth2授权(不是联盟token)

这部分代码在之前《京东商品详情API(jingdong.item.read.get)》《京东库存API(jd.stock.get)实时同步方案》中已经给过完整Python封装。

五、选型一句话总结(面试/方案)

京东联盟API(jd.union.open.goods.detail.query)不用店铺授权就能拿商品标题/价格/券/佣金/销量,但库存只有“有货/无货”状态;要做ERP库存同步、防超卖、发货回写,必须用京东开放平台JOS商家接口(jingdong.ware.read.get / jd.stock.get)并走企业认证+卖家OAuth授权获取真实stockNum。

需要我帮你把“联盟选品监控 + JOS商家库存校正”写成一套双通道同步Demo(Python)吗?

相关文章
|
4天前
|
缓存 人工智能 安全
GPT-5.6 Terra与GPT-5.5性能实测:成本减半后的跑分对比与快速迁移指南
GPT-5.6 Terra 的定价为每百万 token 输入 2.50/输出 15。GPT-5.5 则是 5/ 30。Terra 的每一项费率,包括 $0.25/M 的缓存读取,都恰好是 GPT-5.5 的一半,因此在任何工作负载组合下,Terra 都固定 便宜 2.0x。以每天 10 万次请求、3K token 提示词计算,大约是 Terra 每天 2,000,GPT−5.5每天 4,000,即每月约 60,000对 120,000。问题在于:OpenAI 没有发布任何针对 Terra 的编码基准。那个著名的 91.9% Terminal-Bench 数字是 Sol 在 Ul
|
4天前
|
SQL 人工智能 自然语言处理
大模型内容安全实时防护:恶意Prompt注入拦截、越权阻断与熔断机制方案.166
本文系统阐述大模型输入安全防护体系,涵盖提示词注入、恶意Prompt拦截、越权阻断与输入熔断四大核心风险及应对方案。提出四层防护架构(预处理、检测、鉴权、熔断),结合规则引擎、语义识别与RBAC权限控制,实现全链路实时防护,保障业务合规、数据安全与服务稳定。
239 1
|
28天前
|
Linux 程序员 数据格式
【2026最新】Notepad++下载、安装和使用一篇搞定(附中文版安装包)
Notepad++ 是一款免费开源、轻量高效的 Windows 文本编辑器,支持 C/Python/HTML 等 80+ 语言语法高亮、代码折叠、正则替换、编码转换及插件扩展,专为程序员与文本处理用户打造,完美替代系统记事本。(239字)
|
4天前
|
存储 人工智能 JSON
Qwen 本地部署搭配 ComfyUI 生成 AI 漫剧完整实操指南(小白零基础可落地,零成本无限生成+角色一致性天花板)
2026全网最优本地漫剧流水线:零成本、离线运行、角色统一、低配(8G显卡)可跑。融合Qwen本地大模型+ComfyUI双引擎,实现剧本生成→分镜绘图→动态成片全自动,隐私安全、无审核限流,新手30分钟上手,日更无忧。(239字)
|
12天前
|
人工智能 编解码 物联网
2026 最新Stable Diffusion 本地部署教程 下载安装使用详细图解(含官网安装包)
Stable Diffusion(SD)是2022年发布的开源文生图模型,由Stability AI等联合开发。支持文生图、图生图、局部重绘等,依托VAE降低算力需求,可在消费级显卡运行。本文提供秋葉aaaki制作的Windows整合包(含图形界面与插件),开箱即用,零配置启动。
|
5天前
|
人工智能 缓存 JSON
刚刚 GPT-5.6 发布,吊打 Claude 5 和 Grok 4.5?一手实测来啦!
GPT-5.6 刚发布,跑分号称超越 Fable 5,真的假的?附一手实测,让 3 个最强 AI 编程模型 GPT-5.6 Sol、Claude Fable 5、Grok 4.5 在 Cursor 里同时一把梭开发网页游戏,看看最新模型到底谁更能打。
294 0
|
22天前
|
存储 人工智能 监控
QoderWork完全指南:从入门到精通,把“AI实习生”变成你的全能工作搭档
阿里云2026年推出的桌面端AI工作助手QoderWork,不止聊天,更可动手干活:本地运行、安全可控,支持文件整理、数据分析、PPT生成、网页开发等;内置专家套件、多Agent协作与自定义Skills,让AI真正成为你身边的“AI实习生”。
|
13天前
|
人工智能 缓存 安全
Claude Code 封号真实原因曝光,这次彻底不装了,直接针对国内开发者的账号下手?
Claude Code 封号潮背后:逆向扒出客户端隐写区域标记,Anthropic 政策收紧叠加 DeepSeek 7 月涨价,国产替代更紧迫。