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

相关文章
|
2月前
|
JSON API 数据格式
💳《京东API不是全程免费!基础联盟免费+商家按量,收费结构一文掰清》(附Python源码)
京东API并非全程免费!联盟API(如jd.union.open.*)调用免费,靠成交佣金盈利;商家JOS API(如jingdong.ware.*)含日免费额度,超量按次计费,电子面单、CRM等属增值收费。本文厘清两套体系差异,附Python双Client分流源码,助你精准控本避坑。(239字)
|
2月前
|
数据采集 缓存 监控
如何高效获取京东商品详情数据
本文详解京东商品详情数据获取的三大方案:官方API(合规稳定,推荐长期商用)、第三方标准化接口(开箱即用,适合快速落地)及爬虫(仅限临时测试,风险高)。重点介绍联盟/商家API接入流程、字段精简、批量查询、分层缓存与增量同步等提效策略,兼顾实时性与成本。
488 1
|
2天前
|
缓存 编解码 测试技术
GPT Image 2.5 图片生成费用详解:Flare 与 Sunburst 两种模式定价解析
OpenAI发布GPT-Image 2.5双模型:Flare(重速度)与Sunburst(重精度),均按token计费——文字输入$5M、图片输入$8M、输出$30M/百万token,缓存另计。单价统一,但实际单图成本因用量而异,官方提供输出token估算器。
|
8月前
|
JSON 监控 API
解析得物商品详情:API 接口调用实践与数据结构分析
本文详解得物平台商品详情API:涵盖GET请求方式、核心参数(productId/skuId)、JSON响应结构(含价格、库存、规格、图片等),并提供Python调用示例及频率限制、错误处理、合规使用等关键注意事项。(239字)
1565 0
|
11月前
|
存储 人工智能 监控
|
10月前
|
JSON API 数据格式
京东平台获取商品券后价API接口详解与实战
本文介绍如何通过京东开放平台API获取商品实时券后价。涵盖接口功能、参数说明、签名生成、Python调用示例及常见问题,助开发者高效实现价格查询与数据分析。
|
JSON API 数据格式
国内主流电商淘宝+京东+1688api数据接口实操
这是一套用于获取淘宝、京东和1688电商平台数据的Python实现方案。通过定义统一的API基类,封装了请求流程与异常处理机制,包括请求超时、频率限制及认证失败等。针对各平台特性,分别实现了签名生成、参数准备与接口调用功能,如商品搜索、详情查询和订单列表获取等。使用前需申请各平台开发者账号以获取AppKey和AppSecret,并根据实际需求调整代码配置与业务逻辑,同时注意控制请求频率避免限流。
|
JSON 监控 数据可视化
揭秘淘宝 API,让天猫店铺流量来源一目了然
在竞争激烈的电商环境中,天猫商家最关心的问题之一是流量来源。本文介绍如何利用淘宝开放平台的API接口,帮助商家清晰掌握店铺流量渠道,包括直接访问、搜索、广告及社交媒体流量。通过API获取数据后,可进一步分析访问量、来源占比、跳出率等关键指标,优化营销策略,提升转化率。结合Python编程与图表工具,实现数据可视化分析,助力商家做出数据驱动决策,抢占市场先机。
1103 1
|
监控 API 开发者
京东商品详情API响应数据解析
京东开放平台提供多种API接口,可获取商品标题、价格、库存、详情描述等120+字段信息,支持分钟级更新。核心接口包括商品基础信息、详情及SKU查询,适用于比价、监控、营销分析等电商场景。文章还附Python调用示例,便于开发者快速集成。
|
前端开发 搜索推荐 编译器
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈
1917 34
【01】python开发之实例开发讲解-如何获取影视网站中经过保护后的视频-用python如何下载无法下载的视频资源含m3u8-python插件之dlp-举例几种-详解优雅草央千澈