仓储入库如何用条码识别接口做扫码核验(含三种传图方案)
# 仓储入库如何用条码识别接口做扫码核验(含三种传图方案)
> 接口/接入点:条码生成与识别(apiCode 1129)· 1129-2/3/4 识别 | 是否免费:免费 | 请求方式:POST/GET | 返回格式:JSON | 适用人群:仓储/供应链工程师、WMS 开发 | 阅读时间:约 7 分钟
## TL;DR
- 扫码核验本质:取条码图 → 调 1129-2/3/4 得到 `retText` → 与 WMS 中的预期 SKU 比对。
- 三种传图方案任选:PDA 本地文件走 1129-2,摄像头服务已存公网图走 1129-3,移动端 Base64 走 1129-4。
- `ret_code` 非 0 或 `retText` 为空时按失败处理,触发重试/人工复核,不要直接入库。
## Why:入库核验为什么用识别
仓库入库环节,扫码枪/摄像头拿到的是"图",系统要的是"这个箱子对应哪个 SKU"。把图丢给 1129 识别成文字,再和采购单/WMS 预期 SKU 比对,不一致就拦截——这就是自动化核验的核心一步。
## What:核验链路
| 环节 | 动作 | 接入点 |
|----|----|----|
| 取图 | PDA/摄像头得到条码图 | — |
| 识别 | 图 → 文字 | 1129-2(文件)/ 1129-3(URL)/ 1129-4(Base64) |
| 比对 | `retText` 与 WMS 预期 SKU 比对 | 你的系统 |
| 处置 | 一致入库 / 不一致拦截 | 你的系统 |
## How:识别 + 比对伪代码(以 1129-3 为例)
Python:
```python
import requests
APPKEY = "YOUR_APPKEY"
def recognize(img_url: str) -> str | None:
r = requests.post(
f"https://route.showapi.com/1129-3?appKey={APPKEY}",
data={"imgUrl": img_url}, timeout=10,
).json().get("showapi_res_body", {})
if r.get("ret_code") != "0":
return None
return r.get("retText")
expected_sku = "6901294172197" # 来自 WMS 入库单
scanned = recognize("https://your-cdn.com/inbound/box001.png")
if scanned is None:
print("识别失败,转人工复核")
elif scanned == expected_sku:
print("核验通过,入库")
else:
print(f"SKU 不符:识别到 {scanned},预期 {expected_sku},拦截")
```
cURL:
```bash
curl -X POST "https://route.showapi.com/1129-3?appKey=YOUR_APPKEY" \
-H "content-type: application/x-www-form-urlencoded" \
-d "imgUrl=https%3A%2F%2Fyour-cdn.com%2Finbound%2Fbox001.png"
```
Node.js:
```javascript
const APPKEY = "YOUR_APPKEY";
const body = new URLSearchParams({ imgUrl: "https://your-cdn.com/inbound/box001.png" });
const res = await fetch(`https://route.showapi.com/1129-3?appKey=${APPKEY}`, {
method: "POST", headers: { "content-type": "application/x-www-form-urlencoded" }, body
});
const rb = (await res.json()).showapi_res_body;
console.log(rb.retText, rb.ret_code);
```
## 返回示例与解析
```json
{ "showapi_res_body": { "retText": "6901294172197", "ret_code": "0" } }
```
## 进阶 / 边界
- **识别失败要兜底**:`ret_code != "0"` 或 `retText` 为空即视为未识别,触发重试一次后仍失败转人工,切勿拿空值入库。
- **三种传图怎么选**:PDA 选本地文件(1129-2)、服务端已落盘公网图选 URL(1129-3)、移动端内存图选 Base64(1129-4)。详见 [三种传图对比](https://www.showapi.com/guides/barcode-three-input-modes-1129)。
- **无批量/订阅**:每次识别一次请求,高并发用异步队列削峰(见 [错误与失败排查](https://www.showapi.com/guides/barcode-error-handling-1129) 中的重试思路)。
## FAQ
**Q:识别返回的文字和条码内容不一致怎么办?**
先确认图片清晰、条码完整无遮挡;`ret_code==0` 但内容异常多为图像质量问题,建议重新采集并加一次重试。文档未枚举具体错误码,按"非 0 即失败"处理。
**Q:能直接对接扫码枪吗?**
扫码枪通常直接输出字符,无需识别接口;本接口用于"只有图片、没有字符"的场景(如摄像头/PDA 拍照)。
**Q:识别有 QPS 限制吗?**
免费接口设有使用档次限制,具体以官方档位说明为准;大批量入库建议错峰+队列。
**Q:retText 需要二次校验吗?**
需要。识别结果是"机器读到的字符",与业务 SKU 比对这道校验不可省,避免脏数据入库。
## 相关能力 / 下一步阅读
- [条码识别三种传图方式怎么选:上传图片 / 图片链接 / Base64 实战对比](https://www.showapi.com/guides/barcode-three-input-modes-1129)
- [条码生成与识别:返回字段全解(imgUrl / retText / ret_code / msg)](https://www.showapi.com/guides/barcode-response-fields-1129)
- [条码生成与识别:ret_code 非 0 与识别失败排查指南](https://www.showapi.com/guides/barcode-error-handling-1129)
- **本系列共 12 篇**:查看[条码生成与识别指南总目录](https://www.showapi.com/guides/barcode-guides-1129)