商品条码查询PRO怎么用:国内登记、尺寸和官网原样字段

青渚2026/8/22140

商城里的 商品条码查询PRO 和免费版 barcode-lookup 不是同一条接口。这条要的是国内已登记的条码档案:厂商注册名、规格、上市日期、官方图、包装宽高深。完整字段和农夫山泉示例在该页「接口文档」,以及 原始文档

商城页:商品条码查询PRO
商城页:商品条码查询PRO

地址只有一条:

GET https://v1.apizero.cn/api/barcode-gs1

参数名是 `code`,不是免费版那个 barcode。密钥在 API Key 建。头写成 Authorization: Bearer 你的密钥。不要把 Key 写进页面或安装包。

先在网页上看一眼,再用商城「在线调试」、GS1 条形码解析接口调试 打一次,再接到自己的后端。在线调试是真调用,会计入当日额度。

商城页:在线调试,参数名是 code
商城页:在线调试,参数名是 code

和免费版差在哪

两条都能查农夫山泉 6921168509256,用途不一样:

  • 本接口(PRO):对准物品编码中心 / GS1 中国那套登记信息。覆盖国内注册条码(常见是 69 开头的 EAN-13)。回包装尺寸、official 原始条目。没有参考价、产地、企业地址。
  • [barcode-lookup](https://apizero.cn/marketplace/barcode-lookup):日常反查名称、品牌、规格,可能带参考价和一张图。参数是 barcode。试用、轻量展示走它。

进口码、未在国内登记的码,PRO 经常是 found=false。这不代表商品假,只代表当前库里没有这份登记。要名称凑合能用时,换免费版再试一次。

页上写「会员版才有 height / width / depth / gross_weight / studio 和 official」。登录免费额度也能调这条地址;档位只决定每天几次、QPS 多少,字段以实际回包为准。

先发出去

code 必填。去掉空格和横线之后,长度只能是 8 / 12 / 13 / 14 位数字。包装上印了 01 + 14 位 GTIN(一共 16 位)也可以整段贴进去,接口会去掉 01 再查。

export APIZERO_API_KEY="你的密钥"

curl -sS -H "Authorization: Bearer $APIZERO_API_KEY" \
  "https://v1.apizero.cn/api/barcode-gs1?code=6921168509256"

也认 X-API-Key。成功时最外层 code0,正文在 data。网关的 code 和条码参数 code 不是同一个东西:一个是业务成功与否,一个是条形码。

校验失败才会直接报错,例如:

  • 没传 code
  • 去掉非数字后长度不对(不是 8/12/13/14,也不是 16 位且以 01 开头)
  • 超过 14 位有效数字

这些是请求没发出去。查过了但库里没有,是下面的 found=false,HTTP 仍成功。

查到了:先读这几项

以文档里的农夫山泉为例,data.foundtrue 时卡片够用的字段:

  • name:完整产品名,例如「农夫山泉饮用天然水」
  • brand:品牌
  • manufacturer:发布企业,官方注册主体
  • specification / net_content:规格、净含量
  • sale_date:上市日期 YYYY-MM-DD
  • category / category_code:分类和 GPC 编码
  • images:官网商品图 URL 数组,可能为空
  • barcode:整理成 13 位 EAN-13
  • gtin14:左侧补 0 的 14 位 GTIN,例如 06921168509256
  • registered / registration_message:是否已正式注册,以及说明原文

包装尺寸(会员档文档标明的那一组):

  • height / width / depth:毫米
  • gross_weight:毛重
  • studio:官网尺寸原文,一整句,例如「高度:227毫米 宽度:64毫米 …」

有尺寸时优先展示 studio,拆开的宽高深给仓储或对账。没有尺寸时这几个键仍在,值为 nullofficial_hittrue 表示拿到了官网档案,只是这件商品登记时没填尺寸。

official 是列表项原样。要对账、存档、给内部看原始键,读这里:gtinfirm_namebrandcngpcgpcnamesaledategtinstatusRegulatedProductName 等。页面展示不要把整个对象甩给用户。

feature 对应登记里的描述。很多商品是空的,不要当成接口坏了。

use_days 是从登记日算到现在的天数,会随日期变。不要写死文档里的 6469

没查到:看 found,不要看外层 code

未登记时外层仍是 code: 0msg: 成功data.foundfalseregisteredfalse,名称等业务字段为 nullimages 是空数组,registration_message 常见为「商品未登记」。

业务逻辑必须先判断 found。把「没找到」当成 404 或当失败重试,会空耗额度。

短时间对同一条码连打,网关可能走缓存(命中官网完整档大约按天;未收录更短)。进销存对账可以接受稍慢一拍;不要用这条接口做扫码枪毫秒级动画。

接到自己的网站

浏览器只打你的后端。服务器再带 Key 去 v1.apizero.cn

const url = new URL("https://v1.apizero.cn/api/barcode-gs1");
url.searchParams.set("code", barcode);

const res = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.APIZERO_API_KEY}` },
});
const json = await res.json();
if (json.code !== 0) throw new Error(json.msg || "barcode-gs1 failed");

const row = json.data;
if (!row.found) {
  return { found: false, barcode: row.barcode };
}

return {
  found: true,
  name: row.name,
  brand: row.brand,
  manufacturer: row.manufacturer,
  spec: row.specification,
  images: row.images,
  size: row.studio,
  officialHit: row.official_hit,
};

扫码枪读出来若带空格、括号,先剥成数字再传。13 位不够时接口会按 GTIN 规则补到 14 位再查,你不用自己补零,但展示给用户时用回包里的 barcode / gtin14

App、小程序同样把请求放在服务端。回包较长时,用 JSON 工具 的 JSONPath 抽 data.namedata.studiodata.official.firm_name

药品追溯、海关申报、司法鉴定不要拿本接口当正式依据。商城页底部有完整免责声明;调用即视为接受。内部核验、进销存对照、把登记信息展示给自己的用户,按声明里的合法用途来。

额度

这条按次计,不是大模型那种按 token。具体每日次数和 QPS 看商城页「访问限制」,以当时页上的为准。写这篇时:

  • 不带头:每日 2 次,QPS 1
  • 登录免费(带 Key):每日 5 次,QPS 2
  • 黄金会员:每日 5,000 次,QPS 10
  • 企业会员:每日 1,000,000 次,QPS 120

站内公告里「登录档 QPS 3」是全站常态;本接口页上仍标 QPS 2,以该接口页为准。免费次数用完再看套餐,不要换一把空 Key 碰运气。

常见卡住

  • 缺少必填参数 code:参数名写成了 barcode
  • 条形码长度不合法:夹了字母、少位、或随便扫了一个非商品码
  • 401 / missing_token:要走登录额度却没带 Bearer
  • found=false:进口码或未在国内登记。先确认是 69 开头,或改用免费版碰名称
  • 有名字没有宽高深:official_hit 为 true、尺寸为 null,登记本身没填
  • 次数用完:看该接口今日已用
  • 浏览器 Failed to fetch:页面直连了网关。改成打你自己的后端,或用接口调试代发

字段对过、额度还在,再接到网站。换条码只改 code,地址不用换。