每个商户对应一个手机号账号 + 一个商户名。流程:
POST /api/account/register,传商户名(groupid/poi_id 留空)POST /api/protocol/login,传手机号 + 验证码 + account=商户名sessions/商户名.json,登录成功自动抓取 groupid/poi_id 回写配置account 传商户名,自动用该商户的会话 + 门店每个商户独立会话、独立门店上下文,互不影响。多商户并发无冲突。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| phone | string | 是 | 手机号 |
| code | string | 否 | 4 位验证码;不传=只发验证码 |
| account | string | 否 | 商户名(多商户必传):独立会话 + 自动匹配 groupid/poi_id |
| resend | bool | 否 | 强制重发验证码(覆盖旧码) |
① 发送验证码
curl -X POST https://hx.gxv.red/api/protocol/login \
-H "Content-Type: application/json" \
-d '{"phone":"17696265267"}'
响应:{"ok":false,"need_code":true,"message":"验证码已发送"}
② 登录(成功后自动抓 groupid/poi_id)
curl -X POST https://hx.gxv.red/api/protocol/login \
-H "Content-Type: application/json" \
-d '{"phone":"17696265267","code":"1234","account":"像素创意手作DIY"}'
响应:{"ok":true,"context":{"groupid":"...","poi_id":"...","ok":true,"match_warning":"",...},...}
⚠ 若 match_warning 非空(如"未找到商户 [xx], 可选商户: A/B/C"或"当前登录账号未绑定任何商户"),说明登录手机号下没有该商户,需用绑定该商户的手机号登录。
请求:{"account":"像素创意手作DIY"}(account 可空)
响应:{"ok":true,"context":{"groupid":"...","poi_id":"...","poi_name":"..."}}
前提:已登录且有已认领门店(poi_id)。secsdk CSRF token 缓存 23h,单请求毫秒级。
请求参数:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| account | string | 是 | 商户名(必须是已登录且有门店的商户) |
| code | string | 是 | 券码(纯数字,自动去空格) |
| verify_type | int | 否 | 1=券码(默认);0=扫码(scan_context) |
请求示例:
curl -X POST https://hx.gxv.red/api/protocol/voucher/check \
-H "Content-Type: application/json" \
-d '{"account":"像素创意手作DIY","code":"123206286558914"}'
成功响应:
{
"ok": true, "code": "123206286558914", "message": "验券成功",
"product": "DIY拼豆 手工钥匙扣制作 钥匙链拼豆团购",
"price": "9.0", "discount": "4.5折后价",
"expire_time": 1817135999, "poi_name": "像素创意手作DIY",
"verify_token": "63c8d445-...", "verify_scene_type": 8,
"encrypted_codes": ["CgYIASAHKAESLgos..."],
"raw": { ...完整响应... }
}
verify_token + encrypted_codes 可缓存,供核销接口直用(避免二次验券)。
请求参数:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| account | string | 是 | 商户名 |
| code | string | 是 | 券码 |
| verify_token | string | 否 | 验券返回的 token(传了则直销,不传自动先验后销) |
| encrypted_codes | array | 否 | 验券返回的加密券码列表 |
| verify_scene_type | int | 否 | 验券返回的场景类型(默认 8) |
方式 1:只传券码(自动先验后销)
curl -X POST https://hx.gxv.red/api/protocol/voucher/confirm \
-H "Content-Type: application/json" \
-d '{"account":"像素创意手作DIY","code":"123206286558914"}'
方式 2:传验券缓存的 token(直销,最快)
curl -X POST https://hx.gxv.red/api/protocol/voucher/confirm \
-H "Content-Type: application/json" \
-d '{"account":"像素创意手作DIY","code":"...",
"verify_token":"63c8d445-...",
"encrypted_codes":["CgYIASAHKAESLgos..."],
"verify_scene_type":8}'
成功响应:
{
"ok": true, "code": "123206286558914", "message": "核销成功",
"certificate_id": "7670698934625452073",
"order_id": "1110623717282294871",
"item_order_id": "800000253488677610113364871",
"product": "DIY拼豆 手工钥匙扣制作 钥匙链拼豆团购",
"poi_name": "像素创意手作DIY", "can_cancel": true,
"raw": {...}
}
请求:{"account":"像素创意手作DIY","verify_id":"7670698934625452073","certificate_id":"..."}
响应:{"ok":true,"message":"","status_code":0,"raw":{...}}
| 接口 | 方法 | 说明 |
|---|---|---|
| /api/account/list | GET | 账号列表 + groupid/poi_id + 会话状态 |
| /api/account/register | POST | 注册账号,groupid/poi_id 可留空(登录后自动抓){"name":"店铺B","groupid":"","poi_id":""} |
| /api/account/login | POST | 验证码登录(独立会话文件){"name":"店铺B","phone":"...","code":"1234"} |
| /api/account/refresh-context | POST | 刷新某账号 groupid/poi_id{"name":"店铺B"} |
| 错误 | 含义 | 处理 |
|---|---|---|
| 4000200 账户鉴权失败 | 商家上下文缺失/会话失效 | 重新登录该商户(account 传商户名) |
| "未找到商户 [xx], 可选商户: ..." | account 名与登录账号下商户不匹配 | 用候选列表里的名字,或用绑定该商户的手机号登录 |
| "当前登录账号未绑定任何商户" | 登录手机号名下 groupAccountList 为空 | 该手机号没有绑定商户,换账号 |
| "未找到已认领门店" | 商户未认领 poi | 先在抖音来客后台认领门店 |
| 1208 券码已核销 | 该券已被核销 | 换券;或 1 小时内可撤销恢复 |
| 1202 验证码错误 / 1203 过期 | 验证码错/超时 | 重新发送验证码 |
| 1206 发送太频繁 | 短信限流 | 等 1-5 分钟 |
| 1105 滑块验证 | 触发风控 | 纯协议下更换设备指纹(重新登录即可) |
| 要点 | 说明 |
|---|---|
| 登录链路 | ttwid → send_activation_code → quick_login → SSO callback |
| 403 解锁 | HEAD /life/gate/v1/user/detail + x-secsdk-csrf-request:1 → x-ware-csrf-token |
| 商家上下文 | URL query: root_life_account_id + life_biz_view_id=22 + life_account_biz_ids |
| 验券 | POST /life/fulfilment/v1/check_verify_permission_v2/ |
| 核销 | POST /life/fulfilment/v1/verify/ |
| 撤销 | POST /life/fulfilment/v1/cancel_verify/ |