🕵️《京东联盟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)吗?

相关文章
|
3月前
|
JSON API 数据格式
💳《京东API不是全程免费!基础联盟免费+商家按量,收费结构一文掰清》(附Python源码)
京东API并非全程免费!联盟API(如jd.union.open.*)调用免费,靠成交佣金盈利;商家JOS API(如jingdong.ware.*)含日免费额度,超量按次计费,电子面单、CRM等属增值收费。本文厘清两套体系差异,附Python双Client分流源码,助你精准控本避坑。(239字)
|
3月前
|
数据采集 缓存 监控
如何高效获取京东商品详情数据
本文详解京东商品详情数据获取的三大方案:官方API(合规稳定,推荐长期商用)、第三方标准化接口(开箱即用,适合快速落地)及爬虫(仅限临时测试,风险高)。重点介绍联盟/商家API接入流程、字段精简、批量查询、分层缓存与增量同步等提效策略,兼顾实时性与成本。
596 1
|
物联网 机器人 Swift
|
3月前
|
数据采集 机器学习/深度学习 人工智能
田间杂草定位与检测4200张YOLO智慧农业数据集分享
本数据集含4200张真实农田图像,YOLO格式,单类别(杂草)高质量标注,覆盖多作物、多光照、多生长阶段等复杂场景,专为智慧农业杂草检测与智能除草设备研发设计,支持YOLOv5/v8/v10等主流模型训练。
644 95
|
7月前
|
JSON API 数据格式
如何使用京东开放平台API获取店铺所有商品
本文详解如何通过京东开放平台API(OAuth 2.0认证)批量获取指定店铺全部商品信息:涵盖账号注册、权限申请、签名生成、分页查询(基于total动态计算页数)及Python完整实现,含错误处理与注意事项,助开发者高效集成京东商品数据。(239字)
|
4月前
|
数据采集 存储 JSON
京东商品详情 API 实战总结(技术复盘)
本文为京东商品详情API实战复盘,聚焦后端开发落地:基于合规封装接口(如Taobaoapi2014),通过jd.item_get实现自营/第三方商品全维度采集,涵盖基础信息、价格库存、图文素材及口碑数据;攻克签名校验、限流、区域差异等难点,优化调度与容错,保障企业级稳定调用。(239字)
|
3月前
|
人工智能 Ubuntu 数据可视化
最新版通义千问(Qwen3.7-Plus)功能介绍及云端实操部署教程
2026年,通义实验室正式推出**通义千问Qwen3.7-Plus**多模态智能体大模型,作为3.7系列主打均衡实战的旗舰版本,该模型彻底摆脱传统AI“仅能问答、无法实操”的固有短板,打造出**看、想、写、做、验**完整端到端智能闭环体系。不同于侧重极致推理的旗舰顶配模型、轻量化极速模型,Qwen3.7-Plus精准定位全能实战型基座,融合视觉感知、深度逻辑推理、顶级视觉编程、长时自主任务执行、多工具协同调用五大核心能力,兼顾响应速度、输出精度与超低使用成本,成为个人创作、开发者项目落地、中小团队办公自动化的最优通用型AI模型。
1098 1
|
3月前
|
JSON 监控 API
京东商品详情 API 完整解析 + 标准 JSON 返回示例
适用场景:商品采集、铺货搬家、价格监控、导购分销、ERP 同步、选品分析
|
3月前
|
数据采集 机器学习/深度学习 弹性计算
2026年阿里云服务器优惠政策解析:新购和续费最新活动参考
2026年阿里云面向新老用户推出全周期云服务器优惠体系,覆盖新购、续费、升级全场景。新用户可抢轻量应用服务器2核2G 38元/年、2核4G 199元/年,每日10点/15点限量开抢;新老用户同享经济型e实例2核2G 99元/年,续费同价可锁定至2030年。通用算力型u2i实例3折起,第九代企业级c9i/g9i/r9i系列6.4折起,GPU云服务器包年最低4折。此外还有10%通用优惠券、最高5亿元迁云补贴券,续费端提供阶梯折扣、节省计划、预留实例券等多种成本优化方案,助力不同规模用户实现上云成本最优。
|
3月前
|
弹性计算 API 开发者
《京东API QPS限流与429规避:从2 QPS到50 QPS的企业升级路径》(附Python源码)
本文详解京东JOS API限流机制与429规避实战:个人应用仅1–2 QPS,企业实名可升至5–10 QPS,购资源包最高达50/100 QPS。核心方案为Python实现令牌桶限速 + code=16/429捕获 + 指数退避重试 + 日额度断点续跑,附完整可运行源码。(239字)

热门文章

最新文章