# 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 中渲染 ``。 - 验证:`npx taro build --type weapp` 构建成功。 - 后续提醒: - 由于之前的 `showModal` 授权无效,用户可能需要清理开发者工具/真机缓存后重新进入小程序,才能触发新的 PrivacyModal。 - 仍需在小程序后台添加「手机号」隐私声明,并确认手机号快速验证组件已开通、额度充足。