当前位置: 首页 > news >正文

uni-app APP微信登录“invalid code”终极解决方案

📖 前言

最近在开发 uni-app APP 端微信登录时,遇到了一系列报错,从最开始的业务参数配置缺失40013 invalid appid,再到40029 invalid code,可谓是“九九八十一难”。好在最终全部解决,特此记录整理成文,希望能帮助遇到同样问题的开发者少走弯路。

一、错误现象

调用uni.login进行微信授权登录时,出现以下错误之一:

// 错误1:业务参数配置缺失 {"errMsg":"login:fail 业务参数配置缺失,https://ask.dcloud.net.cn/article/282","errCode":"-7"} // 错误2:invalid appid {"errcode":40013,"errmsg":"invalid appid"} // 错误3:invalid code(最常见的终极问题) {"errcode":40029,"errmsg":"invalid code, rid: xxx"}

二、错误原因分析

2.1 错误1:业务参数配置缺失 (errCode: -7)

原因manifest.json中未配置微信登录的appidappsecret

从 HBuilderX 3.4.18+ 开始,appsecret的可视化配置已被移除,需要手动在源码视图中添加。

2.2 错误2:invalid appid (40013)

原因

  • 后端请求微信接口时使用的appid与前端的appid不一致

  • 使用了错误平台类型的appid(如用了小程序的appid而非移动应用的appid

2.3 错误3:invalid code (40029) ⚠️最常见、最隐蔽的错误

原因

  1. code被重复使用:微信code是一次性的,换取过一次access_token后就失效

  2. code已过期code有效期只有5 分钟

  3. codeappid不匹配:生成codeappid与后端换取的appid不同

  4. 接口用错:App 端错误地使用了小程序的jscode2session接口

  5. ⚠️ 签名不一致(最常见)调试基座使用的签名与微信开放平台登记的签名不一致

三、终极罪魁祸首:签名问题 🔥

3.1 为什么“真机调试”报错,“云打包”就正常?

运行方式使用的证书微信登录
标准基座(USB真机调试)HBuilder 调试证书❌ 40029
自定义基座(正式证书)你的正式证书✅ 正常
云打包/正式包你的正式证书✅ 正常

核心原因:微信开放平台在生成code时,会校验当前 App 的包名 + 签名。你在微信开放平台登记的是正式证书的签名,而 HBuilderX 默认调试基座使用的是调试证书,二者不一致,导致微信服务器认为code无效,返回40029

四、完整解决方案

4.1 配置manifest.json

"app-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 + Express)

const 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_type=authorization_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 ⭐ 最关键一步:使用自定义基座调试

  1. 制作自定义基座:HBuilderX →发行自定义基座打包,选择正式证书

  2. 运行到自定义基座:项目右键 →运行运行到自定义基座

  3. 此后调试时 App 的签名与正式包一致,微信登录正常


五、完整排错清单 ✅

序号检查项状态
1manifest.json中配置了appid
2使用onlyAuthorize: true安全模式
3前端appid与后端appid完全一致
4后端接口使用oauth2/access_token(不是jscode2session
5code在 5 分钟内发送到后端
6同一个code只请求一次微信接口
7微信开放平台应用已审核通过
8已使用正式证书制作自定义基座进行调试
9微信开放平台登记的包名/签名与打包证书一致

六、总结

微信登录的坑,90% 集中在两点:

  1. 配置问题appid/appsecret未配置或配置错误

  2. 签名问题:调试环境的签名与微信开放平台登记的签名不一致

最佳实践

  • ✅ 开发阶段使用自定义基座(正式证书)进行调试

  • ✅ 使用onlyAuthorize: trueappsecret保存在服务端

  • ✅ 由后端统一调用微信接口,避免密钥泄露

希望这篇文章能帮你少走弯路,顺利集成微信登录功能!🎉

📎 相关资源

  • uni-app 官方文档 - uni.login

  • 微信开放平台 - 移动应用接入指南


作者:小北快快跑
时间:2026-07-23
关键词:uni-app、微信登录、40029、invalid code、自定义基座

http://www.jsqmd.com/news/1250093/

相关文章:

  • linux的rename命令详解
  • 基于DSP的实时数字水印实现:从频域算法到嵌入式系统优化
  • 命令执行与代码执行
  • 中小企业Agent选型指南:核心能力与实施策略
  • TI KeyStone I DSP外设硬件设计实战:PCIe、AIF、DDR3接口配置与信号完整性避坑指南
  • 基于TMS320F28379D的双电机FOC快速电流环控制与SFRA分析实践
  • 2026年重庆潼南管道疏通避坑指南:快达师傅教你识别隐形收费 - 余生黄金回收
  • SCRM工具哪个靠谱?企微SCRM全方位测评指南|2026选型参考 - 资讯快报
  • 8月份去山西旅游好玩吗?五台山平遥壶口瀑布行程怎么安排?有没有适合带孩子的当地纯玩团推荐? - 实用旅游攻略分享
  • 【IEEE、浙江理工大学、南京信息工程大学联合主办 | IEEE出版 | 连续多届稳定EI检索 | 大咖组委嘉宾阵容 | 设评优评选】第十二届能源材料与电力工程国际学术会议 (ICEMEE 2026)
  • 智能体测开Day4
  • 抖音去水印哪个小程序好用?2026年手机免费去掉右下角水印教程 - 免费软件工具方法教程
  • 2026年7月最新百达翡丽上海临港海港中心万象汇维修保养服务电话 - 百达翡丽官方售后中心
  • 宇视VM新BS拼控轮巡配置指导(B3359)
  • AM6x MPU GPIO配置实战:从硬件架构到电机控制与传感器采集
  • 相机-雷达标定(一):禾赛 QT128C2X 雷达点云采集程序封装说明
  • 2026 年至今,桂东可靠的无机纤维棉喷涂施工定做厂家找哪家,别再用传统材料!揭秘无机纤维棉喷涂的惊人效率-祥实无机纤维喷涂 - 行业严选官
  • 2026金华防水补漏维修公司口碑实测推荐 专业防水公司排名推荐(2026年7月防水补漏最新TOP权威排名) - 鼎万建筑修缮
  • 制造业如何通过DeepSeek推广获客?哪家公司可以做DeepSeek推广广告? - 2027品牌AI展
  • KeyStone I处理器电源完整性设计:滤波与去耦电容实战指南
  • 融资平台引导_finta-hello-world
  • 【2019-12-21】可信执行环境TEE介绍
  • OpenCvSharp读取、显示和写入图像
  • 抖音小店一件代发如何找蓝海商品?新手选品和类目竞争分析方法 - 电商分享
  • day7
  • 2026 抖音去水印工具怎么选?实测这几款解析快又合规 - 免费软件工具方法教程
  • 深圳猎头公司收费标准大揭秘:2026深圳企业HRD与CFO必备招聘手册
  • 有没有一键转换智谱清言到 Word 的工具?AI 导出鸭一站式完成智谱清言内容转 Word,高效省心
  • 2026金华漏水维修公司严选推荐盘点 - 鼎万建筑修缮
  • AI大模型开发学习路线:从Python基础到多模态实战