×

1688 商品详情接口:多规格价格分层解析与业务数据归一化实践

Ace Ace 发表于2026-08-24 16:18:47 浏览15 评论0

抢沙发发表评论

前言

大部分公开教程只演示简单调用获取商品基础信息,忽略 1688B 端核心痛点:阶梯批发价、多 SKU 规格、起订量限制、混批规则字段杂乱。同一商品会存在多档拿货价,原始接口返回字段嵌套层级深,直接拿原始 JSON 很难直接用于业务系统。本文重点不是简单请求演示,而是对接入后的数据做分层解析、脏字段过滤,适配采购、比价类业务场景。

前置准备

调用前需要在 1688 开放平台创建应用,获取 appKey、appSecret,拿到 access_token。商品详情接口需要传入商品 ID,注意部分私密商品、被下架商品会返回权限类异常,业务代码必须做兼容处理。

点击获取key和secret

核心 Python 代码示例

import requests
import time

class Ali1688DetailClient:
    def __init__(self, app_key, app_secret, access_token):
        self.app_key = app_key
        self.app_secret = app_secret
        self.token = access_token
        self.url = "https://gw.open.1688.com/openapi/param2/1/com.alibaba.trade/alibaba.trade.getProductDetail"

    def get_product_detail(self, product_id):
        params = {
            "appKey": self.app_key,
            "access_token": self.token,
            "productId": product_id
        }
        resp = requests.get(self.url, params=params, timeout=15)
        raw_data = resp.json()
        result = self.data_normalize(raw_data)
        return result

    def data_normalize(self, raw):
        """核心:原始数据归一化,提取阶梯价格、起订量,过滤无效字段"""
        res = {
            "success": False,
            "product_id": None,
            "title": "",
            "main_image": "",
            "price_list": [],
            "min_order": 0,
            "is_off_shelf": False
        }
        if raw.get("errorCode"):
            res["msg"] = raw.get("errorMessage")
            return res
        data = raw.get("result", {})
        if not data or data.get("status") != "success":
            res["msg"] = "商品数据为空或已下架"
            res["is_off_shelf"] = True
            return res
        info = data.get("productInfo", {})
        res["success"] = True
        res["product_id"] = info.get("productId")
        res["title"] = info.get("subject", "")
        res["main_image"] = info.get("mainImage", "")
        res["min_order"] = info.get("minOrderQuantity", 0)
        # 解析批发阶梯价格
        price_steps = info.get("priceRanges", [])
        for p in price_steps:
            res["price_list"].append({
                "start_num": p.get("startQuantity"),
                "price": p.get("price")
            })
        return res

if __name__ == "__main__":
    client = Ali1688DetailClient("your_appkey","your_secret","your_token")
    detail = client.get_product_detail(product_id=68******56)
    print(detail)

代码逻辑解析

data_normalize 函数是整套封装的重点。接口原始返回字段繁多,很多是平台内部使用字段,全部存储会浪费存储空间。这里只提取业务需要的标题、主图、起订量、多档批发价格。


  1. 优先捕获 errorCode,处理鉴权错误、token 过期;

  2. 判断商品状态,识别下架、删除商品;

  3. 循环解析 priceRanges,把阶梯批发价整理成结构化数组,方便前端展示或者入库;

  4. 返回统一格式结构体,上层业务不需要感知原始接口字段变化。


对接过程常见问题


  1. Token 短期有效,大批量循环获取商品详情时,要做好 token 过期捕获与自动刷新逻辑;

  2. 部分定制类商品没有阶梯价格,priceRanges 为空数组,业务上要做空判断,避免程序报错;

  3. 平台有调用频率限制,短时间大量请求会触发限流,建议增加 sleep 间隔,按批次拉取;

  4. 私密商品、分销商专属商品,即便 ID 正确也无法获取详情,代码需要标记该类异常,不要直接抛出崩溃。

群贤毕至

访客