# 小程序二维码生成问题排查指南 ## 常见错误及解决方案 ### 错误1: errcode 40001 - invalid credential, access_token is invalid **错误信息**: ```json { "errcode": 40001, "errmsg": "invalid credential, access_token is invalid or not latest" } ``` **可能原因**: 1. AppID 或 AppSecret 配置错误 2. 缓存的 AccessToken 已失效 3. 小程序未发布或已被封禁 **解决方案**: #### 步骤1: 验证小程序配置 ```sql -- 查询数据库中的小程序配置 SELECT * FROM la_config WHERE type = 'mnp_setting'; ``` 检查配置项: - `app_id`: 小程序AppID(必须正确) - `app_secret`: 小程序AppSecret(必须正确) #### 步骤2: 清除缓存 ```php // 在PHP中执行或通过后台清除缓存 $appId = 'your_app_id'; cache('wx_access_token_' . $appId, null); ``` 或者直接删除缓存文件: ```bash # 删除runtime缓存 rm -rf server/runtime/cache/* ``` #### 步骤3: 手动测试获取AccessToken 创建测试文件 `server/test_access_token.php`: ```php 开发管理 -> 开发设置 3. 确认AppID和AppSecret是否正确 4. 如果AppSecret泄露,需要重置并更新配置 ### 错误2: errcode 40013 - invalid appid **错误信息**: ```json { "errcode": 40013, "errmsg": "invalid appid" } ``` **原因**: AppID格式错误或不存在 **解决方案**: - 检查AppID是否包含多余的空格 - 确认AppID是小程序的,不是公众号的 - AppID格式应为:wx开头的18位字符 ### 错误3: errcode 41001 - access_token missing **原因**: AccessToken未传递或为空 **解决方案**: - 检查 `getWxAccessToken()` 方法是否正确返回 - 查看日志确认AccessToken获取流程 ### 错误4: errcode 45009 - api minute-quota reach limit **原因**: 接口调用频率超限 **解决方案**: - 等待1分钟后重试 - 优化代码,避免频繁调用 - 使用缓存机制 ## 调试步骤 ### 1. 查看日志 日志文件位置:`server/runtime/log/` 查看最新日志: ```bash tail -f server/runtime/log/$(date +%Y%m%d).log ``` 关键日志信息: - `开始生成小程序码` - 记录请求参数 - `微信AccessToken响应` - AccessToken获取结果 - `调用微信API生成小程序码` - 发送给微信的数据 - `小程序码生成成功` - 成功生成的URL ### 2. 检查网络连接 测试服务器是否能访问微信API: ```bash curl -I https://api.weixin.qq.com ``` 应该返回 200 状态码。 ### 3. 检查目录权限 确保uploads目录可写: ```bash chmod -R 755 server/public/uploads chown -R www-data:www-data server/public/uploads ``` ### 4. 检查小程序页面路径 确认小程序中存在页面:`pages/order/monad/monad` 在小程序项目中检查: ``` pages/ └── order/ └── monad/ ├── monad.js ├── monad.json ├── monad.wxml └── monad.wxss ``` ## 代码改进 ### 已添加的改进 1. ✅ 详细的日志记录 2. ✅ AccessToken错误自动清除缓存 3. ✅ 更详细的错误信息 4. ✅ 保存图片失败检测 ### 新增功能 - 当遇到 40001 或 42001 错误时,自动清除缓存并可重试 - 所有关键步骤都有日志记录 - 错误信息包含 errcode 和 errmsg ## 测试建议 ### 测试1: 首次生成 1. 清除所有缓存 2. 生成二维码 3. 查看日志确认AccessToken获取过程 ### 测试2: 缓存测试 1. 第一次生成后立即再次生成 2. 确认第二次使用了缓存的AccessToken 3. 响应时间应该更快 ### 测试3: 错误恢复 1. 故意配置错误的AppSecret 2. 尝试生成,应该看到详细错误 3. 修正配置后重试 ### 测试4: 并发测试 1. 同时生成多个二维码 2. 确认AccessToken只获取一次 3. 所有请求都应该成功 ## 微信官方文档 - AccessToken获取: https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-access-token/getAccessToken.html - 小程序码生成: https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/qr-code/getUnlimitedQRCode.html - 错误码说明: https://developers.weixin.qq.com/miniprogram/dev/framework/usability/PublicErrno.html ## 联系支持 如果问题仍未解决: 1. 收集完整的日志信息 2. 记录错误发生的时间 3. 提供小程序AppID(脱敏处理) 4. 描述复现步骤