前言最近在开发 uni-app APP 端微信登录时遇到了一系列报错从最开始的业务参数配置缺失到40013 invalid appid再到40029 invalid code可谓是“九九八十一难”。好在最终全部解决特此记录整理成文希望能帮助遇到同样问题的开发者少走弯路。一、错误现象调用uni.login进行微信授权登录时出现以下错误之一// 错误1业务参数配置缺失 {errMsg:login:fail 业务参数配置缺失,https://ask.dcloud.net.cn/article/282,errCode:-7} // 错误2invalid appid {errcode:40013,errmsg:invalid appid} // 错误3invalid code最常见的终极问题 {errcode:40029,errmsg:invalid code, rid: xxx}二、错误原因分析2.1 错误1业务参数配置缺失 (errCode: -7)原因manifest.json中未配置微信登录的appid或appsecret。从 HBuilderX 3.4.18 开始appsecret的可视化配置已被移除需要手动在源码视图中添加。2.2 错误2invalid appid (40013)原因后端请求微信接口时使用的appid与前端的appid不一致使用了错误平台类型的appid如用了小程序的appid而非移动应用的appid2.3 错误3invalid code (40029) ⚠️最常见、最隐蔽的错误原因code被重复使用微信code是一次性的换取过一次access_token后就失效code已过期code有效期只有5 分钟code与appid不匹配生成code的appid与后端换取的appid不同接口用错App 端错误地使用了小程序的jscode2session接口⚠️ 签名不一致最常见调试基座使用的签名与微信开放平台登记的签名不一致三、终极罪魁祸首签名问题 3.1 为什么“真机调试”报错“云打包”就正常运行方式使用的证书微信登录标准基座USB真机调试HBuilder 调试证书❌ 40029自定义基座正式证书你的正式证书✅ 正常云打包/正式包你的正式证书✅ 正常核心原因微信开放平台在生成code时会校验当前 App 的包名 签名。你在微信开放平台登记的是正式证书的签名而 HBuilderX 默认调试基座使用的是调试证书二者不一致导致微信服务器认为code无效返回40029。四、完整解决方案4.1 配置manifest.jsonapp-plus: { distribute: { sdkConfigs: { oauth: { weixin: { appid: 你的微信AppID, appsecret: 你的微信AppSecret可选建议配合onlyAuthorize使用, UniversalLinks: https://your-domain.com/app/ } } } } }4.2 使用onlyAuthorize: true推荐的安全做法前端代码uni.login({ provider: weixin, onlyAuthorize: true, // 关键仅获取code不直接返回用户信息 success: (res) { console.log(获取到code:, res.code); // 将code发送给后端 uni.request({ url: https://your-server.com/api/wechat/login, method: POST, data: { code: res.code }, success: (result) { console.log(登录成功:, result.data); } }); }, fail: (err) { console.error(微信登录失败:, err); } });后端代码Node.js Expressconst APPID 你的微信AppID; const SECRET 你的微信AppSecret; app.post(/api/wechat/login, async (req, res) { const { code } req.body; // 1. 用code换取access_token const url https://api.weixin.qq.com/sns/oauth2/access_token?appid${APPID}secret${SECRET}code${code}grant_typeauthorization_code; const response await axios.get(url); if (response.data.errcode) { return res.status(400).json({ error: response.data.errmsg }); } const { access_token, openid, unionid } response.data; // 2. 获取用户详细信息可选需要scope包含snsapi_userinfo const userInfoUrl https://api.weixin.qq.com/sns/userinfo?access_token${access_token}openid${openid}; const userInfo await axios.get(userInfoUrl); // 3. 生成自定义登录态token返回给前端 res.json({ success: true, data: userInfo.data }); });4.3 ⭐ 最关键一步使用自定义基座调试制作自定义基座HBuilderX →发行→自定义基座打包选择正式证书运行到自定义基座项目右键 →运行→运行到自定义基座此后调试时 App 的签名与正式包一致微信登录正常五、完整排错清单 ✅序号检查项状态1manifest.json中配置了appid☐2使用onlyAuthorize: true安全模式☐3前端appid与后端appid完全一致☐4后端接口使用oauth2/access_token不是jscode2session☐5code在 5 分钟内发送到后端☐6同一个code只请求一次微信接口☐7微信开放平台应用已审核通过☐8已使用正式证书制作自定义基座进行调试☐9微信开放平台登记的包名/签名与打包证书一致☐六、总结微信登录的坑90% 集中在两点配置问题appid/appsecret未配置或配置错误签名问题调试环境的签名与微信开放平台登记的签名不一致最佳实践✅ 开发阶段使用自定义基座正式证书进行调试✅ 使用onlyAuthorize: true将appsecret保存在服务端✅ 由后端统一调用微信接口避免密钥泄露希望这篇文章能帮你少走弯路顺利集成微信登录功能 相关资源uni-app 官方文档 - uni.login微信开放平台 - 移动应用接入指南作者小北快快跑时间2026-07-23关键词uni-app、微信登录、40029、invalid code、自定义基座