一、前置准备:双平台资质与核心凭证获取
无论对接淘宝还是京东,合规资质是 API 调用的前提,两者流程相似但权限要求有差异,需针对性准备。
1. 账号资质申请(双平台对比)
平台 | 账号类型 | 认证要求 | 核心权限范围 | 调用频率上限 |
---|---|---|---|---|
淘宝 | 个人开发者账号 | 身份证 + 人脸识别 | 基础商品信息(标题、价格、主图) | ≤10 次 / 分钟 |
淘宝 | 企业开发者账号 | 营业执照 + 对公账户验证 | 完整商品数据(SKU、库存、促销价) | ≤100 次 / 分钟 |
京东 | 个人开发者账号 | 实名认证 + 手机号验证 | 商品基础信息查询 | ≤15 次 / 分钟 |
京东 | 企业开发者账号 | 营业执照 + 法人信息验证 | 商品详情、库存、订单同步权限 | ≤80 次 / 分钟 |
关键提示:
- 个人账号仅适合学习或小体量需求,商业化场景(如 ERP 对接、批量选品)必须用企业账号,否则核心字段(如淘宝 SKU 库存、京东预售状态)无法获取;
- 申请权限时需明确 “业务场景”(如 “企业内部商品数据同步”),材料真实完整可缩短审核周期(1-3 个工作日)。
2. 核心凭证获取(通用流程)
双平台均需获取 3 类核心凭证,需在官方开放平台完成,禁止非正规渠道获取:
- 注册开发者账号:登录对应平台开放平台(淘宝开放平台、京东开放平台),完成基础信息填写;
- 创建应用:选择 “电商服务” 类目,应用名称需与实际用途一致(如 “XX 企业商品管理系统”);
- 获取凭证:审核通过后在 “应用详情” 页获取:
安全规范:App Secret
建议通过服务器环境变量读取(如 Python 用os.getenv("TAOBAO_APP_SECRET")
),禁止硬编码或提交至代码仓库。
二、核心 API 调用实战:双平台高频接口落地
本节聚焦淘宝、京东最常用的商品详情接口(淘宝item.get
、京东item_detail
),拆解从参数构造到响应解析的完整流程,代码可直接复制复用。
1. 淘宝 API 调用:item.get(商品详情)
1.1 接口核心信息
- 接口用途:获取商品标题、价格、库存、SKU 等核心信息;
- 请求方式:HTTPS GET;
- 核心参数:
1.2 签名生成(淘宝 MD5 算法)
淘宝 API 签名需按 “参数 ASCII 升序排序 + MD5 加密” 实现,是调用成功的关键:
python
运行
import hashlib
import time
import os
import requests
def generate_taobao_sign(params, app_secret):
"""生成淘宝API签名(MD5算法)"""
# 1. 排除sign参数,按参数名ASCII升序排序
sorted_params = sorted([(k, v) for k, v in params.items() if k != "sign"])
# 2. 拼接为"key=value&key=value"格式
sign_str = "&".join([f"{k}={v}" for k, v in sorted_params])
# 3. 末尾拼接AppSecret,MD5加密后转大写
sign_str += app_secret
return hashlib.md5(sign_str.encode("utf-8")).hexdigest().upper()
1.3 完整调用代码
python
运行
def get_taobao_item_detail(num_iid):
"""淘宝商品详情接口调用(企业账号版)"""
# 从环境变量获取凭证(安全最佳实践)
app_key = os.getenv("TAOBAO_APP_KEY")
app_secret = os.getenv("TAOBAO_APP_SECRET")
access_token = os.getenv("TAOBAO_ACCESS_TOKEN")
# 1. 构造请求参数
params = {
"method": "taobao.item.get",
"app_key": app_key,
"access_token": access_token,
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
"format": "json",
"v": "2.0",
"num_iid": num_iid,
"fields": "num_iid,title,price,stock,sku,ai_tag" # 2024年新增AI标签字段
}
# 2. 生成签名
params["sign"] = generate_taobao_sign(params, app_secret)
# 3. 发送请求
try:
response = requests.get(
url="https://eco.taobao.com/router/rest",
params=params,
timeout=10,
verify=True # 强制SSL验证,保障安全
)
response.raise_for_status() # 捕获HTTP错误(如404、500)
result = response.json()
except requests.exceptions.RequestException as e:
raise Exception(f"淘宝API请求失败:{str(e)}")
# 4. 处理错误响应
if "error_response" in result:
error = result["error_response"]
raise Exception(f"淘宝API错误[{error['code']}]:{error['msg']}")
# 5. 解析核心数据
item_data = result["item_get_response"]["item"]
return {
"商品ID": item_data["num_iid"],
"标题": item_data["title"],
"售价": item_data["price"],
"库存": item_data["stock"],
"AI标签": item_data.get("ai_tag", "无"), # 处理字段可能不存在的情况
"SKU数量": len(item_data.get("sku", []))
}
# 调用示例
if __name__ == "__main__":
try:
taobao_item = get_taobao_item_detail(num_iid="123456789012") # 替换为实际商品ID
print("淘宝商品详情:")
for k, v in taobao_item.items():
print(f"{k}:{v}")
except Exception as e:
print(f"调用失败:{str(e)}")
2. 京东 API 调用:item_detail(商品详情)
2.1 接口核心信息
- 接口用途:获取京东商品基础信息、价格、库存等数据;
- 请求方式:HTTPS POST;
- 核心差异:京东签名算法为
HMAC-SHA256
(区别于淘宝 MD5),需特别注意。
2.2 签名生成(京东 HMAC-SHA256 算法)
python
运行
import hmac
import hashlib
def generate_jd_sign(params, app_secret):
"""生成京东API签名(HMAC-SHA256算法)"""
# 1. 按参数名ASCII升序排序
sorted_params = sorted([(k, v) for k, v in params.items() if k != "sign"])
# 2. 拼接为"key=value&key=value"格式(无需URL编码)
sign_str = "&".join([f"{k}={v}" for k, v in sorted_params])
# 3. 用AppSecret作为密钥,HMAC-SHA256加密后转大写
sign = hmac.new(
app_secret.encode("utf-8"),
sign_str.encode("utf-8"),
hashlib.sha256
).hexdigest().upper()
return sign
2.3 完整调用代码
python
运行
def get_jd_item_detail(sku_id):
"""京东商品详情接口调用(企业账号版)"""
# 从环境变量获取凭证
app_key = os.getenv("JD_APP_KEY")
app_secret = os.getenv("JD_APP_SECRET")
access_token = os.getenv("JD_ACCESS_TOKEN")
# 1. 构造请求参数
params = {
"method": "item_detail",
"app_key": app_key,
"access_token": access_token,
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
"format": "json",
"v": "2.0",
"skuId": sku_id, # 京东商品用SKU ID,区别于淘宝num_iid
"fields": "skuId,title,price,stockNum,preSaleLock" # 含预售锁库状态字段
}
# 2. 生成签名
params["sign"] = generate_jd_sign(params, app_secret)
# 3. 发送POST请求(京东部分接口要求POST)
try:
response = requests.post(
url="https://api.jd.com/routerjson",
data=params,
timeout=10,
verify=True
)
response.raise_for_status()
result = response.json()
except requests.exceptions.RequestException as e:
raise Exception(f"京东API请求失败:{str(e)}")
# 4. 处理错误响应
if "error_response" in result:
error = result["error_response"]
raise Exception(f"京东API错误[{error['code']}]:{error['msg']}")
# 5. 解析核心数据
item_data = result["item_detail_response"]["result"]
return {
"SKU ID": item_data["skuId"],
"标题": item_data["title"],
"售价": item_data["price"],
"可用库存": item_data["stockNum"],
"是否预售": "是" if item_data.get("preSaleLock", 0) > 0 else "否"
}
# 调用示例
if __name__ == "__main__":
try:
jd_item = get_jd_item_detail(sku_id="100012345678") # 替换为实际SKU ID
print("\n京东商品详情:")
for k, v in jd_item.items():
print(f"{k}:{v}")
except Exception as e:
print(f"调用失败:{str(e)}")
三、API 调用高频问题解决方案(双平台通用)
在实际调用中,签名失败、频率超限、数据不一致是最常见的问题,以下提供可落地的解决策略。
1. 签名失败(占比 60% 的入门坑)
常见原因与解决方案:
问题原因 | 解决方案 |
---|---|
服务器时间与平台偏差超 5 分钟 | 同步官方 NTP 服务器(如阿里云ntp.aliyun.com 、京东ntp.jd.com ),确保偏差≤3 分钟 |
参数排序错误 | 用 sorted() 函数强制按参数名 ASCII 升序排序(Python),避免手动排序遗漏 |
App Secret 错误或泄露 | 重新生成 App Secret,同步更新服务器环境变量,排查代码中是否有硬编码 |
特殊字符未转义 | 若参数含中文 / 符号,用urllib.parse.quote_plus() 处理(京东无需,淘宝部分场景需) |
2. 调用频率超限(429 错误)
- 淘宝企业账号:≤100 次 / 分钟,京东企业账号≤80 次 / 分钟,建议按80% 配额设置限流(如淘宝设 80 次 / 分钟);
- 解决方案:用令牌桶算法实现动态限流,示例代码:
python
运行
from ratelimit import limits, sleep_and_retry
# 淘宝API限流:80次/分钟
@sleep_and_retry
@limits(calls=80, period=60)
def taobao_api_wrapper(func, *args, **kwargs):
return func(*args, **kwargs)
# 调用时通过装饰器限流
taobao_item = taobao_api_wrapper(get_taobao_item_detail, num_iid="123456789012")
3. 数据不一致(业务核心坑)
- 问题表现:API 返回的库存 / 价格与平台页面不一致;
- 解决方案:
四、双平台 API 合规使用要点(避免账号风险)
平台对 API 合规要求严格,以下行为将导致权限回收或账号封禁,需严格规避:
- 数据滥用:
- 权限越界:
- 频率突破:
- 隐私保护:
五、总结与工具推荐
本文覆盖淘宝、京东双平台 API 调用的核心流程,重点解决 “签名生成”“问题排查”“合规使用” 三大核心需求。推荐以下工具提升开发效率:
- 调试工具:Postman(预设双平台 API 模板,支持签名自动生成)、ApiFox(多环境切换,适合团队协作);
- 监控工具:Prometheus+Grafana(可视化调用成功率、响应时间)、Sentry(捕获 API 错误日志);
- 文档工具:Swagger(生成 API 接口文档)、语雀(沉淀对接经验)。
有任何 API 调用需求或问题,欢迎评论区留言或私信交流,助力高效落地电商数据对接场景!