《为什么京东订单API个人号调不通?企业认证+店铺授权完整流程》(附python源码)

发布时间:2026/7/13 15:28:36
《为什么京东订单API个人号调不通?企业认证+店铺授权完整流程》(附python源码) 京东订单类API如jingdong.pop.order.search属于商家私有数据接口个人开发者账号在权限体系上被严格限制这是你调不通的核心原因。必须走企业认证 店铺 OAuth2.0 授权的完整链路才能拿到数据。一、为什么个人号调不通权限隔离订单、发货、财务等敏感接口仅对企业开发者开放个人号在控制台根本申请不到这些权限调用会返回“权限不足code:2001”或“应用不存在”。私有数据保护订单数据归属具体店铺必须通过店铺主账号授权OAuth2.0获取access_token个人号无法完成店铺绑定与授权流程。实名校验即使强行传参服务端也会校验 AppKey 的主体资质与店铺主体的一致性个人号会被拦截。二、企业认证 店铺授权完整流程1. 开放平台企业认证登录京东开放平台宙斯 JOS注册选择企业开发者。提交营业执照、法人身份证、对公账户打款验证等材料审核通常需1-3 个工作日。认证通过后在【开发者中心】→【我的应用】创建应用选“商家自研”或“ERP 服务商”获取App Key​ 和App Secret。2. 申请订单接口权限进入应用详情的接口权限管理搜索并申请订单类接口如jingdong.pop.order.search、jingdong.pop.order.get。填写详细用途说明如“自有店铺 ERP 订单同步”提交后等待审核1-5 个工作日。3. 店铺 OAuth2.0 授权最关键一步订单 API 必须携带店铺授权的access_token流程如下配置回调地址在应用管理中填写HTTPS​ 的回调 URI用于接收授权码。引导店铺授权用店铺主账号浏览器访问京东授权 URLhttps://oauth.jd.com/oauth/authorize?response_typecodeclient_idYOUR_APP_KEYredirect_uriURL_ENCODE(你的回调地址)scopeseller_order_get店铺主账号确认授权后京东会跳转到你的redirect_uri并带上code参数。换取 Access Token后端用code调用京东 token 接口换取access_token有效期通常 30 天注意刷新。三、附Python 完整调用源码含签名授权京东 API 采用MD5 签名AppSecret 参数 ASCII 升序拼接 AppSecret且需带入access_token。import hashlib import time import requests import urllib.parse 封装好API供应商demo urlhttps://console.open.onebound.cn/console/?iLex class JDAPIClient: def __init__(self, app_key, app_secret, access_tokenNone): self.gateway https://api.jd.com/routerjson self.app_key app_key self.app_secret app_secret self.access_token access_token def _generate_sign(self, params): 京东 JOS MD5 签名AppSecret KV升序拼接 AppSecret - MD5大写 # 过滤空值按 key ASCII 升序 filtered sorted((k, v) for k, v in params.items() if v is not None and str(v).strip()) # 拼接 keyvalue无无 base_str .join(f{k}{v} for k, v in filtered) sign_str self.app_secret base_str self.app_secret return hashlib.md5(sign_str.encode(utf-8)).hexdigest().upper() def call(self, method, biz_paramsNone, page_no1, page_size50): 调用京东 API timestamp time.strftime(%Y-%m-%d %H:%M:%S, time.localtime()) public_params { method: method, app_key: self.app_key, timestamp: timestamp, format: json, v: 2.0, sign_method: md5, } if self.access_token: public_params[access_token] self.access_token # 业务参数放 360buy_param_json if biz_params is None: biz_params {} biz_params.setdefault(page, str(page_no)) biz_params.setdefault(page_size, str(page_size)) public_params[360buy_param_json] json.dumps(biz_params, ensure_asciiFalse) # 生成签名 sign self._generate_sign(public_params) public_params[sign] sign # 发送请求form-urlencoded headers {Content-Type: application/x-www-form-urlencoded} resp requests.post( self.gateway, dataurllib.parse.urlencode(public_params), headersheaders, timeout10 ) return resp.json() if __name__ __main__: import json APP_KEY YOUR_APP_KEY APP_SECRET YOUR_APP_SECRET ACCESS_TOKEN YOUR_SHOP_ACCESS_TOKEN # 店铺授权换来的 client JDAPIClient(APP_KEY, APP_SECRET, ACCESS_TOKEN) # 示例查询订单列表 result client.call( methodjingdong.pop.order.search, biz_params{ start_date: 2026-07-10 00:00:00, end_date: 2026-07-13 23:59:59, order_state: WAIT_SELLER_STOCK_OUT } ) print(json.dumps(result, indent2, ensure_asciiFalse))代码关键注意点签名拼接规则必须是AppSecret 排序后KV AppSecret中间无无最后 MD5 转大写否则报签名错误code:1003。timestamp 格式需用YYYY-MM-DD HH:MM:SS字符串且与京东服务器时间误差不超过 5 分钟。access_token 必传订单类接口不带 token 会直接报权限错误token 过期需重新用 refresh_token 刷新。如果你在授权回调或签名校验这一步报错了可以告诉我具体的错误码要不要我帮你按常见报错如1003签名失败、2001权限不足逐一梳理排查清单