京东店铺所有商品商品详情对接秘籍:全店商品 API 接入实战避坑指
做电商系统开发或数据分析,最头疼的就是实时获取京东店铺商品数据。去年帮客户对接京东联盟 API 踩了无数坑,今天把全流程避坑指南和最新接口玩法整理出来,看完能少走 80%的弯路。
一、京东商品接口两大阵营
京东联盟 API(CPS 模式)
适合:导购平台/比价网站
能拿数据:✅ 全店商品基础信息(含佣金率)✅ 促销活动倒计时✅ 30 天销量预估❌ 拿不到真实库存
API(企业级对接)
适合:自营商家/供应链系统
核心权限:✅ 实时库存监控(精确到区域仓)✅ SKU 维度价格(会员价/PLUS 价)✅ 商品上下架状态变更✅ 带参数订单追踪(防渠道串货)
二、真实案例:某母婴电商的骚操作
用 API 实现了:
自动同步 50 家代发店铺商品
库存≤10 时触发预警补货
抓取竞品晚 8 点限时价做动态调价上线 3 个月减少人工维护成本 70%
三、手把手接入教学(2024 实测版)
Step1 资质准备
企业营业执照(个体工商户不行)
签约类目保证金(3C 类 5 万起)
开通京东云账号(不是京东商家后台!)
Step2 接口选择
复制
全店商品抓取用这两个: 1. jd.union.open.goods.query(联盟商品池) 2. jingdong.ware.read.findWareById(宙斯商品详情)
Step3 签名生成大坑联盟 API 用 MD5 签名,宙斯必须用 JSDK 签名!正确姿势:
python
复制
宙斯接口签名示例 params = { "method": "jingdong.ware.read.findWareById", "wareId": "1000001", "access_token": "你的令牌", "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "app_key": "你的 appkey", "v": "2.0" } # 关键点:按参数名升序排列 + 拼接 app_secret sign_str = app_secret + ''.join([k + params[k] for k in sorted(params)]) sign = hashlib.md5(sign_str.encode()).hexdigest().upper()
Step4 数据解析技巧重点关注返回值:
图片地址在 imageList 字段(需替换 http 为 https)
真实库存看 stockDesc 字段
隐藏优惠券在 couponList 里
封装好的京东店铺所有商品数据接口,复制链接获取测试。
demo url=o0b.cn/imike wechat id:you847337137
def generate_sign(params, app_secret):"""生成签名的函数:param params: 参数字典:param app_secret: 应用的密钥:return: 生成的签名"""sorted_params = sorted(params.items(), key=lambda x: x[0])sign_str = app_secretfor key, value in sorted_params:sign_str += f"{key}{value}"sign_str += app_secretsign = hashlib.md5(sign_str.encode()).hexdigest()return sign
def get_jd_shop_products(app_key, app_secret, shop_id):"""获取京东店铺商品的函数:param app_key: 应用的 key:param app_secret: 应用的密钥:param shop_id: 店铺的 id:return: 请求结果"""url = "https://api.jd.com/routerjson"method = "jingdong.shop.product.list.get"timestamp = int(time.time() * 1000)v = "2.0"page = 1page_size = 10params = {"app_key": app_key,"method": method,"timestamp": timestamp,"v": v,"360buy_param_json": json.dumps({"shopId": shop_id,"page": page,"pageSize": page_size})}params["sign"] = generate_sign(params, app_secret)headers = {"Content-Type": "application/x-www-form-urlencoded"}try:response = requests.post(url, data=params, headers=headers)if response.status_code == 200:return response.json()else:print(f"请求失败,状态码: {response.status_code}")return Noneexcept Exception as e:print(f"请求过程中出现错误: {e}")return None
示例使用,将以下信息替换为实际的 app_key, app_secret 和 shop_id
app_key = "your_app_key"app_secret = "your_app_secret"shop_id = "your_shop_id"result = get_jd_shop_products(app_key, app_secret, shop_id)if result:print(result)
评论