一、接口定位
item_get_company 不是“商品级”接口,而是“供应商级”接口。
输入:1688 商品 offerId 或 companyId(二选一)
输出:公司档案 60+ 字段,包括工商信息、深度认证、工厂能力、贸易能力、在线表现 5 大板块。
典型用途:
选品 SaaS 一键生成“供应商体检报告”
ERP 自动拦截“贸易型”或“个体工商户”供应商
财务系统拉取“开票类型、对公账号”做应付初始化
二、权限与调用地址
| 项目 | 说明 |
|---|---|
| 官方方法名 | alibaba.icbu.company.get |
| 网关 | https://gw.open.1688.com/openapi/param2/2/system.oauth2/company/get |
| 权限代码 | com.alibaba.icbu.company.read |
| 频率 | 默认 1 QPS,企业最高 20 QPS |
| 费用 | 免费,但需企业开发者+深度认证权限包 |
三、签名算法(2025-12 仍沿用“旧版 TOP 签名”)
排除
sign与空值key 按 ASCII 升序
key + value首尾拼接AppSecretMD5 → 32 位大写
Python 函数(可直接复用):
from hashlib import md5 def sign(p: dict, secret: str) -> str: p = {k: v for k, v in p.items() if v is not None} text = ''.join([f'{k}{v}' for k, v in sorted(p.items())]) + secret return md5(text.encode()).hexdigest().upper()四、最小可运行示例
场景:已知 1688 商品 ID,想 1 行代码拿到“公司 + 工厂 + 认证”全套档案。
import requests, time, json class CompanyAPI: url = 'https://gw.open.1688.com/openapi/param2/2/system.oauth2/company/get' def __init__(self, app_key, app_secret, access_token): self.ak, self.sk, self.token = app_key, app_secret, access_token def get_by_offer(self, offer_id: str): params = { 'method': 'alibaba.icbu.company.get', 'app_key': self.ak, 'access_token': self.token, 'format': 'json', 'v': '1.0', 'timestamp': str(int(time.time() * 1000)), 'offerId': offer_id, 'fields': ('companyName,businessType,countryName,' 'province,city,address,contact,telephone,' 'mainProducts,employeeNum,factoryArea,' 'deepVerify,deepVerifyInfo,isoCert,' 'tradeCapacity,creditLevel,openTime') } params['sign'] = sign(params, self.sk) r = requests.post(self.url, data=params, timeout=10).json() if 'error_response' in r: raise RuntimeError(r['error_response']['msg']) return r['company_get_response']['company'] # ----------- 调用 ----------- cli = CompanyAPI('你的AppKey', '你的AppSecret', '你的AccessToken') info = cli.get_by_offer('64321098756') print(json.dumps(info, ensure_ascii=False, indent=2))五、核心字段速查表(60 选 20)
| 字段 | 类型 | 示例值 | 业务含义 |
|---|---|---|---|
| companyName | string | 深圳市某某科技有限公司 | 工商注册名 |
| businessType | string | 生产企业 | 枚举:生产企业/贸易企业/工贸一体/个体工商户 |
| countryName | string | 中国 | 注册国家 |
| province/city | string | 广东省/深圳市 | 可用来做“产地”标签 |
| address | string | 宝安区福永街道桥头村… | 可地图打点 |
| contact | string | 张经理 | 公开联系人 |
| telephone | string | 0755-2953**** | 前台固话 |
| mainProducts | list | ["蓝牙耳机", "音箱"] | 关键词搜索权重高 |
| employeeNum | string | 200-300人 | 工厂规模粗筛 |
| factoryArea | int | 5000 | 单位:平方米 |
| deepVerify | bool | true | 是否深度验厂 |
| deepVerifyInfo | object | {“verifyType”: “深度验厂”, “verifyUrl”: “https://…”} | 视频/报告链接 |
| isoCert | list | ["ISO 9001", "BSCI"] | 体系证书 |
| tradeCapacity | object | {“exportPct”: 80, “mainMarkets”: [“北美”, “西欧”]} | 出口占比 |
| creditLevel | string | AAA | 诚信通等级 |
| openTime | string | 2012-05-18 | 开店时间,算“老店” |
六、五大踩坑实录
offerId 与 companyId 混用
老版本只认companyId,2025-12 起两者皆可;但若同时传,优先取companyId,offerId被忽略。deepVerify=true 但 deepVerifyInfo 为空
说明“已下单验厂,但报告未回传”,隔 24h 再拉即可。address 带“*”号
个人/个体户保护隐私,地址被脱敏,只能到“镇”级;如需完整地址,需用户授权“电子合同”接口。字段缺失≠null
1688 对未填写字段直接不返回,解析前务必dict.get(key, default)。图片外链 30 天失效
deepVerifyInfo.verifyUrl是阿里云临时签名,落库请立刻下载转存 OSS。
七、生产级落库设计(MySQL 片段)
CREATE TABLE supplier_company ( id bigint PRIMARY KEY AUTO_INCREMENT, company_id varchar(32) UNIQUE COMMENT '1688 companyId', company_name varchar(100) NOT NULL, business_type varchar(20), province varchar(20), city varchar(20), address varchar(255), employee_num varchar(20), factory_area int COMMENT '平方米', deep_verify tinyint DEFAULT 0, iso_cert json, trade_capacity json, credit_level varchar(10), open_time date, updated_at timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );iso_cert、tradeCapacity 直接存 JSON,方便后台渲染标签。
建联合索引
(province, city, businessType)用于“产地+类型”筛选。
八、小结
item_get_company 是 1688 开放生态里“唯一能把供应商家底一次搬空”的接口。
记住 3 句话:
先拿 offerId 换 companyId,再拉档案,可省 50% 流量。
深度验厂、ISO、工厂面积 3 个字段组合,即可在选品阶段秒筛“真实工厂”。
地址、电话、验厂报告都是 30 天临时链接,落库立刻转存,否则全链 403。
把上面的CompanyAPI类复制到项目,再配一张supplier_company表,10 分钟就能上线“供应商体检报告”自动化。祝各位调试顺利,永不踩坑!