×

中国制造网商品详情接口:B2B 供应商属性结构化解析实践

Ace Ace 发表于2026-08-25 16:45:34 浏览13 评论0

抢沙发发表评论

前言

网上多数教程只简单演示接口调用,直接打印原始返回结果,忽略中国制造网 B 端独有的业务特征:供应商资质、MOQ 起订量、包装参数、产地、定制加工属性。原始接口返回嵌套层级深,大量字段为平台内部使用,直接入库会产生大量冗余数据。本文不从简单请求示例入手,重点讲解字段过滤、供应商信息剥离、异常场景兼容,适配比价、供应链数据同步业务。

前置准备

登录中国制造开放平台创建应用,获取 appKey、appSecret,完成授权拿到 access_token。调用商品详情接口传入产品 ID,需要区分公开商品、会员专属商品,后者会返回权限异常,代码层面必须做拦截处理。

点击获取key和secret

核心 Python 代码示例

python

import requests

class MadeInChinaDetailClient:
    def __init__(self, app_key, access_token):
        self.app_key = app_key
        self.token = access_token
        self.api_url = "https://api.made‑in‑china.com/openapi/product/detail/get"

    def fetch_product_detail(self, product_id):
        payload = {
            "appKey": self.app_key,
            "accessToken": self.token,
            "productId": product_id
        }
        resp = requests.get(self.api_url, params=payload, timeout=18)
        origin_data = resp.json()
        return self.struct_data(origin_data)

    def struct_data(self, raw):
        """数据结构化:剥离供应商、定制属性,过滤无用字段"""
        output = {
            "ok": False,
            "product_id": None,
            "title": "",
            "main_img": "",
            "moq": 0,
            "origin_place": "",
            "is_custom": False,
            "supplier_info": {},
            "msg": ""
        }
        if raw.get("code") != 0:
            output["msg"] = raw.get("message", "接口调用失败")
            return output
        data = raw.get("data", {})
        if not data:
            output["msg"] = "商品不存在或已下架"
            return output
        product = data.get("productInfo", {})
        supplier = data.get("supplierInfo", {})

        output["ok"] = True
        output["product_id"] = product.get("productId")
        output["title"] = product.get("productName", "")
        output["main_img"] = product.get("mainImageUrl", "")
        output["moq"] = product.get("minOrderQuantity", 0)
        output["origin_place"] = product.get("origin", "")
        output["is_custom"] = bool(product.get("supportCustomize", 0))

        # 提取供应商核心业务字段
        output["supplier_info"] = {
            "company_name": supplier.get("companyName"),
            "factory_type": supplier.get("factoryType"),
            "certification": supplier.get("certList", [])
        }
        return output

if __name__ == "__main__":
    client = MadeInChinaDetailClient("your_appkey", "your_access_token")
    res = client.fetch_product_detail(product_id=95******21)
    print(res)

代码逻辑解析

核心在于struct_data结构化函数,不直接透传原始 JSON。


  1. 优先拦截接口错误码,区分鉴权失败、商品下架、权限不足;

  2. 将商品基础参数、供应商信息做分离,业务系统可以分开存储产品表与供应商表;

  3. 识别是否支持定制加工、最小起订量、产地等 B2B 关键业务字段;

  4. 返回固定结构体,上层业务无需关心原始接口字段变动。


对接踩坑汇总


  1. access_token 存在有效期,批量同步商品时,捕获鉴权报错,触发 token 重新获取逻辑;

  2. 部分 OEM 定制类商品无固定售价,价格字段为空,业务代码必须做空值判断;

  3. 开放平台存在 QPS 限制,大批量拉取需要做批次休眠,高频调用会被限流;

  4. 部分仅对采购会员开放的商品,即便产品 ID 正确,也无法获取详情,需要标记异常,不要直接抛出程序崩溃。

群贤毕至

访客