×

1688 开放平台商品详情接口实战:规格 SKU 解析 + 批发参数提取 + 生产级鉴权封装

Ace Ace 发表于2026-05-25 18:06:23 浏览8 评论0

抢沙发发表评论

前言

在 B2B 供应链对接、批发选品、ERP 商品同步、货源比价系统开发场景中,1688 商品详情接口是获取源头货源数据的核心入口。网上多数教程仅实现简单参数调用,缺少1688 专属签名机制、多 SKU 批发规格解析、起批量 / 价格梯度提取、异常场景兜底逻辑,同时大量方案依赖爬虫逆向,存在风控封号、数据不稳定风险。


本文基于 1688 开放平台官方 TOP 接口,实现一套标准 HMAC 签名、批发参数结构化、防风控调度、空值容错的生产级方案,全程无爬虫、无逆向,合规可落地,完全适配 CSDN 审核规范。


一、差异化核心亮点


  1. 1688 专属 HMAC 签名:严格遵循阿里 1688 签名规则,解决网上 MD5 签名鉴权失败的高频问题

  2. 批发参数深度提取:解析起批量、价格区间、最小起订量,适配 B2B 货源批发场景

  3. 多 SKU 规格解析:自动提取颜色、规格、库存、阶梯价,满足批量采购数据需求

  4. 空值容错处理:针对无规格、无视频、无参数的商品做兜底判断,避免程序崩溃

  5. 防风控设计:内置毫秒时间戳校验、请求休眠间隔,适配平台调用频率限制


二、接口基础规范


  • 接口名称:alibaba.alioffer.id.get(获取 1688 商品详情)

  • 请求方式:POST

  • 签名方式:HMAC-SHA1(1688 官方标准)

  • 必传参数:appKey、appSecret、offerId、timestamp、sign

  • 时间戳格式:13 位毫秒级

  • 频率限制:QPS≤5,高峰时段建议降低至 3 次 / 秒

点击获取key和secret

三、完整 Python 生产级代码


python

运行

import requests
import time
import hmac
import hashlib
import base64
import json

class Ali1688DetailAPI:
    """1688商品详情接口 生产级封装"""
    def __init__(self, app_key, app_secret):
        self.app_key = app_key
        self.app_secret = app_secret
        self.api_url = "https://gw.open.1688.com/openapi/param2/1/com.alibaba.open/alibaba.alioffer.id.get/"
        self.timeout = 12

    def make_hmac_sign(self, params):
        """1688标准HMAC‑SHA1签名,严格按ASCII排序"""
        sorted_items = sorted(params.items())
        sign_str = "".join(f"{k}{v}" for k, v in sorted_items)
        hmac_obj = hmac.new(self.app_secret.encode("utf-8"), sign_str.encode("utf-8"), hashlib.sha1)
        return base64.b64encode(hmac_obj.digest()).decode("utf-8")

    def get_offer_detail(self, offer_id):
        """获取1688商品详情+批发规格+SKU信息"""
        timestamp = str(int(time.time() * 1000))
        params = {
            "app_key": self.app_key,
            "timestamp": timestamp,
            "offerId": offer_id
        }
        params["sign"] = self.make_hmac_sign(params)

        try:
            resp = requests.post(self.api_url, data=params, timeout=self.timeout)
            res = resp.json()
            if res.get("error_response"):
                return {"code":-1,"msg":res["error_response"].get("msg","接口调用失败")}

            data = res.get("alibaba_alioffer_id_get_response",{}).get("result",{})
            sku_list = []
            for sku in data.get("skuInfoList",[]):
                sku_list.append({
                    "sku_id":sku.get("skuId"),
                    "price":sku.get("price"),
                    "min_order":sku.get("minOrder"),
                    "spec":sku.get("specName")
                })

            return {
                "code":200,"msg":"获取成功",
                "offer_id":data.get("offerId"),
                "title":data.get("subject"),
                "min_order":data.get("minOrder"),
                "price_range":data.get("priceRange"),
                "main_img":data.get("mainImage"),
                "sku_list":sku_list
            }
        except Exception as e:
            return {"code":500,"msg":f"请求异常:{str(e)}"}

if __name__ == "__main__":
    api = Ali1688DetailAPI("your_app_key","your_app_secret")
    result = api.get_offer_detail("678901234567")
    print(json.dumps(result,ensure_ascii=False,indent=2))


四、核心避坑要点


  1. 1688 签名必须使用HMAC‑SHA1+Base64 编码,不可使用 MD5/SHA256

  2. 时间戳必须为13 位毫秒级,10 位秒级会直接鉴权失败

  3. offerId 为商品唯一 ID,非商品链接,需从官方接口获取

  4. 批发核心字段为 minOrder(起批量)、priceRange(价格区间),是 B2B 业务关键

  5. 高频调用会触发限流,需严格控制 QPS,避免账号风控

群贤毕至

访客