fix(h5-shop): harden iOS WeChat scan after login with hard nav and recover UI
Root cause is JSSDK entry-URL mismatch after SPA post-OAuth, not camera permission. Hard-navigate on iOS, keep OAuth query in sign URL, skip redundant bind OAuth, and prompt refresh/re-auth on failure. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+22
-1
@@ -34,7 +34,28 @@
|
||||
- 核销记录;今日汇总;到账金额×60%展示
|
||||
- 营业状态开关;Mine 门店信息
|
||||
- 套餐:列表编辑→提交 HQ 审核(v3.4.10)
|
||||
- iOS 微信:OAuth 后自动续扫(v3.4.13)
|
||||
- iOS 微信:OAuth 后自动续扫(v3.4.13);登录后须整页跳转(见下「踩坑」)
|
||||
|
||||
### 踩坑 · iOS 微信 H5 扫码(必读,勿再回归)
|
||||
|
||||
**现象**:手机号重新登录后点「扫码核销」提示「微信权限校验尚未完成…」;关掉 H5 再进就正常。
|
||||
|
||||
**根因(不是系统相机权限)**:
|
||||
|
||||
1. iOS 微信 WebView 对 JSSDK 验签用的是**本次 document 加载的入场 URL**(含 query),不是 SPA `pushState` 之后的 `location.href`。
|
||||
2. 登录 / OAuth 回跳常落在 `/login?code=…`,再 `navigate('/')` 进首页 → 签名 URL 与微信内部入场 URL 不一致 → `permission value is offline verifying` / invalid signature。
|
||||
3. 文案「等 1~2 秒再点」只覆盖「权限离线校验偏慢」的一小部分场景;**签名错了等多久都不行**,必须整页刷新或重新授权。
|
||||
|
||||
**硬规则(编码)**:
|
||||
|
||||
| 规则 | 说明 |
|
||||
|------|------|
|
||||
| iOS 登录/选店后 | 用 `location.replace(path)`(`hardNavigateInWechat`),禁止仅 React Router navigate |
|
||||
| iOS 签名 URL | `getJssdkSignUrl()` = 入场 URL,**保留** OAuth `code/state`;后端 `jssdk-config` 勿剔除 |
|
||||
| 已绑定微信 | 短信登录后**不要**再强制 OAuth(避免反复重置入场 URL) |
|
||||
| 扫码仍失败 | 弹窗引导「刷新页面」/「重新授权微信」,勿只提示再点一次 |
|
||||
|
||||
实现:`packages/weixin-sdk/src/jssdk.ts` · `apps/h5-shop` 登录/选店/HomePage。
|
||||
|
||||
## 4. 合伙人端(h5-partner)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user