到站码核验
用户到站后,健康站设备扫描用户 App 上展示的到站码, 完成身份确认并开始检测。核验流程支持两种模式:到站码直接核验和扫码授权会话。
核验流程
模式一:到站码直接核验(推荐)
- 用户打开 App,进入「我的预约」展示到站码(6 位字母数字,动态刷新)
- 健康站设备扫描到站码,调用「核验到站码」接口
- 接口验证成功后,返回用户基本信息和本次检测项目
- 检测开始,设备数据上报
模式二:健康站扫码授权会话
- 健康站设备生成授权二维码,调用「创建扫码会话」接口获取
session_id - 用户用 App 扫描二维码,同意授权
- 设备轮询「查询会话状态」,确认用户已授权后开始检测
核验到站码
POST/api/v1/health-station/verify-code
健康站设备扫描用户 App 上的到站码后调用此接口。 需携带设备侧鉴权头(X-App-Id + X-Signature)。
请求体:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
code | string | 是 | 用户 App 展示的到站码(6 位字母数字) |
points_code | string | 是 | 当前健康站编码,用于校验用户预约是否归属此站 |
成功响应(200 OK):
{
"success": true,
"code": 0,
"data": {
"user_id": 10086,
"member_name": "张三",
"member_gender": "male",
"member_birth_date": "1985-06-15",
"appointment_no": "APT202604010001",
"check_items": ["血压", "血氧", "心率", "体成分"]
}
}创建扫码会话
POST/api/v1/health-station/create-session
健康站设备在展示二维码前调用,获取一个临时 session_id。 二维码内容为包含 session_id 的深链接,用户 App 扫码后完成授权。
响应:
{
"success": true,
"code": 0,
"data": {
"session_id": "ses_xxxxxxxxxxxxxxxx",
"qr_content": "xiaobao://station/auth?sid=ses_xxxxxxxxxxxxxxxx",
"expires_at": "2026-04-01T10:05:00+08:00"
}
}查询会话状态
GET/api/v1/health-station/session-status
查询参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
session_id | string | 是 | 创建会话时返回的 session_id |
建议设备每 2 秒轮询一次,状态变为 authorized 后停止轮询并开始检测。 超时(默认 5 分钟)后状态变为 expired,需重新创建会话。
| status 值 | 含义 |
|---|---|
pending | 等待用户扫码授权 |
authorized | 用户已授权,可开始检测 |
cancelled | 用户主动取消 |
expired | 会话超时,需重新创建 |
取消会话
POST/api/v1/health-station/cancel-session
设备侧主动取消会话(如用户离开、超时前主动清理)。传 { "session_id": "..." } 即可。
异常处理
| 场景 | 错误码 | 处理建议 |
|---|---|---|
| 到站码无效或已使用 | CHECKIN_CODE_INVALID(422) | 提示用户在 App 内刷新到站码后重试 |
| 预约不属于当前健康站 | CHECKIN_STATION_MISMATCH(422) | 确认用户是否预约了正确的健康站 |
| 预约已过期或已取消 | APPOINTMENT_NOT_VALID(422) | 引导用户重新预约 |
| 会话已过期 | SESSION_EXPIRED(410) | 调用创建会话接口重新生成二维码 |