news 2026/7/8 1:43:36

[特殊字符]《京东宙斯迁移公告解读:老接口 360buy.ware.get→ jingdong.ware.read.get平滑切换(附Python源码)》

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[特殊字符]《京东宙斯迁移公告解读:老接口 360buy.ware.get→ jingdong.ware.read.get平滑切换(附Python源码)》

🔄《京东宙斯迁移公告解读:老接口360buy.ware.getjingdong.ware.read.get平滑切换(附Python源码)》

京东早期商品查询接口曾用360buy.ware.get(method值jingdong.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,建议补充skus_json

返回结构

{jingdong_ware_get_response:{ware:{...}}}

{jingdong_ware_read_get_response:{ware:{...}}}

权限申请

老权限入口

应用→接口权限→申请jingdong.ware.read.get

SKU库存可见

需 seller token

同(传 seller AccessToken 可看stockNumin skus_json)

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


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

# jd_ware_migration.py """ 京东商品接口迁移演示 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 封装好API供应商demo url=https://console.open.onebound.cn/console/?i=Lex # ─────────── JOS Client (内联,与你之前用的一致) ─────────── class JdClient: GW = "https://api.jd.com/routerjson" def __init__(self, ak, ask): self.ak, self.ask = ak, ask def _sign(self, p: Dict) -> str: filt = sorted((k, v) for k, v in p.items() if v is not None and str(v).strip() != '' and k != 'sign') qs = ''.join(f"{k}{v}" for k, v in filt) return hashlib.md5(f"{self.ask}{qs}{self.ask}".encode() ).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() 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: raise Exception(f"JOS [{err.get('code')}]: " f"{err.get('zh_desc') or err.get('en_desc')}") raise Exception(f"JOS err: {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" ) return self._call( "jingdong.ware.read.get", # ← 新 method {"wareId": ware_id, "fields": fields}, token ).get("ware", {}) 封装好API供应商demo url=https://console.open.onebound.cn/console/?i=Lex # ========================================================= # 使用示例 # ========================================================= if __name__ == "__main__": cli = JdClient("YOUR_JD_APP_KEY", "YOUR_JD_APP_SECRET") WARE_ID = "100012345678" # ← 替换真实 wareId SELLER_TOKEN = None # 查自己店铺SKU库存传卖家AccessToken try: # ★ 迁移后只用这一行 ★ ware = cli.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 _json skus_raw = ware.get("skus_json") or "" if skus_raw: skus = _json.loads(skus_raw) print(f" SKU数:{len(skus)}") for s in skus[:2]: 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 Exception as e: print("❌", e) print("→ 确认: AppKey/Secret正确、接口 jingdong.ware.read.get 已申请、wareId有效")

三、迁移 Checklist(照着做)

  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. 回归测试

    • 沙箱调通签名 ✓

    • 生产比对新旧返回字段一致性(标题/价格/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_responsejingdong_ware_read_get_response

解析用.get("ware")不依赖外层 key

timestamp毫秒

Invalid Timestamp

JOS用秒级int(time.time())


五、面试/方案一句话

京东商品查询老接口jingdong.ware.getjingdong.ware.read.get只改 method 字符串 + fields 补skus_json,stock_num,网关/签名/AccessToken 完全不变;应用需申请新接口权限,返回值结构外层key变但内层ware节点字段一致,解析取.get("ware")即兼容。

需要我补京东订单增量同步(jingdong.pop.order.search) APScheduler断点续跑​ 或京东库存快照定时校正脚本​ 吗?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/8 1:42:14

从零搭建工业物联网监控大屏:Node-RED + 有人云 零代码方案

痛点老板说:”我要一个大屏,随时能看到所有设备状态。”你打开淘宝搜”工业大屏”,报价5万起。用 Node-RED 有人云 0元,30分钟,效果不输商业大屏。一、整体架构┌────────────────┐ 4G/MQTT ┌──…

作者头像 李华
网站建设 2026/7/8 1:41:15

HRD进化论04讲:战略解码

战略解码:把业务战略翻译成人力资源动作 从"听不懂"到"说得清"再到"干得准" 每年10月到12月,是大多数公司做明年战略规划的时候。 你参加过很多次战略会,但每次都有一个尴尬的瞬间——老板讲完明年的业务目标…

作者头像 李华
网站建设 2026/7/8 1:41:06

PostgreSQL高级特性应用

PostgreSQL作为一款功能强大的开源关系型数据库,凭借其丰富的高级特性,在数据处理、分析和管理领域展现出卓越的灵活性。无论是企业级应用还是复杂的数据分析场景,PostgreSQL都能通过其独特的功能满足多样化的需求。本文将深入探讨PostgreSQL…

作者头像 李华
网站建设 2026/7/8 1:40:41

PyTorch DDP 多机多卡配置:2节点8卡集群部署与通信瓶颈分析

PyTorch DDP 多机多卡实战:2节点8卡集群部署与通信优化全解析当深度学习模型规模突破单卡显存限制时,分布式训练成为必选项。PyTorch的DistributedDataParallel(DDP)以其简洁API和高效性能成为多机多卡训练的首选方案。本文将带您…

作者头像 李华
网站建设 2026/7/8 1:40:33

Models-学习指南_小白版

Base/Models 层详解——小白也能看懂📍 原文位置:D:\AI0409\Day22\Models-学习指南.md 本文档是这个包的系统学习指南,目标:让完全不懂数据库的小白也能理解 Models 层是什么、怎么用、为什么这样设计。前置知识:在看这…

作者头像 李华