Files
xinlong-shop-taro/.workbuddy/memory/2026-07-16.md
赵忠林 1b72ae37a5 feat(privacy): 修复微信隐私协议授权流程
- 新增全局隐私协议授权管理器 privacyManager,统一管理弹窗显示和授权结果
- 用 PrivacyModal 组件替代原先 Taro.showModal 实现,使用 open-type="agreePrivacyAuthorization" 的 Button 触发微信认可的隐私授权
- 在 app.tsx 中注册 onNeedPrivacyAuthorization 回调,通过 privacyManager.show 弹出隐私弹窗
- 登录和注册页面 useDidShow 钩子调用 ensurePrivacyAuthorized 函数预检隐私授权状态,避免授权失败
- 修复登录/注册接口调用,统一使用 request.post + SERVER_API_URL,修正错误接口地址及导入问题
- 新增隐私弹窗样式和逻辑,实现用户同意或拒绝后的正确流程处理
- 解决微信基础库 3.16.1+ 强制隐私协议授权导致敏感 API 调用失败问题
2026-07-16 01:11:54 +08:00

38 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 2026-07-16 工作记录
## 修复手机号授权登录失败
- 问题:用户点击登录页「手机号快捷登录」后,微信返回 privacy 相关错误,触发降级弹窗「未获取到手机号」。
- 原因:基础库 3.16.1+ 对敏感 APIgetPhoneNumber / chooseImage 等)强制要求隐私协议授权;项目之前直接 resolve agree可能被微信拒绝。
- 修改文件:
- `src/app.tsx`:在 `onNeedPrivacyAuthorization` 中通过 `Taro.showModal` 展示隐私协议授权弹窗,用户点击「同意」后再 `resolve({ event: 'agree', button: 'agree' })`,拒绝则 `resolve({ event: 'disagree', button: 'disagree' })`
- `src/api/system/file/index.ts`:导出 `ensurePrivacyAuthorized()` 工具函数。
- `src/passport/login.tsx`
- 页面显示时通过 `useDidShow` 预检隐私协议;
- 统一使用 `request.post` + `SERVER_API_URL` 调用 `/wx-login/loginByMpWxPhone`
- 替换原 `Taro.request` 和硬编码域名。
- `src/passport/register.tsx`
- 同样增加 `useDidShow` 隐私协议预检;
- 修复接口基址为 `SERVER_API_URL`(原代码误写 `https://shop-api.websoft.top`
- 统一使用 `request.post` 调用登录接口;
- 删除未使用的 `LoginResponse` 类型。
- `src/passport/pay/index.tsx`:修复缺失的 `@/api/passport/wx-login` 导入,改为使用 `@/api/layout` 中的 `getWxOpenId` / `loginByOpenId`
- 验证:`npx taro build --type weapp` 构建成功。
- 后续提醒:小程序后台需确认已添加「开发者收集你的手机号」隐私声明,并确保「手机号快速验证组件」能力已开通且额度充足。
## 继续修复:用户已同意隐私协议仍无法登录
- 问题:用户已在弹窗中点击「同意」,但随后仍出现「未获取到手机号」降级弹窗。
- 原因:`Taro.showModal` 的按钮不是微信认可的隐私授权触发器;基础库 3.16.1+ 要求使用 `open-type="agreePrivacyAuthorization"` 的 Button 组件。
- 修改文件:
- 新增 `src/utils/privacy.ts`:全局隐私协议授权管理器,保存 resolve 回调与弹窗显隐状态。
- 新增 `src/components/PrivacyModal/index.tsx` + `.scss`:使用原生 Button 的 `open-type="agreePrivacyAuthorization"`,用户点击后触发 `onAgreePrivacyAuthorization` 再 resolve。
- `src/app.tsx`
- 移除 `Taro.showModal` 实现;
-`onNeedPrivacyAuthorization` 中调用 `privacyManager.show(resolve)`
- 在 JSX 中渲染 `<PrivacyModal />`
- 验证:`npx taro build --type weapp` 构建成功。
- 后续提醒:
- 由于之前的 `showModal` 授权无效,用户可能需要清理开发者工具/真机缓存后重新进入小程序,才能触发新的 PrivacyModal。
- 仍需在小程序后台添加「手机号」隐私声明,并确认手机号快速验证组件已开通、额度充足。