尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

uni-app APP微信登录“invalid code”终极解决方案
📅 发布时间:2026/7/23 21:11:49

📖 前言

最近在开发 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中未配置微信登录的appid或appsecret。

从 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. code与appid不匹配:生成code的appid与后端换取的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: true将appsecret保存在服务端

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

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

📎 相关资源:

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

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


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

相关新闻

  • 基于BLE/WiFi/Ethernet/4G等技术接入云平台物联网络解决方案--自连网桥/网关应用选型指南
  • 8月份去山西旅游好玩吗?五台山平遥壶口瀑布行程怎么安排?有没有适合带孩子的当地纯玩团推荐? - 实用旅游攻略分享
  • 2026年重庆潼南管道疏通避坑指南:快达师傅教你识别隐形收费 - 余生黄金回收

最新新闻

  • 从WMS批次到装配位置,追溯链怎样不断开
  • Kamailio 关于 mhomed 的讨论之续集
  • 为什么92%的AI建筑图在施工图阶段失效?——3位国家一级注册建筑师联合复盘的5个致命断层点
  • 敏感数据与云端Agent的边界战争:我的4级隐私矩阵与本地沙箱实践
  • AI Agent如何重塑程序员工作流与核心竞争力
  • 【AI流程图制作黄金法则】:20年架构师亲授5大避坑指南,90%新手第1步就错了

日新闻

  • 亨得利盐城维修点在哪里?手表维修保养地址指南**公示(2026年7月最新) - 亨得利官方
  • 提升.NET API安全性:Boxed.AspNetCore.Swagger认证授权最佳实践
  • 帝舵佛山**网点地址更新:2026年7月售后热线电话与服务客户指南 - 帝舵中国官方服务中心

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号