From 809e2a1b40282c5723fc9d3b6f7e2e53788194de Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Fri, 12 Jun 2026 20:55:12 +0800 Subject: [PATCH] =?UTF-8?q?changelog(v2):=20=E5=8F=B8=E6=9C=BAH5=E5=B7=B2?= =?UTF-8?q?=E5=8F=91=E6=94=BE=E9=93=BE=E6=8E=A5=E7=AE=A1=E7=90=865?= =?UTF-8?q?=E7=AB=AF=E7=82=B9+H5=20init=E7=8A=B6=E6=80=81=E6=9C=BA4?= =?UTF-8?q?=E5=AD=97=E6=AE=B5+=E9=93=BE=E6=8E=A5URL=E6=94=B6=E5=8F=A3=20(P?= =?UTF-8?q?R=20#3777/#3778)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- ...‘放链接管ç†5端点-新增接å£-管ç†åŽå°ä¸Žå¸æœºH5.md | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 changelogs-v2/2026-06/12_3777_叿œºH5已呿”¾é“¾æŽ¥ç®¡ç†5端点-新增接å£-管ç†åŽå°ä¸Žå¸æœºH5.md diff --git a/changelogs-v2/2026-06/12_3777_叿œºH5已呿”¾é“¾æŽ¥ç®¡ç†5端点-新增接å£-管ç†åŽå°ä¸Žå¸æœºH5.md b/changelogs-v2/2026-06/12_3777_叿œºH5已呿”¾é“¾æŽ¥ç®¡ç†5端点-新增接å£-管ç†åŽå°ä¸Žå¸æœºH5.md new file mode 100644 index 0000000..e298572 --- /dev/null +++ b/changelogs-v2/2026-06/12_3777_叿œºH5已呿”¾é“¾æŽ¥ç®¡ç†5端点-新增接å£-管ç†åŽå°ä¸Žå¸æœºH5.md @@ -0,0 +1,93 @@ +# ã€æ–°å¢žæŽ¥å£Â·ç®¡ç†åŽå°+叿œºH5ã€‘å¸æœºè‡ªåŠ© H5ã€Œå·²å‘æ”¾é“¾æŽ¥ç®¡ç†ã€5 端点——列表/导出/作废/é‡å‘短信/釿–°ç”Ÿæˆ + +> æœåŠ¡:hl-fleet-service(8087/8187) + hl-user-service(8081/8181) | 分支:dev-v3 | PR:#3777+#3778(è¡¥ä¸) | å·¥å•:#3775 | 已部署测试æœå¹¶ 13 项 E2E 实测通过(2026-06-12) +> 背景:API §4.6 æ­¤å‰æœªå®žçŽ°â€”â€”è½¦ç®¡å‘出去的 H5 录入链接看ä¸åˆ°ã€ä¸èƒ½ä½œåºŸã€ä¸èƒ½é‡å‘。本次补é½å®Œæ•´ç”Ÿå‘½å‘¨æœŸç®¡ç†,åŒæ—¶æŠŠé“¾æŽ¥ URL æ”¶å£ Nacosã€H5 init è¡¥çŠ¶æ€æœºå‡ºå‚。 +> 对应原型:车管控制å°ã€Œé“¾æŽ¥ç®¡ç†ã€é¡µã€‚ + +## âš ï¸ å…³é”®è¯´æ˜Ž(å‰ç«¯åŠ¨ä½œ) + +1. **管ç†åŽå°æ–°å¢žã€Œå·²å‘放链接管ç†ã€é¡µé¢**(5 个新端点,è§ Â§1-§5),路径å‰ç¼€ `/admin/fleet/h5/tokens`。 +2. **链接格å¼å˜äº†**:所有生æˆçš„ H5 链接统一为 `https://hr.1814.love/driver-intake?t={token}`(傿•°å **`?t=`**,与短信模æ¿ä¸€è‡´;åŽŸç¡¬ç¼–ç  `h5.hl-fleet.com/onboard?token=` 作废)。**H5 å‰ç«¯ä»Žé¡µé¢ URL 读 `t` 傿•°**åŽè°ƒ init。 +3. **H5 init(`GET /app/h5/driver-onboard/init`)å‡ºå‚æ–°å¢ž 4 字段**(叿œº H5 需按 `tokenState` 渲染失效文案,è§ Â§6)。 +4. **§4.1 生æˆé“¾æŽ¥å‡ºå‚新增 `pendingId`**(åŽç»­ä½œåºŸ/é‡å‘/釿–°ç”Ÿæˆéƒ½ä»¥ pendingId 为æ“作键)。 +5. **测试æœå…¬ç½‘å·²å¯ç›´è¾¾ H5 接å£**:nginx 已补 `/app/` 代ç†(æ­¤å‰ `/app/h5/*` ç» 9443 会è½åˆ° SPA 页é¢)。 +6. **已知外部阻塞(ä¸å½±å“接å£è”è°ƒ)**:é‡å‘短信链路已全通(事件→通知中心→阿里云真实调用,send_log è½æ¡£),ä½†é˜¿é‡Œäº‘æ¨¡æ¿ SMS_507390235 çš„ token å˜é‡ç±»åž‹(é“¾æŽ¥å‚æ•°)容ä¸ä¸‹ 32 ä½ token 被拒å‘——**需 wx 在阿里云控制å°è°ƒæ•´æ¨¡æ¿å˜é‡è§„范åŽè¿‡å®¡**,代ç ä¾§é›¶æ”¹åŠ¨ã€‚name 为空拒å‘å·²åŽç«¯å…œåº•(空→「师傅ã€)。 +7. 60 秒内对åŒä¸€é“¾æŽ¥é‡å¤ç‚¹ã€Œé‡å‘ã€:接å£è¿”回æˆåŠŸä½†é€šçŸ¥ä¸­å¿ƒå¹‚ç­‰æ‹’å‘第二æ¡(防轰炸),属预期。 + +## 1. 已呿”¾é“¾æŽ¥åˆ—表(分页) + +`GET /admin/fleet/h5/tokens?mode=&status=&keyword=&page=1&pageSize=20` + +| å…¥å‚ | å¿…å¡« | 说明 | +|---|---|---| +| mode | å¦ | new=æ–°æ‹› / renew=ç»­ç­¾ | +| status | å¦ | 派生 6 æ€:`VOIDED`已作废/`APPROVED`已通过/`REJECTED`已驳回/`SUBMITTED`å·²æäº¤/`EXPIRED`已过期/`VALID_UNSUBMITTED`有效·未æäº¤ | +| keyword | å¦ | æ¨¡ç³ŠåŒ¹é… å§“å OR token(**䏿”¯æŒæ‰‹æœºå·**——加密存储无法模糊) | + +实测出å‚(行): + +```json +{ + "pendingId": "2065414570750455809", // æ“作键(字符串防精度丢失) + "mode": "new", "modeLabel": "æ–°æ‹›", + "token": "182ee9dd884e46d8a628bb98a5695252", + "name": "", "phone": null, // 手机脱æ•返回(138****2345),未填为 null + "createTime": "2026-06-12T20:45:29", "expireAt": "2026-06-19T20:45:29", + "submittedAt": null, "reviewStatus": "pending", + "status": "VALID_UNSUBMITTED", "statusLabel": "有效·未æäº¤", + "url": "https://hr.1814.love/driver-intake?t=182ee9dd884e46d8a628bb98a5695252" // 直接å¤åˆ¶å‘叿œº +} +``` + +## 2. 导出 CSV + +`GET /admin/fleet/h5/tokens/export?mode=&status=&keyword=`(åŒæ¡ä»¶,ä¸åˆ†é¡µ) + +返回 `text/csv;charset=UTF-8` 文件æµ(带 UTF-8 BOM,Excel ç›´å¼€ä¸ä¹±ç ),列:`类型,token,å§“å,手机(脱æ•),ç”Ÿæˆæ—¶é—´,有效期至,状æ€,审核状æ€`,文件å `h5_tokens_{时间戳}.csv`。å‰ç«¯ blob 下载å³å¯ã€‚ + +## 3. 作废链接 + +`POST /admin/fleet/h5/tokens/{pendingId}/void` body(å¯é€‰):`{ "reason": "叿œºä¿¡æ¯æœ‰è¯¯" }` + +- 仅「已通过ã€ä¸å¯ä½œåºŸ(**600304**);其余状æ€(å«å·²é©³å›ž/å·²æäº¤)å‡å¯ä½œåºŸ;é‡å¤ä½œåºŸå¹‚等返回æˆåŠŸ +- 作废åŽå¸æœºç«¯ç«‹å³å¤±æ•ˆ:H5 init è¿” `tokenState=voided`ã€æäº¤/OCR 被 600304 硬拦(实测è”动通过) + +## 4. é‡å‘短信 + +`POST /admin/fleet/h5/tokens/{pendingId}/resend` body(å¯é€‰):`{ "phone": "13808612345" }`(覆盖收件å·,ç”Ÿæˆæ—¶æ²¡å¡«æ‰‹æœºçš„链接由此补) + +- 仅「有效·未æäº¤ã€ã€Œå·²é©³å›žã€å¯é‡å‘,å¦åˆ™ **600308**;å…¥å‚与档案手机å·å‡ç©º → **600307** +- **ä¸åˆ·æ–°æœ‰æ•ˆæœŸ**(è¦å»¶é•¿èµ°é‡æ–°ç”Ÿæˆ) +- 出å‚ä»… `{ "maskedPhone": "138****2345" }`——短信异步å‘出,**æŽ¥å£æˆåŠŸâ‰ çŸ­ä¿¡å·²åˆ°**,到达结果看通知中心å‘逿—¥å¿— + +## 5. 釿–°ç”Ÿæˆ + +`POST /admin/fleet/h5/tokens/{pendingId}/regenerate`(æ—  body) + +- 「已æäº¤ã€ã€Œå·²é€šè¿‡ã€ä¸å¯é‡æ–°ç”Ÿæˆ(**600309**);å…¶ä½™(å«å·²è¿‡æœŸ/已作废)å¯ +- 旧链接自动作废(审计留痕),返回**全新** pendingId/token/url/expireAt/qrCodeUrl(出å‚åŒ Â§4.1 生æˆ) +- **新链接ä¸è‡ªåЍå‘短信**——车管å¤åˆ¶ url 或对新 pendingId 点é‡å‘ + +## 6. 叿œº H5 init å‡ºå‚æ–°å¢ž 4 字段(H5 å‰ç«¯) + +`GET /app/h5/driver-onboard/init?token=` + +| 字段 | 说明 | +|---|---| +| tokenState | `fresh`首次å¯å¡«/`editable`å·²æäº¤å¾…审å¯è¦†ç›–釿/`rejected_editable`å·²é©³å›žå¯æ”¹é‡æ/`expired`已过期/`voided`已作废/`consumed`已通过(终æ€)/`invalid`无效 | +| reviewStatus | pending / approved / rejected | +| rejectReason | 驳回原因(é©³å›žç›¸å…³æ€æ‰æœ‰å€¼,æŒ‡å¯¼å¸æœºæ”¹å“ª) | +| lastSubmittedAt | 上次æäº¤æ—¶é—´(å·²æäº¤è¿‡æ‰æœ‰å€¼) | + +- `tokenValid` ä¿ç•™å‘åŽå…¼å®¹(= tokenState ∈ fresh/editable/rejected_editable);**修了一个旧 bug**:审核通过åŽå¸æœºå†æ‰“å¼€,旧实现误返 tokenValid=true(填完 8 æ­¥æäº¤æ‰è¢«æ‹¦),现在 init å³è¿” false + `consumed` +- H5 请按 tokenState 渲染失效文案(已作废/已过期/已通过 区分展示) + +## 7. 错误ç é€Ÿè§ˆ + +| code | message | +|---|---| +| 600304 | 链接已作废(作废åŽçš„ H5 æäº¤/OCR 也返此ç ) | +| 600307 | æ— å¯ç”¨æ‰‹æœºå· | +| 600308 | 仅有效未æäº¤æˆ–已驳回的链接å¯é‡å‘ | +| 600309 | å·²æäº¤æˆ–已通过的链接ä¸å¯é‡æ–°ç”Ÿæˆ | +| 600402 | 待审核记录ä¸å­˜åœ¨ |