🚀 SHEIN API 接口对接全攻略:从入门到精通(附 Python 源码)
SHEIN 的 API 生态比较特殊,分为官方开放平台(供应商/卖家)和联盟营销(Affiliate)两条完全独立的路径。很多开发者混淆了这两者,导致对接失败。
本文将为你拆解官方 OpenAPI 的完整接入流程,并提供可直接运行的 Python 签名与调用源码。
一、 环境准备:账号与权限(新手必看)
在写代码之前,必须先搞清楚你属于哪类用户,因为接口权限和入口完全不同。
身份 | 接口类型 | 申请入口 | 核心权限 |
|---|---|---|---|
SHEIN 供应商/卖家 | OpenAPI(官方) | SHEIN 供应商后台 → 开发者中心 | 商品、订单、库存管理 |
内容创作者/导流者 | Affiliate(联盟) | ShareASale / Awin / CJ Affiliate | 获取商品 Feed、生成推广链接 |
注意:本文重点讲解 SHEIN 官方 OpenAPI(即供应商后台接口)的对接。如果你是做联盟营销,需通过第三方平台申请,接口地址和鉴权方式完全不同。
1. 申请 OpenAPI 权限
- 入口:登录 SHEIN 供应商后台(
sop-portal.sheincorp.cn),进入【开发者中心】。 - 申请:提交 API 接入申请(需填写公司信息、对接用途)。
- 获取凭证:审核通过后,你会收到
openKeyId(类似 AppKey)和secretKey(核心密钥)。务必妥善保管secretKey,它用于生成签名,一旦泄露极难挽回。
2. 配置 IP 白名单
SHEIN OpenAPI 有严格的网络安全策略。你必须在开发者中心配置你的服务器出口 IP,否则所有请求都会返回
403 Forbidden。二、 核心原理:签名机制(Sign)与避坑
SHEIN OpenAPI 使用 HMAC-SHA256 签名算法,这是对接中最容易报错(
signature_invalid)的环节。1. 签名生成规则(Python 实现)
SHEIN 的签名逻辑与淘宝/1688 不同,它要求:
- 排序:将所有参数(含公共参数)按 ASCII 码升序 排序。
- 拼接:将排序后的参数按
key=value格式用&拼接。 - 加密:使用
secretKey对拼接字符串进行 HMAC-SHA256 加密,最后转为小写。
2. 高频报错与排查
错误码 | 原因 | 解决方案 |
|---|---|---|
signature_invalid | 签名错误(90%是这里出错) | 检查参数排序、 secretKey是否正确、时间戳格式(毫秒级) |
user_expired | 账号过期 | 联系 SHEIN 对接人续期权限 |
ip_not_whitelisted | IP 不在白名单 | 在后台添加服务器 IP |
三、 Python 实战:获取商品列表(附源码)
以下代码以 获取商品列表(/open-api/goods/number-list) 为例,展示了完整的 SHEIN OpenAPI 请求流程。你可以直接替换
openKeyId和 secretKey运行。import requests
import hashlib
import hmac
import json
import time
from urllib.parse import urlencode
# 封装好API供应商demo url=https://console.open.onebound.cn/console/?i=Lex
class SheinOpenAPI:
def __init__(self, open_key_id, secret_key):
self.open_key_id = open_key_id
self.secret_key = secret_key
self.base_url = "https://openapi.sheincorp.com" # 正式环境
def generate_signature(self, params):
"""生成 SHEIN OpenAPI 要求的 HMAC-SHA256 签名"""
# 1. 按ASCII码排序参数
sorted_params = sorted(params.items())
# 2. 拼接 key=value 格式
query_string = '&'.join([f'{k}={v}' for k, v in sorted_params])
# 3. HMAC-SHA256 加密并转小写
signature = hmac.new(
self.secret_key.encode(),
query_string.encode(),
hashlib.sha256
).hexdigest().lower()
return signature
def call_api(self, endpoint, method='GET', body_params=None):
"""调用 SHEIN OpenAPI(通用方法)"""
# 1. 准备基础参数
timestamp = str(int(time.time() * 1000)) # 毫秒级时间戳
query_params = {
'language': 'zh-cn'
}
# 如果是GET请求,业务参数放在query中;POST请求放在body中
if method == 'GET' and body_params:
query_params.update(body_params)
# 2. 生成签名(针对查询参数)
sign = self.generate_signature(query_params)
# 3. 构造请求头
headers = {
'x-lt-openKeyId': self.open_key_id,
'x-lt-signature': sign,
'x-lt-timestamp': timestamp,
'Content-Type': 'application/json',
'language': 'zh-cn'
}
# 4. 发送请求
url = f"{self.base_url}{endpoint}"
if method == 'GET':
response = requests.get(url, params=query_params, headers=headers)
else:
# POST请求,body需要单独处理
response = requests.post(url, json=body_params, headers=headers)
return response.json()
def get_goods_list(self, page=1, per_page=50):
"""获取商品列表(示例接口)"""
# 接口文档中的查询参数
params = {
'page': page,
'per_page': per_page,
'type': 1 # 1: 按SKC查询
}
return self.call_api('/open-api/goods/number-list', 'GET', params)
if __name__ == "__main__":
# 🔴 替换为你的真实凭证(从SHEIN供应商后台获取)
OPEN_KEY_ID = "你的openKeyId"
SECRET_KEY = "你的secretKey"
# 封装好API供应商demo url=https://console.open.onebound.cn/console/?i=Lex
shein = SheinOpenAPI(OPEN_KEY_ID, SECRET_KEY)
# 调用获取商品列表接口
result = shein.get_goods_list(page=1, per_page=10)
# 解析响应
if result.get('code') == 0:
goods_list = result.get('info', {}).get('list', [])
print(f"✅ 成功获取 {len(goods_list)} 条商品数据:")
for goods in goods_list:
print(f"SKC: {goods.get('skc')} | 商家SKU: {goods.get('supplier_sku')}")
else:
print(f"❌ API调用失败: {result.get('msg')}")运行结果示例:
✅ 成功获取 10 条商品数据: SKC: SKC12345678 | 商家SKU: SUPPLIER-001 SKC: SKC12345679 | 商家SKU: SUPPLIER-002
四、 常用接口清单与业务场景
接口名 | 端点 (Endpoint) | 方法 | 适用场景 |
|---|---|---|---|
商品列表 | /open-api/goods/number-list | GET | 同步 SPU/SKC 编码关系 |
商品详情 | /open-api/goods/spu-info | GET | 获取商品详情、库存、价格 |
订单查询 | /open-api/order/order-detail | GET | ERP 系统拉取订单 |
发货回传 | /open-api/shipment/update | POST | 上传物流单号,确认发货 |
五、 进阶:Webhook 与数据加密
1. Webhook 推送(订单实时通知)
除了主动拉取(Pull),SHEIN 支持 Webhook 推送(Push)模式。你需要在后台配置一个接收地址,当有新订单时,SHEIN 会主动推送 JSON 数据到你的服务器。
2. 请求体加密(AES-128)
部分涉及敏感数据的接口(如订单详情)要求对请求体进行 AES-128 加密。你需要在请求头中增加
x-lt-encryptedResponse: AES128,并对 response body进行解密处理。具体加解密示例需参考官方文档。💡 总结与建议
- 先审后码:SHEIN API 权限审核严格(仅限签约供应商),不要先写代码再申请,务必先走通权限流程。
- 关注限流:SHEIN 接口有严格的 QPS 限制(通常 ≤10 次/秒),批量操作时务必加
time.sleep()避免触发风控。 - 源码复用:上面的
SheinOpenAPI类封装了签名逻辑,你只需修改endpoint和params,即可适配绝大多数 OpenAPI 接口。
互动话题:
你是 SHEIN 的供应商还是联盟客?在对接 API 时,卡在签名还是权限审核了?评论区聊聊,帮你避坑!