前言 网上多数教程只简单演示接口调用,直接打印原始返回结果,忽略中国制造网
B 端独有的业务特征:供应商资质、MOQ
起订量、包装参数、产地、定制加工属性。原始接口返回嵌套层级深,大量字段为平台内部使用,直接入库会产生大量冗余数据。本文不从简单请求示例入手,重点讲解字段过滤、供应商信息剥离、异常场景兼容,适配比价、供应链数据同步业务。 前置准备 登录中国制造开放平台创建应用,获取 appKey、appSecret,完成授权拿到 access_token。调用商品详情接口传入产品 ID,需要区分公开商品、会员专属商品,后者会返回权限异常,代码层面必须做拦截处理。 核心 Python 代码示例 python 代码逻辑解析 核心在于 优先拦截接口错误码,区分鉴权失败、商品下架、权限不足; 将商品基础参数、供应商信息做分离,业务系统可以分开存储产品表与供应商表; 识别是否支持定制加工、最小起订量、产地等 B2B 关键业务字段; 返回固定结构体,上层业务无需关心原始接口字段变动。 对接踩坑汇总 access_token 存在有效期,批量同步商品时,捕获鉴权报错,触发 token 重新获取逻辑; 部分 OEM 定制类商品无固定售价,价格字段为空,业务代码必须做空值判断; 开放平台存在 QPS 限制,大批量拉取需要做批次休眠,高频调用会被限流; 部分仅对采购会员开放的商品,即便产品 ID 正确,也无法获取详情,需要标记异常,不要直接抛出程序崩溃。
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。