本文聚焦终端用户在扫码页(即通过二维码 URL 访问的 H5或小程序页面)所需的开放接口,方便前端快速集成展示、补充信息及安全校验。
/api/api/qr/api/person、/api/pet/api/scanhasRole(UserRole.ADMIN) 的后台接口未在本文档描述Content-Type: application/jsonperson(人员)、pet(宠物/物品),来自 QrType 枚举qrCode 参数| 接口 | 方法 | 路径 | 作用 | 说明 |
|---|---|---|---|---|
| 获取二维码信息 | GET | /api/qr/info |
查询二维码及绑定数据,并自动记录一次扫描 | 最常用;返回 qrType 与 info |
| 验证维护码 | POST | /api/qr/verify |
校验用户输入的维护码 | 通过后才允许调用更新接口 |
| 补充扫描记录 | POST | /api/scan/create |
保存带经纬度/地址的扫描记录 | 可追加精确定位 |
| 最近扫描记录 | GET | /api/scan/recent |
查询某二维码最近 N 次扫描 | 可用于展示访客列表 |
| 获取人员信息 | GET | /api/person/get |
直接返回人员信息实体 | 作为 qr/info 的兜底 |
| 获取宠物信息 | GET | /api/pet/get |
直接返回宠物/物品信息实体 | 作为 qr/info 的兜底 |
GET /api/qr/infoqrCode *(string, required)*:二维码编号qrCode,缺失返回 400成功响应示例:
{
"id": 12,
"qrCode": "QR2025ABC...",
"qrType": "person",
"isActivated": true,
"scanCount": 42,
"info": {
"id": 8,
"qrCodeId": 12,
"photoUrl": "https://...",
"name": "张三",
"gender": "male",
"phone": "13800000000",
"specialNote": "有心脏病",
"emergencyContactName": "李四",
"emergencyContactPhone": "13900000000",
"remark": "..."
}
}
错误响应:
{ "message": "请提供二维码参数" }{ "message": "获取信息失败" }POST /api/qr/verify请求体:
{
"qrCode": "QR2025ABC...",
"maintenanceCode": "AB12CD34"
}
说明:
{ "message": "验证成功", "valid": true }{ "message": "维护码错误" }{ "message": "验证失败" }后续操作:前端可在成功后提交人员或宠物信息更新:
PUT /api/person/updatePUT /api/pet/updateqrCode 与 maintenanceCode,字段约束参考对应 DTOPOST /api/scan/create请求体(各字段均为可选,除 qrCode 必填):
{
"qrCode": "QR2025ABC...",
"latitude": 31.2304,
"longitude": 121.4737,
"address": "上海市黄浦区XX路XXX号",
"ipAddress": "手动覆盖 IP",
"userAgent": "自定义 UA"
}
处理逻辑:
ipAddress / userAgent,自动回退为请求源信息scanCount响应:201 { "message": "扫描记录创建成功", "data": { ...scanRecord } }
常见错误:
{ "message": "创建失败" }(参数校验不通过或二维码不存在)GET /api/scan/recentqrCode (string, required)limit *(number, optional, default=10)*:返回最近 N 条响应:
{
"qrCode": "QR2025ABC...",
"count": 5,
"records": [
{
"id": 1001,
"scanTime": "2025-11-28T02:12:11.123Z",
"latitude": 31.2304,
"longitude": 121.4737,
"address": "上海市...",
"ipAddress": "1.2.3.4",
"userAgent": "Mozilla/5.0 ..."
}
]
}
错误:缺参返回 400,查询异常返回 500
GET /api/person/get?qrCode=...GET /api/pet/get?qrCode=...qrType 分别渲染或在 /api/qr/info 出错时兜底查询{ "message": "人员信息不存在" } / { "message": "宠物/物品信息不存在" }| 状态码 | 说明 | 常见场景 |
|---|---|---|
| 200 | OK | 查询或验证成功 |
| 201 | Created | 扫描记录创建成功 |
| 400 | Bad Request | 缺失参数 / DTO 校验失败 |
| 401 | Unauthorized | 维护码错误 |
| 404 | Not Found | 未配置人员/宠物资料 |
| 500 | Internal Server Error | 未知异常 |
qrCode 大小写敏感,需与生成规则一致(QR 前缀 + 时间戳 + 随机串)/documentation, dev 环境)中查阅其它 API