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

2.8 KiB
Raw Blame History

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。
    • 仍需在小程序后台添加「手机号」隐私声明,并确认手机号快速验证组件已开通、额度充足。