- 新增全局隐私协议授权管理器 privacyManager,统一管理弹窗显示和授权结果 - 用 PrivacyModal 组件替代原先 Taro.showModal 实现,使用 open-type="agreePrivacyAuthorization" 的 Button 触发微信认可的隐私授权 - 在 app.tsx 中注册 onNeedPrivacyAuthorization 回调,通过 privacyManager.show 弹出隐私弹窗 - 登录和注册页面 useDidShow 钩子调用 ensurePrivacyAuthorized 函数预检隐私授权状态,避免授权失败 - 修复登录/注册接口调用,统一使用 request.post + SERVER_API_URL,修正错误接口地址及导入问题 - 新增隐私弹窗样式和逻辑,实现用户同意或拒绝后的正确流程处理 - 解决微信基础库 3.16.1+ 强制隐私协议授权导致敏感 API 调用失败问题
2.8 KiB
2.8 KiB
2026-07-16 工作记录
修复手机号授权登录失败
- 问题:用户点击登录页「手机号快捷登录」后,微信返回 privacy 相关错误,触发降级弹窗「未获取到手机号」。
- 原因:基础库 3.16.1+ 对敏感 API(getPhoneNumber / 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。 - 仍需在小程序后台添加「手机号」隐私声明,并确认手机号快速验证组件已开通、额度充足。
- 由于之前的