一、接入前准备(必须完成)
1. 注册与认证(账号与资质)
- 访问 MIC 开放平台 :https://open.made-in-china.com/
- 用企业账号注册 / 登录(个人账号权限受限,跨境 / 商品类接口多为企业专属)
- 完成企业实名认证:营业执照、法人信息、对公账户核验(1--3 个工作日)
- 开通API 服务权限:在控制台「API 服务」→「申请开通」,选择你需要的能力包(商品搜索、商品详情、类目、榜单等)
2. 创建应用,获取核心凭证
- 进入「应用管理」→「创建应用」
- 应用名称:自定义(如 "MIC 商品数据工具")
- 应用类型:自用型 / 第三方应用(自用即可)
- 回调 URL:OAuth 授权用,本地调试可填
http://localhost
- 审核通过后,在应用详情页获取三大核心凭证 (务必妥善保管,严禁泄露)
app_key/client_id:应用唯一标识app_secret/client_secret:签名密钥access_token:接口调用令牌(通过 OAuth 获取,有效期通常 24 小时)
3. 申请接口权限
- 进入「权限管理」→「申请 API 权限」
- 搜索并勾选你需要的接口(以商品 / 类目 / 榜单为例):
- 商品类目:
category.get(获取类目树) - 商品搜索 / 榜单:
product.search、product.topList - 商品详情:
product.get
- 商品类目:
- 提交审核,公开权限一般即时通过,高阶权限可能 1--2 个工作日。
二、核心技术流程:鉴权与签名(MIC 通用规则)
MIC 接口采用OAuth2.0 + MD5 签名双重校验,所有请求必须带合法签名与令牌。
1. 获取 access_token(授权流程)
(1)获取授权码 code
plaintext
GET https://open.made-in-china.com/oauth/authorize
?client_id=你的app_key
&redirect_uri=你的回调URL
&response_type=code
&state=随机字符串(防CSRF)
用户授权后,平台会重定向到你的redirect_uri并带回code。
(2)用 code 换取 access_token
plaintext
POST https://open.made-in-china.com/oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&client_id=你的app_key
&client_secret=你的app_secret
&code=上一步获取的code
&redirect_uri=你的回调URL
返回示例(JSON):
json
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_in": 86400,
"refresh_token": "xxx...",
"token_type": "bearer"
}
2. 生成签名(MD5,必对)
签名规则(与 1688 类似,但参数拼接略有差异):
- 把所有非空请求参数 (不含
sign、不含文件)按参数名 ASCII 升序排列 - 按
key1=value1&key2=value2&...拼接成字符串 - 首尾拼接
app_secret:app_secret + 参数字符串 + app_secret - 做 MD5 加密,转大写 ,得到
sign
示例(Python):
python
运行
import hashlib
def generate_mic_sign(params, app_secret):
# 1. 按key升序排序
sorted_items = sorted(params.items(), key=lambda x: x[0])
# 2. 拼接 key=value&key=value...
param_str = "&".join([f"{k}={v}" for k, v in sorted_items if v is not None])
# 3. 首尾加secret
sign_raw = app_secret + param_str + app_secret
# 4. MD5大写
sign = hashlib.md5(sign_raw.encode("utf-8")).hexdigest().upper()
return sign
三、接口调用实战(以 "获取商品类目 + 类目榜单" 为例)
1. 通用请求规范
- 请求地址:
https://api.made-in-china.com/rest/{version}/{interface} - 版本:
v1或v2(以文档为准,目前主流v2) - 请求方式:
GET(查询类)/POST(提交类) - 必传公共参数(所有接口都要):
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| app_key | string | 是 | 应用 ID |
| timestamp | long | 是 | 13 位毫秒时间戳 |
| nonce | string | 是 | 随机字符串(防重放,如 UUID) |
| sign | string | 是 | MD5 签名(大写) |
| access_token | string | 是 | 授权令牌 |
| format | string | 否 | 默认 json |
2. 接口 1:获取商品类目树(category.get)
请求示例(Python)
python
运行
import requests
import time
import uuid
# 配置
APP_KEY = "你的app_key"
APP_SECRET = "你的app_secret"
ACCESS_TOKEN = "你的access_token"
API_URL = "https://api.made-in-china.com/rest/v2/category.get"
def get_mic_category_tree(parent_id=0):
# 业务参数
params = {
"app_key": APP_KEY,
"timestamp": int(time.time() * 1000),
"nonce": str(uuid.uuid4()),
"access_token": ACCESS_TOKEN,
"parent_id": parent_id, # 0=顶级类目
"format": "json"
}
# 生成签名
params["sign"] = generate_mic_sign(params, APP_SECRET)
# 发送请求
resp = requests.get(API_URL, params=params, timeout=10)
return resp.json()
# 调用:获取顶级类目
if __name__ == "__main__":
result = get_mic_category_tree(parent_id=0)
print(result)
响应结构(关键字段)
json
{
"code": 200,
"message": "success",
"data": {
"categories": [
{
"category_id": "1001",
"name": "Apparel",
"level": 1,
"is_leaf": false,
"children": [...]
}
]
}
}
3. 接口 2:按类目获取商品榜单(product.topList)
业务参数(核心)
category_id:类目 ID(从上一步获取)sort_type:排序类型(sales = 销量,price = 价格,newest = 新品)page_no/page_size:分页country:目标市场(可选,如 US、DE)
调用示例(关键代码)
python
运行
API_TOP_URL = "https://api.made-in-china.com/rest/v2/product.topList"
def get_category_top_products(category_id, sort_type="sales", page_no=1, page_size=20):
params = {
"app_key": APP_KEY,
"timestamp": int(time.time() * 1000),
"nonce": str(uuid.uuid4()),
"access_token": ACCESS_TOKEN,
"category_id": category_id,
"sort_type": sort_type,
"page_no": page_no,
"page_size": page_size,
"format": "json"
}
params["sign"] = generate_mic_sign(params, APP_SECRET)
resp = requests.get(API_TOP_URL, params=params, timeout=10)
return resp.json()
四、限流、异常与最佳实践
1. 限流规则(必须遵守)
- 国内 IP:QPS ≤ 10
- 海外 IP:QPS ≤ 5
- 单日调用限额:基础权限一般 5000--10000 次,企业版可提升
- 触发限流返回
429 Too Many Requests,需做退避重试(1s→3s→5s,最多 3 次)
2. 常见错误码与处理
| 错误码 | 含义 | 处理方案 |
|---|---|---|
| 400 | 参数错误 / 签名错误 | 核对参数顺序、签名逻辑、时间戳 |
| 401 | token 过期 / 无效 | 刷新 access_token 或重新授权 |
| 403 | 权限不足 | 检查接口权限是否开通 |
| 404 | 类目 / 商品不存在 | 核对 ID 有效性 |
| 429 | 限流 | 本地限流 + 退避重试 |
| 500 | 服务异常 | 缓存兜底,重试 1 次,失败告警 |
3. 生产优化建议
- 缓存类目数据:类目更新慢,本地缓存 24 小时,减少调用
- 令牌池 / 自动刷新 :提前刷新
access_token,避免过期中断 - 字段过滤 :用
fields参数只返回需要的字段,提升性能 - 日志与监控:记录请求耗时、成功率、错误码,便于排查
五、与 1688 接口的关键差异(避坑)
- 授权体系 :MIC 强依赖
access_token,1688 部分公开接口可仅用签名 - 参数拼接 :MIC 用
key=value&分隔,1688 是直接keyvalue无分隔符 - 限流粒度:MIC 按 IP 地域区分 QPS,1688 按应用维度
- 类目结构 :MIC 类目 ID 为字符串,层级用
level显式标注,更适合跨境场景
六、下一步行动
- 先在 MIC 开放平台完成企业认证 + 应用创建 + 权限申请
- 用 Postman 先调试
category.get,拿到类目 ID - 再调用
product.topList,验证类目榜单数据 - 最后集成到你的系统,加上缓存、限流、异常兜底