🔄《京东JOS宙斯迁移实录:jingdong.ware.get → jingdong.ware.read.get 平滑切(2026版)》(附Python源码)

简介: 京东JOS宙斯2026版接口迁移指南:将即将下线的`jingdong.ware.get`平滑升级至推荐接口`jingdong.ware.read.get`。仅需修改method与fields(补`skus_json`/`stock_num`),网关、签名、token全兼容,附可直接运行的Python封装源码及避坑清单。(239字)

🔄《京东JOS宙斯迁移实录:jingdong.ware.get → jingdong.ware.read.get 平滑切(2026版)》(附Python源码)

京东宙斯(JOS)在2024~2026年间持续推进接口标准化,老接口jingdong.ware.get(及别名360buy.ware.get)已进入维护期,新应用不再支持申请,官方推荐统一迁移至jingdong.ware.read.get(只读商品读取接口,权限更清晰、支持SKU快照字段)。
迁移只需改method + 微调fields,网关/签名/AccessToken完全不变,下面给你一份可直接执行的平滑切换实录。

一、老 vs 新接口对照(一目了然)

维度 老接口(即将下线) 新接口(推荐)

Method jingdong.ware.get / 360buy.ware.get ✅ jingdong.ware.read.get

网关 https://api.jd.com/routerjson 完全相同

签名算法 MD5(AppSecret+KV_ASCII+AppSecret) 秒级timestamp 完全相同(一行不改)

必传参数 wareId, fields 完全相同(wareId, fields)

返回根节点 jingdong_ware_get_response.ware jingdong_ware_read_get_response.ware

SKU库存可见 需传seller token 相同(传seller token可看stockNum in skus_json)

权限申请 老入口(已关闭新申请) 应用→接口权限→申请jingdong.ware.read.get(即时生效)

✅ 迁移量:代码中只改 method 字符串 + fields 补全 skus_json,stock_num,其余(Client/签名/网关/token)一行不动。

二、Python:老接口 vs 新接口调用对比 + 兼容封装

jd_ware_migration_2026.py

"""
京东JOS宙斯迁移实录
old: jingdong.ware.get → new: jingdong.ware.read.get
同一个 JdClient 复用,仅 method + fields 不同
支持 沙箱/生产 切换
"""
import hashlib
import json
import requests
import time
from typing import Dict, Optional

class JdWareClient:
"""京东JOS商品接口客户端(兼容新旧两套)"""
GW_PROD = "https://api.jd.com/routerjson"
GW_SANDBOX = "https://api.sandbox.jd.com/routerjson"

def __init__(self, app_key: str, app_secret: str, sandbox: bool = False):
    self.ak = app_key
    self.ask = app_secret
    self.gw = self.GW_SANDBOX if sandbox else self.GW_PROD

# ───── JOS MD5签名(秒级timestamp,紧凑JSON)─────
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 _call(self, method: str, biz: Dict, token: str = None) -> Dict:
    p = {
        "app_key": self.ak,
        "method": method,
        "timestamp": str(int(time.time())),   # ← 秒级!不是毫秒
        "format": "json",
        "v": "2.0",
        "sign_method": "md5",
        "360buy_param_json": json.dumps(biz, ensure_ascii=False,
                                         separators=(',', ':'))
    }
    if token:
        p["access_token"] = token
    p["sign"] = self._sign(p)

    r = requests.post(self.gw, data=p, timeout=15)
    r.raise_for_status()
    d = r.json()

    # 提取响应(兼容新旧method对应的resp_key)
    resp_key = method.replace(".", "_") + "_response"
    if resp_key not in d:
        for k in d:
            if k.endswith("_response"):
                resp_key = k
                break
    data = d.get(resp_key, d)

    if "error_response" in str(data):
        err = d.get(resp_key, {}).get("error_response") or d.get("error_response")
        if err:
            code = str(err.get("code", ""))
            zh = err.get("zh_desc") or err.get("en_desc")
            sub = err.get("sub_code", "")
            if "no permission" in zh:
                raise PermissionError(
                    f"❌ 无权限:确认已申请 {method} 接口,订单类需传卖家AccessToken\n原始: {zh}"
                )
            raise Exception(f"JOS[{code}]: {zh} sub={sub}")
        raise Exception(f"JOS error: {d}")
    return data

# ─── 老接口(不推荐,仅作对比/过渡期兼容)───
def get_ware_old(self, ware_id: str,
                 fields: str = None, token: str = None) -> Dict:
    fields = fields or (
        "ware_id,title,price,jd_price,stock_num,skus_json,image_path"
    )
    return self._call(
        "jingdong.ware.get",          # ← 老 method
        {"wareId": ware_id, "fields": fields},
        token
    ).get("ware", {})

# ─── ✅ 新接口(推荐迁移目标)───
def get_ware_new(self, ware_id: str,
                 fields: str = None, token: str = None) -> Dict:
    fields = fields or (
        "ware_id,title,brand_name,cid,category_name,"
        "price,jd_price,market_price,stock_num,"
        "skus_json,image_path,desc,outer_id,approve_status"
    )
    return self._call(
        "jingdong.ware.read.get",     # ← 新 method
        {"wareId": ware_id, "fields": fields},
        token
    ).get("ware", {})

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

使用示例:平滑切换

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

if name == "main":
client = JdWareClient(
app_key="YOUR_JD_APP_KEY",
app_secret="YOUR_JD_APP_SECRET",
sandbox=False # 沙箱测试 = True
)
WARE_ID = "100012345678" # ← 替换真实 wareId
SELLER_TOKEN = None # 查自己店铺SKU库存需传卖家AccessToken

try:
    # ★ 迁移后只用这一行 ★
    ware = client.get_ware_new(WARE_ID, token=SELLER_TOKEN)

    print("✅ [新接口] 商品标题:", ware.get("title"))
    print("   京东价:", ware.get("jd_price"))
    print("   SPU库存:", ware.get("stock_num"))

    # skus_json 解析(查自己店铺时才有真实库存)
    import json as _j
    skus_raw = ware.get("skus_json") or ""
    if skus_raw:
        skus = _j.loads(skus_raw)
        print(f"   SKU数: {len(skus)}")
        for s in skus[:3]:
            print(f"     skuId:{s.get('skuId')} 价:{s.get('jdPrice')} "
                  f"库:{s.get('stockNum')} 商家码:{s.get('outerId','')}")

    print("\n→ 迁移完成!仅需改 method='jingdong.ware.read.get' + fields补skus_json")

except PermissionError as pe:
    print(pe)
except Exception as e:
    print("❌", e)
    print("→ 确认: AppKey/Secret正确、接口已申请、wareId有效")

三、迁移 Checklist(照着做,5分钟切完)

  1. 应用后台申请新权限
    → 接口权限 → 勾选 jingdong.ware.read.get → 提交(通常即时生效)

  2. 代码改动(极小)

    • method = "jingdong.ware.get"
    • method = "jingdong.ware.read.get"
    • fields = "ware_id,title,price"
    • fields = "ware_id,title,price,jd_price,stock_num,skus_json,image_path"

    wareId 参数名不变(驼峰,同老接口)

  3. 回归测试(5分钟)
    • 沙箱调通签名 ✓

    • 生产比对新旧返回字段一致性(标题/价格/SKU数应一致)

    • 自家店铺查 SKU 库存需传 access_token(同旧逻辑)

  4. 下线老调用
    确认所有环境切新 method 后,删除 get_ware_old() 分支

四、避坑清单

坑 现象 解决

新接口返回 403 未申请 jingdong.ware.read.get 应用→接口权限→申请

skus_json 空 公开查询别人商品 / 未传 token 查自己店铺商品须传卖家 AccessToken

老代码 wareId 写成 ware_id 部分SDK自动映射,推荐用 wareId(首字母大写) 与文档保持一致

返回结构 key 变 jingdong_ware_get_response → jingdong_ware_read_get_response 解析用 .get("ware") 不依赖外层 key

timestamp毫秒 Invalid Timestamp JOS用秒级 int(time.time())

沙箱返回 mock 数据 正常,沙箱只验签不返真数据 切生产验证

五、面试/方案一句话

京东JOS宙斯迁移:老接口 jingdong.ware.get → 新接口 jingdong.ware.read.get,只改 method 字符串 + fields 补 skus_json,stock_num,网关/签名/AccessToken 完全不变;应用需申请新接口权限,返回值结构外层key变但内层 ware 节点字段一致,解析取 .get("ware") 即兼容,5分钟平滑切换。

需要我补 京东订单增量同步(jingdong.pop.order.search) 或 库存快照定时校正脚本 的完整迁移示例吗?

相关文章
|
29天前
|
弹性计算 人工智能 持续交付
2026年阿里云服务器特价攻略:38元轻量款/99元经济型/199元企业款解析
阿里云2026年云服务器特惠活动覆盖全档位需求,新用户每日10点、15点可抢2核2G轻量应用服务器,仅38元/年;新老用户同享2核2G 3M带宽经济型e实例99元/年,支持续费同价至2027年;企业认证用户可购2核4G 5M带宽u1实例199元/年,覆盖海内外节点。此外,e系列高配置享3.9折、u2i实例年付低至3折、第九代c9i/g9i/r9i实例6.4折,适配个人学习、中小业务部署、AI推理等不同场景,是不同规模用户低成本上云的优质选择。
|
27天前
|
人工智能 API 数据库
Kimi深夜突袭K3,2.8万亿参数超大水桶!直接跨入世界第一梯队!
老金我昨儿在网上瞎逛的时候,突然看到了Kimi K3的消息。 合计先打开官网看看开发者文档有没有啥信儿,结果刚打开官网,好家伙。。就看到已经上线了! ![Image](https://ucc.alicdn.com/pic/developer-ecology/p3shvhj26rigq_0488c34b2827443e9b77df8ee1e3a066.png) Kimi官网Chat窗口里已
|
17天前
|
数据采集 安全 API
🪪《避坑实录:五家开放平台认证门槛对照(个人/企业/服务商/保证金)》(附Python源码)
《避坑实录》详解淘宝、京东、1688、拼多多、抖店五大开放平台认证门槛:个人号仅限基础查询,调订单必须企业主体;自研需预充值或入云塔;ISV普遍冻结保证金(1万–15万元)并抽成。附Python资质自检工具,开发前一键校验主体、权限与合规性,避免中途被卡。(239字)
|
30天前
|
Java API 索引
《仿电商ERP:Spring Boot整合京东JOS实现商品/订单/库存三件套自动同步》(附python源码)
本文提供“仿电商ERP”同步方案:以Spring Boot架构为蓝本,配套可运行Python实现,聚焦商品、订单、库存三模块与京东JOS自动对接。含MD5签名客户端、增量拉取逻辑、幂等处理及APScheduler定时任务,支持快速原型验证或过渡开发。(239字)
|
27天前
|
机器学习/深度学习 数据采集 安全
面向跨境金融类网络钓鱼攻击的多维度识别与闭环防御体系研究
本文以2026年韩国跨境金融钓鱼案为样本,构建融合域名、网页语义、传播渠道与用户行为的四维检测模型,创新采用规则引擎+轻量机器学习混合架构,Python工程化实现。实测准确率提升11.72%,误报率下降8.35%,支持毫秒级响应,配套“检测-告警-阻断-复盘”闭环机制,为跨境金融平台提供可落地的反钓鱼技术方案。(239字)
61 0
|
27天前
|
人工智能 自然语言处理 搜索推荐
GEO选题策略:如何找到用户真正会问AI的长尾问题
本文突破传统关键词挖掘局限,基于Embedding向量聚类与语义相似度计算,系统性挖掘AI搜索场景下真实、自然的长尾提问,揭示用户实际对话表达规律,为内容选题提供可复用的技术路径。(239字)
116 0
|
27天前
|
前端开发 Java API
[049][Crypto模块]前后端混合加密API实战:基于Spring Boot的AES+RSA安全传输方案
本文详解Spring Boot中AES+RSA混合加密实战:前端用RSA公钥加密随机AES密钥并传输,后端通过`@Crypto`注解自动解密请求体。涵盖公钥分发、Hex/Base64编码统一、ECB模式适配及Caffeine缓存优化,提供开箱即用的端到端安全传输方案。(239字)
146 0
|
27天前
|
Web App开发 人工智能 JavaScript
199 元找人定制 Codex 主题?未曾设想的赚钱道路。。我免费教你怎么做
Codex 定制主题皮肤保姆级教程,借助 GitHub 开源项目,根本不需要花钱!
252 0
|
3月前
|
SQL 缓存 关系型数据库
主从延迟的5大“元凶”+3个排查命令,别再让从库拖后腿
数据库小学妹详解MySQL主从延迟:5大元凶(硬件弱、写压大、慢查询、网络差、大事务)+3条核心排查命令(SHOW SLAVE STATUS等),助你快速定位、精准优化,避坑生产故障!
|
4月前
|
存储 监控 安全
基于零信任架构的企业级数据防泄密系统技术实现研究 ——以互成软件文档安全管理系统为例
本文剖析互成文档安全管理系统核心技术:基于国密SM4的透明加密引擎、程序级行为管控、加密网关部署及细粒度密级权限体系,融合零信任理念,实现文档“使用态”全生命周期防护,兼顾合规性、自主可控与业务友好性。(239字)

热门文章

最新文章