×

🚀 SHEIN API 接口对接全攻略:从入门到精通(附 Python 源码)

万邦科技Lex 万邦科技Lex 发表于2026-05-13 10:12:18 浏览8 评论0

抢沙发发表评论

🚀 SHEIN API 接口对接全攻略:从入门到精通(附 Python 源码)

SHEIN 的 API 生态比较特殊,分为官方开放平台(供应商/卖家)联盟营销(Affiliate)两条完全独立的路径。很多开发者混淆了这两者,导致对接失败。
本文将为你拆解官方 OpenAPI 的完整接入流程,并提供可直接运行的 Python 签名与调用源码。

一、 环境准备:账号与权限(新手必看)

在写代码之前,必须先搞清楚你属于哪类用户,因为接口权限和入口完全不同。
身份
接口类型
申请入口
核心权限
SHEIN 供应商/卖家
OpenAPI(官方)
SHEIN 供应商后台 → 开发者中心
商品、订单、库存管理
内容创作者/导流者
Affiliate(联盟)
ShareASale / Awin / CJ Affiliate
获取商品 Feed、生成推广链接
注意:本文重点讲解 SHEIN 官方 OpenAPI(即供应商后台接口)的对接。如果你是做联盟营销,需通过第三方平台申请,接口地址和鉴权方式完全不同。

1. 申请 OpenAPI 权限

  1. 入口:登录 SHEIN 供应商后台(sop-portal.sheincorp.cn),进入【开发者中心】。

  2. 申请:提交 API 接入申请(需填写公司信息、对接用途)。

  3. 获取凭证:审核通过后,你会收到 openKeyId(类似 AppKey)和 secretKey(核心密钥)。务必妥善保管 secretKey,它用于生成签名,一旦泄露极难挽回

2. 配置 IP 白名单

SHEIN OpenAPI 有严格的网络安全策略。你必须在开发者中心配置你的服务器出口 IP,否则所有请求都会返回 403 Forbidden

二、 核心原理:签名机制(Sign)与避坑

SHEIN OpenAPI 使用 HMAC-SHA256 签名算法,这是对接中最容易报错(signature_invalid)的环节。

1. 签名生成规则(Python 实现)

SHEIN 的签名逻辑与淘宝/1688 不同,它要求:
  1. 排序:将所有参数(含公共参数)按 ASCII 码升序 排序。

  2. 拼接:将排序后的参数按 key=value格式用 &拼接。

  3. 加密:使用 secretKey对拼接字符串进行 HMAC-SHA256 加密,最后转为小写。

2. 高频报错与排查

错误码
原因
解决方案
signature_invalid
签名错误(90%是这里出错)
检查参数排序、secretKey是否正确、时间戳格式(毫秒级)
user_expired
账号过期
联系 SHEIN 对接人续期权限
ip_not_whitelisted
IP 不在白名单
在后台添加服务器 IP

三、 Python 实战:获取商品列表(附源码)

以下代码以 获取商品列表(/open-api/goods/number-list) 为例,展示了完整的 SHEIN OpenAPI 请求流程。你可以直接替换 openKeyIdsecretKey运行。
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进行解密处理。具体加解密示例需参考官方文档。

💡 总结与建议

  1. 先审后码:SHEIN API 权限审核严格(仅限签约供应商),不要先写代码再申请,务必先走通权限流程。

  2. 关注限流:SHEIN 接口有严格的 QPS 限制(通常 ≤10 次/秒),批量操作时务必加 time.sleep()避免触发风控。

  3. 源码复用:上面的 SheinOpenAPI类封装了签名逻辑,你只需修改 endpointparams,即可适配绝大多数 OpenAPI 接口。

互动话题
你是 SHEIN 的供应商还是联盟客?在对接 API 时,卡在签名还是权限审核了?评论区聊聊,帮你避坑!


群贤毕至

访客