深度分析速卖通API接口,用Python脚本实现

简介: 速卖通API支持商品、订单、物流等核心业务对接,采用AppKey+Token认证与MD5签名机制。本文详解其API体系与Python调用实现,助力开发者高效集成。

速卖通(AliExpress)作为阿里巴巴旗下的跨境电商平台,其开放平台提供了丰富的 API 接口,支持开发者对接商品管理、订单处理、物流跟踪等核心业务。以下从 API 特性分析和 Python 脚本实现两方面进行说明。
一、速卖通 API 接口核心特性分析

  1. 接口体系与功能范围
    速卖通 API 基于开放平台架构,主要覆盖六大业务领域(参考速卖通开放平台文档):
    商品管理:创建 / 编辑商品、获取商品列表、库存更新等(如aliexpress.product.redefining.findproductbyid查询商品详情);
    订单管理:订单查询、订单状态更新、发货操作等(如aliexpress.trade.redefining.findorderlistbypage分页查询订单);
    营销活动:店铺优惠券、限时折扣等活动管理(如aliexpress.promotion.coupon.redefining.querycoupon查询优惠券);
    物流服务:物流模板查询、物流信息跟踪(如aliexpress.logistics.redefining.getlogisticstrackinginfo获取物流跟踪);
    店铺运营:店铺信息查询、评价管理等;
    数据分析:商品销售数据、流量分析等(需特殊权限)。
  2. 认证与授权机制
    速卖通 API 采用AppKey + AppSecret + Access Token的三层认证体系:
    开发者注册并创建应用,获取AppKey(应用标识)和AppSecret(密钥);
    通过 OAuth 2.0 流程获取Access Token(访问令牌,有效期 24 小时),用于接口调用;
    每次请求需携带AppKey、Access Token及签名参数,确保身份合法性。
  3. 接口规范与签名机制
    请求格式:
    协议:HTTPS;
    方法:以 POST 为主(部分查询接口支持 GET);
    数据格式:请求参数需封装为 JSON,响应为 JSON 格式。
    签名规则(核心防篡改机制):
    收集所有请求参数(包括公共参数和接口私有参数);
    按参数名 ASCII 升序排序;
    拼接为key1=value1&key2=value2格式,末尾拼接app_secret;
    对拼接字符串进行 MD5 加密,生成 32 位小写签名(sign参数)。
    公共参数:所有接口必须携带app_key、access_token、timestamp(时间戳,毫秒级)、format(固定为json)、sign(签名)。
  4. 限流与错误处理
    限流策略:按应用维度限流,默认 QPS 为 10(不同接口可能有差异),超限返回429错误;
    错误码体系:通过响应code字段标识错误(如401表示令牌无效,500表示服务端异常),message字段提供错误详情。
    二、Python 脚本实现:速卖通 API 调用示例
    以下以 “查询商品详情” 和 “分页查询订单” 为例,实现速卖通 API 的调用,包含签名生成、请求发送、响应处理及异常处理。
  5. 准备工作
    注册速卖通开发者账号,创建应用,获取AppKey和AppSecret;
    完成 OAuth 授权流程,获取Access Token(可通过开放平台的 “测试工具” 临时获取)。
  6. 脚本实现
    python
    运行
    import requests
    import json
    import time
    import hashlib
    import logging
    from requests.exceptions import RequestException

配置日志

logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s"
)

class AliExpressAPI:
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.base_url = "https://api-sg.aliexpress.com/openapi" # 速卖通API网关(新加坡节点)
self.format = "json" # 固定为json

def _generate_sign(self, params):
    """生成签名(按速卖通API规则)"""
    # 1. 按参数名ASCII升序排序
    sorted_params = sorted(params.items(), key=lambda x: x[0])
    # 2. 拼接为key=value&key=value格式
    sign_str = "&".join([f"{k}={v}" for k, v in sorted_params])
    # 3. 末尾拼接app_secret
    sign_str += self.app_secret
    # 4. MD5加密并转为小写
    return hashlib.md5(sign_str.encode()).hexdigest().lower()

def _get_common_params(self, method):
    """生成公共参数"""
    return {
        "app_key": self.app_key,
        "access_token": self.access_token,
        "timestamp": str(int(time.time() * 1000)),  # 毫秒级时间戳
        "format": self.format,
        "method": method,  # 接口方法名(如aliexpress.product.redefining.findproductbyid)
        "v": "2.0"  # API版本
    }

def call_api(self, method, biz_params=None):
    """
    调用速卖通API的通用方法
    :param method: 接口方法名(完整名称)
    :param biz_params: 业务参数(字典,接口私有参数)
    :return: 接口返回的业务数据(字典)或None
    """
    # 1. 合并公共参数与业务参数
    common_params = self._get_common_params(method)
    all_params = {**common_params,** (biz_params or {})}

    # 2. 生成签名并添加到参数中
    sign = self._generate_sign(all_params)
    all_params["sign"] = sign

    # 3. 发送POST请求
    try:
        response = requests.post(
            self.base_url,
            data=json.dumps(all_params),
            headers={"Content-Type": "application/json"},
            timeout=15
        )
        response.raise_for_status()  # 检查HTTP状态码

        # 4. 解析响应
        result = response.json()
        logging.info(f"接口调用成功:{method},响应:{json.dumps(result, ensure_ascii=False)}")

        # 5. 检查业务错误(速卖通API的code=200表示成功)
        if result.get("code") != 200:
            logging.error(f"业务错误:{result.get('message')}(错误码:{result.get('code')})")
            return None
        return result.get("result")  # 返回业务数据部分

    except RequestException as e:
        logging.error(f"请求异常:{str(e)},接口:{method}")
        return None
    except json.JSONDecodeError:
        logging.error(f"响应格式错误:{response.text},接口:{method}")
        return None

def get_product_detail(self, product_id):
    """
    查询商品详情(接口:aliexpress.product.redefining.findproductbyid)
    :param product_id: 商品ID(速卖通商品唯一标识)
    :return: 商品详情字典
    """
    method = "aliexpress.product.redefining.findproductbyid"
    biz_params = {"product_id": product_id}
    return self.call_api(method, biz_params)

def get_order_list(self, start_time, end_time, page=1, page_size=20):
    """
    分页查询订单(接口:aliexpress.trade.redefining.findorderlistbypage)
    :param start_time: 订单创建开始时间(格式:yyyy-MM-dd HH:mm:ss)
    :param end_time: 订单创建结束时间(格式:yyyy-MM-dd HH:mm:ss)
    :param page: 页码(默认1)
    :param page_size: 每页条数(默认20,最大100)
    :return: 订单列表字典
    """
    method = "aliexpress.trade.redefining.findorderlistbypage"
    biz_params = {
        "create_time_from": start_time,
        "create_time_to": end_time,
        "page": page,
        "page_size": page_size
    }
    return self.call_api(method, biz_params)

示例调用

if name == "main":

# 替换为你的实际参数(从速卖通开放平台获取)
APP_KEY = "your_app_key"
APP_SECRET = "your_app_secret"
ACCESS_TOKEN = "your_access_token"

# 初始化API客户端
ae_api = AliExpressAPI(APP_KEY, APP_SECRET, ACCESS_TOKEN)

# 1. 查询商品详情(替换为实际商品ID)
product_id = "1234567890"  # 示例商品ID
product_detail = ae_api.get_product_detail(product_id)
if product_detail:
    print(f"商品标题:{product_detail.get('subject')}")
    print(f"商品价格:{product_detail.get('original_price')} {product_detail.get('currency_code')}")
    print(f"库存数量:{product_detail.get('stock_quantity')}")

# 2. 查询订单列表(查询最近1天的订单)
import datetime
end_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
start_time = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime("%Y-%m-%d %H:%M:%S")
order_list = ae_api.get_order_list(start_time, end_time, page=1)
if order_list:
    print(f"\n订单总数:{order_list.get('total_count')}")
    for order in order_list.get('order_list', [])[:3]:  # 打印前3条订单
        print(f"订单号:{order.get('order_id')},金额:{order.get('pay_amount')},状态:{order.get('order_status')}")

三、关键注意事项
签名生成的准确性:
签名是速卖通 API 调用的核心,需严格按照 “参数排序→拼接→MD5 加密” 流程实现,任何步骤错误都会导致401签名无效错误。建议用单元测试验证签名逻辑(对比开放平台 “签名工具” 的结果)。
Access Token 的管理:
Token 有效期为 24 小时,需在脚本中实现自动刷新机制(调用aliexpress.oauth.redefining.refreshtoken接口),避免手动更新。
时间格式与时区:
接口中时间参数(如create_time_from)需用yyyy-MM-dd HH:mm:ss格式,且需与速卖通服务器时区(UTC+8)一致,避免因时间偏差导致数据查询异常。
限流与重试:
若触发限流(429错误),需在call_api方法中添加重试逻辑(如使用tenacity库实现指数退避重试)。
权限申请:
部分接口(如订单修改、支付相关)需单独申请权限,调用前需在开放平台确认应用已获得对应权限,否则返回403权限不足错误。
四、扩展方向
封装更多业务接口(如商品上架、订单发货);
实现数据持久化(将商品 / 订单数据存入 MySQL 或 MongoDB);
集成定时任务(如每小时同步一次订单数据);
开发监控面板(可视化展示 API 调用成功率、错误分布)。
通过上述脚本,可快速实现速卖通 API 的对接,适用于跨境电商 ERP 系统、多平台店铺管理工具等场景。实际开发中需结合具体业务需求和接口文档进行扩展

相关文章
|
2月前
|
存储 分布式计算 大数据
基于Python大数据的的电商用户行为分析系统
本系统基于Django、Scrapy与Hadoop技术,构建电商用户行为分析平台。通过爬取与处理海量用户数据,实现行为追踪、偏好分析与个性化推荐,助力企业提升营销精准度与用户体验,推动电商智能化发展。
|
2月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
2月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
3月前
|
缓存 监控 算法
唯品会item_search - 按关键字搜索 VIP 商品接口深度分析及 Python 实现
唯品会item_search接口支持通过关键词、分类、价格等条件检索商品,广泛应用于电商数据分析、竞品监控与市场调研。结合Python可实现搜索、分析、可视化及数据导出,助力精准决策。
|
2月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的台风灾害分析及预测系统
针对台风灾害预警滞后、精度不足等问题,本研究基于Python与大数据技术,构建多源数据融合的台风预测系统。利用机器学习提升路径与强度预测准确率,结合Django框架实现动态可视化与实时预警,为防灾决策提供科学支持,显著提高应急响应效率,具有重要社会经济价值。
|
2月前
|
机器学习/深度学习 大数据 关系型数据库
基于python大数据的青少年网络使用情况分析及预测系统
本研究基于Python大数据技术,构建青少年网络行为分析系统,旨在破解现有防沉迷模式下用户画像模糊、预警滞后等难题。通过整合多平台亿级数据,运用机器学习实现精准行为预测与实时干预,推动数字治理向“数据驱动”转型,为家庭、学校及政府提供科学决策支持,助力青少年健康上网。
|
2月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
Python API接口实战指南:从入门到精通
|
2月前
|
自然语言处理 监控 API
速卖通商品详情API秘籍!轻松获取SKU属性数据
速卖通商品详情API(aliexpress.item.get)支持通过编程获取商品标题、价格、SKU、库存、销量、物流模板、评价及店铺信息,适用于价格监控、选品分析等场景。接口支持多语言返回,采用AppKey+AppSecret+Token认证,需签名验证,确保安全调用。

推荐镜像

更多