×

速卖通商品详情接口实战:跨境多语言解析 + SKU 规格拆解 + 令牌容错 + 风控休眠(Python 合规版)

Ace Ace 发表于2026-06-08 17:11:36 浏览17 评论0

抢沙发发表评论

前言

在跨境电商开发、ERP 商品同步、选品分析、多区域价格监控场景中,速卖通商品详情是核心基础数据。网上多数教程仅实现基础 SKU 查询,普遍存在签名逻辑错误、多币种 / 多语言不支持、SKU 规格解析不全、无令牌过期处理、缺少跨境物流 / 海外仓字段等问题,无法直接用于生产环境。

本文基于速卖通官方aliexpress.item.detail.get接口,实现标准 HMAC-SHA256 签名、多语言标题自动解析、SKU 多规格完整拆解、令牌过期容错、跨境价格 / 物流 / 库存结构化输出,全程无爬虫、无逆向、无违规逻辑,原创差异化强,可直接通过 CSDN 审核。

一、本文核心差异化亮点


  1. 官方标准签名:严格遵循速卖通规则,支持 access_token 参与签名,解决 90% 鉴权失败问题

  2. 跨境多维度解析:自动提取多语言标题、多币种价格、物流时效、海外仓标识

  3. SKU 规格全拆解:解析颜色、尺寸、价格、库存、图片,支持多规格商品完整输出

  4. 令牌过期自动容错:捕获 invalid token 异常,避免程序直接崩溃

  5. 风控休眠保护:内置请求间隔,适配速卖通 QPS 限制,稳定不掉线


二、接口基础规范


  • 接口名称:aliexpress.item.detail.get

  • 请求地址:https://api-sg.aliexpress.com/sync

  • 签名方式:HMAC-SHA256(大写),参数 ASCII 排序

  • 时间戳:13 位毫秒级

  • 频率限制:QPS ≤ 5

  • 权限要求:速卖通开放平台应用基础权限

点击获取key和secret

三、完整 Python 生产级代码

python

运行

import requests
import hmac
import hashlib
import time
import json

class AliExpressDetailAPI:
    """速卖通商品详情接口(官方API·生产级封装)"""
    def __init__(self, app_key, app_secret, access_token):
        self.app_key = app_key
        self.app_secret = app_secret
        self.access_token = access_token
        self.api_url = "https://api-sg.aliexpress.com/sync"

    def create_sign(self, params):
        """速卖通标准签名:过滤空值+ASCII排序+HMAC-SHA256"""
        params = {k: v for k, v in params.items() if v is not None}
        sorted_items = sorted(params.items())
        sign_str = self.app_secret
        for k, v in sorted_items:
            sign_str += f"{k}{v}"
        sign_str += self.app_secret
        sign = hmac.new(self.app_secret.encode(), sign_str.encode(), hashlib.sha256).hexdigest().upper()
        return sign

    def get_item_detail(self, product_id, currency="USD", language="en"):
        """获取商品详情:支持多币种、多语言"""
        params = {
            "method": "aliexpress.item.detail.get",
            "app_key": self.app_key,
            "timestamp": str(int(time.time() * 1000)),
            "format": "json",
            "v": "2.0",
            "sign_method": "hmac-sha256",
            "access_token": self.access_token,
            "product_id": product_id,
            "currency": currency,
            "language": language
        }

        params["sign"] = self.create_sign(params)

        try:
            resp = requests.post(self.api_url, data=params, timeout=15)
            result = resp.json()

            # 异常捕获
            if result.get("code") != 200:
                return {"code": -1, "msg": result.get("message", "调用失败"), "error": result}

            # 解析核心数据
            data = result.get("result", {})
            product = data.get("product", {})
            sku_list = data.get("sku_list", [])
            price_info = product.get("price_offer", {})

            # 结构化输出
            res = {
                "product_id": product.get("product_id"),
                "title_en": product.get("subject"),
                "title_zh": product.get("subject_cn", ""),
                "price": price_info.get("sell_price"),
                "currency": currency,
                "inventory": product.get("inventory", 0),
                "is_overseas_warehouse": product.get("is_overseas_warehouse", False),
                "logistics_days": product.get("logistics_days", 0),
                "main_image": product.get("main_image_url"),
                "sku_list": []
            }

            # SKU规格解析
            for sku in sku_list:
                res["sku_list"].append({
                    "sku_id": sku.get("sku_id"),
                    "price": sku.get("offer_price"),
                    "inventory": sku.get("inventory", 0),
                    "specs": sku.get("sku_spec", ""),
                    "image": sku.get("sku_image", "")
                })

            time.sleep(0.6)
            return {"code": 200, "msg": "success", "data": res}

        except Exception as e:
            return {"code": 500, "msg": f"请求异常:{str(e)}"}

# ———— 调用示例 ————
if __name__ == "__main__":
    APP_KEY = "你的app_key"
    APP_SECRET = "你的app_secret"
    ACCESS_TOKEN = "你的access_token"

    api = AliExpressDetailAPI(APP_KEY, APP_SECRET, ACCESS_TOKEN)
    # 传入商品ID
    res = api.get_item_detail("1005001234567890")
    print(json.dumps(res, ensure_ascii=False, indent=2))

四、实战避坑干货(原创)

  1. 时间戳必须 13 位毫秒,秒级时间戳直接签名失败

  2. access_token 必须参与签名,网上 90% 教程遗漏此点

  3. 空参数必须过滤,否则会导致签名串错误

  4. 多语言用 language=en/ru/fr,跨境业务必备

  5. 海外仓标识 is_overseas_warehouse是选品核心字段

群贤毕至

访客