在拍照机客户端本机触发一次拍摄。调用效果与拍摄页操作一致:先填入货号,再按左脚或右脚启动对应拍摄程序。
接口会等待这只脚的程序执行结束再返回。成功只表示程序已跑完,响应里不包含图片文件或 base64。照片仍按客户端原有流程落盘。
运行环境: 拍照机客户端(Electron)已启动。接口跑在客户端内部,调用方访问本机 localhost。
http://localhost:3001/take_photoPOSTapplication/jsonPOST /take_photo
同一端口上的 POST /generate 仍是图片生成接口,互不影响。同一时间只能有一个拍照请求在执行。
{
"goods_art_no": "A596351",
"foot": "left"
}
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| goods_art_no | string | 是 | 货号。也可用字段名 货号 或 goodsArtNo |
| foot | string | 是 | 左右脚。也可用字段名 左右脚、side、type |
foot 取值:
| 传值 | 实际动作 |
|---|---|
left、l、0、左、左脚 |
执行左脚程序 |
right、r、1、右、右脚 |
执行右脚程序 |
货号前后空格会被去掉。未识别的左右脚会直接失败。
业务结果看 JSON 里的 code。code 不为 0 时,HTTP 状态码为 500,响应体仍是 JSON。
HTTP 状态码: 200
{
"code": 0,
"msg": "货号:A596351,执行完成",
"data": {
"goods_art_no": "A596351",
"foot": "left",
"action": "执行左脚程序"
}
}
| 字段 | 类型 | 说明 |
|---|---|---|
| code | number | 0 表示这只脚的拍摄程序已执行完成 |
| msg | string | 设备返回的完成说明 |
| data.goods_art_no | string | 本次货号 |
| data.foot | string | left 或 right |
| data.action | string | 执行左脚程序 或 执行右脚程序 |
HTTP 状态码: 500
{
"code": 1,
"msg": "货号不能为空"
}
参数错误、设备忙、拍摄失败都是这个结构。已经开始拍摄后失败时,可能带上 data(货号、左右脚、动作名)。
常见 msg:
| msg | 说明 |
|---|---|
| 货号不能为空 | 未传货号 |
| 左右脚不能为空,请传 left/right 或 左/右 | 未传或无法识别左右脚 |
| 拍摄程序正在运行,请稍候 | 已有拍摄在进行,不要并发调用 |
| 拍照接口仅在客户端内可用 | 客户端未启动,或不是在客户端里访问 |
| 设备服务未连接 | 8 秒内连不上本机拍摄服务 |
| mcu设备未连接,请先连接设备 | 拍摄开始前 MCU 未连接 |
| MCU 连接失败 / MCU串口未连接,请检查 | 拍摄过程中 MCU 断开,接口立即返回失败 |
| 请检查相机是否连接 / 相机未连接 | 拍摄过程中相机断开或相机软件未打开,接口立即返回失败 |
| mcu设备未初始化 | 设备未完成初始化 |
| 当前有未完成的任务,请稍后再试 | 设备上还有未结束的动作 |
| 货号[xxx]已存在,请勿重复拍摄~ | 该货号已有拍摄记录,需先在客户端删除后再拍 |
| 当前没有可用配置 | 对应左脚或右脚没有可用拍摄配置 |
| 拍照超时 | 超过 10 分钟仍未结束 |
msg 还可能是设备返回的具体步骤失败原因,以实际返回为准。
| HTTP 状态码 | 说明 | 响应体 |
|---|---|---|
| 404 | 路径或方法不对 | Not Found(纯文本) |
| 413 | 请求体过大 | Payload Too Large(纯文本) |
左脚:
curl -X POST http://localhost:3001/take_photo \
-H "Content-Type: application/json" \
-d "{\"goods_art_no\":\"A596351\",\"foot\":\"left\"}"
右脚(中文字段):
curl -X POST http://localhost:3001/take_photo \
-H "Content-Type: application/json" \
-d "{\"货号\":\"A596351\",\"左右脚\":\"右\"}"
请把调用超时调到 10 分钟以上。curl 可加 --max-time 600。
import requests
url = "http://localhost:3001/take_photo"
payload = {
"goods_art_no": "A596351",
"foot": "left", # 右脚传 "right"
}
# 失败时 HTTP 状态码是 500,但仍返回 JSON,不要用 raise_for_status() 丢掉响应体
response = requests.post(url, json=payload, timeout=600)
result = response.json()
if result.get("code") == 0:
print("拍摄完成:", result.get("msg"))
print(result.get("data"))
else:
print("拍摄失败:", result.get("msg"))
const response = await fetch("http://localhost:3001/take_photo", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
goods_art_no: "A596351",
foot: "right",
}),
});
const result = await response.json();
if (result.code === 0) {
console.log("拍摄完成", result.data);
} else {
console.error("拍摄失败", result.msg);
}
http://localhost:3001。拍摄页处于打开状态时,输入框会显示本次货号,界面进入与点击左右脚相同的拍摄状态。
code 判断成败。code === 0 为成功,其余为失败。msg 为终止说明。