# 微信授权调试指南 ## 问题分析 您遇到的 `redirect_uri 参数错误` 问题,主要原因如下: ### 1. 域名配置问题 从您的URL可以看出: ``` redirect_uri=http%3A%2F%2Fwx.966120.com.cn%3A81%2Fevaluation%3Fvehicle%3D%25E7%25B2%25AC12345 ``` **问题:** - 域名 `wx.966120.com.cn:81` 可能未在微信公众平台配置 - 端口号 `:81` 在微信授权中不被支持 - 需要配置正确的授权回调域名 ### 2. 微信公众平台配置要求 #### 网页授权域名配置 1. 登录微信公众平台 (https://mp.weixin.qq.com) 2. 进入"设置与开发" -> "公众号设置" -> "功能设置" 3. 在"网页授权域名"中添加:`wx.966120.com.cn` 4. **注意:不要包含端口号,不要包含协议** ## 解决方案 ### 方案一:修复域名配置(推荐) #### 1. 微信公众平台配置 ``` 网页授权域名:wx.966120.com.cn ``` #### 2. 修改应用配置 在 `application.yml` 中配置正确的域名: ```yaml wechat: appId: wx70f6a7346ee842c0 appSecret: 2d6c59de85e876b7eadebeba62e5417a redirectUri: https://wx.966120.com.cn/evaluation # 使用HTTPS,无端口号 ``` #### 3. 服务器配置 - 确保 `wx.966120.com.cn` 域名指向您的服务器 - 配置HTTPS证书(微信授权要求HTTPS) - 配置反向代理,将80/443端口转发到您的应用端口 ### 方案二:开发环境调试 #### 1. 使用内网穿透工具 **推荐工具:** - **ngrok** (免费版) - **natapp** (国内访问更稳定) - **frp** (自建) **ngrok使用步骤:** ```bash # 1. 下载ngrok # 2. 注册账号获取authtoken ngrok authtoken YOUR_AUTHTOKEN # 3. 启动内网穿透 ngrok http 8080 # 4. 获得公网地址,如:https://abc123.ngrok.io ``` #### 2. 配置开发环境 ```yaml wechat: appId: wx70f6a7346ee842c0 appSecret: 2d6c59de85e876b7eadebeba62e5417a redirectUri: https://your-ngrok-url.ngrok.io/evaluation ``` #### 3. 微信公众平台配置 在网页授权域名中添加:`your-ngrok-url.ngrok.io` ### 方案三:本地开发模拟 #### 1. 添加开发环境配置 ```yaml wechat: appId: wx70f6a7346ee842c0 appSecret: 2d6c59de85e876b7eadebeba62e5417a redirectUri: https://wx.966120.com.cn/evaluation # 开发环境配置 dev: enabled: true mockUserInfo: true ngrokUrl: https://your-ngrok-url.ngrok.io ``` #### 2. 修改后端代码支持开发模式 ```java @Value("${wechat.dev.enabled:false}") private boolean devModeEnabled; @Value("${wechat.dev.mockUserInfo:false}") private boolean mockUserInfo; // 在生成授权URL时添加开发模式判断 if (devModeEnabled && mockUserInfo) { // 返回模拟的授权URL,直接跳转到回调地址 String mockCode = "dev_mock_code_" + System.currentTimeMillis(); String mockRedirectUri = redirectUri + "?code=" + mockCode + "&state=" + state; return success(Map.of("authUrl", mockRedirectUri)); } ``` ## 调试步骤 ### 1. 检查当前配置 ```bash # 检查应用配置 curl -X GET "http://localhost:8080/evaluation/wechat/authurl?redirectUri=http://wx.966120.com.cn/evaluation&state=test" ``` ### 2. 验证微信授权URL 生成的URL应该是这样的格式: ``` https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx70f6a7346ee842c0&redirect_uri=https%3A%2F%2Fwx.966120.com.cn%2Fevaluation&response_type=code&scope=snsapi_userinfo&state=test#wechat_redirect ``` ### 3. 检查域名解析 ```bash # 检查域名是否解析正确 nslookup wx.966120.com.cn ping wx.966120.com.cn ``` ### 4. 检查HTTPS证书 ```bash # 检查HTTPS是否正常 curl -I https://wx.966120.com.cn ``` ## 常见错误及解决方案 ### 1. redirect_uri 参数错误 **原因:** 域名未在微信公众平台配置或配置错误 **解决:** 在微信公众平台正确配置网页授权域名 ### 2. 域名不匹配 **原因:** 回调地址与配置的授权域名不一致 **解决:** 确保回调地址的域名与配置的授权域名完全一致 ### 3. 端口号问题 **原因:** 微信授权不支持端口号 **解决:** 使用反向代理,将80/443端口转发到应用端口 ### 4. HTTPS要求 **原因:** 生产环境必须使用HTTPS **解决:** 配置SSL证书,使用HTTPS协议 ## 测试验证 ### 1. 本地测试 ```bash # 启动应用 mvn spring-boot:run # 测试授权URL生成 curl "http://localhost:8080/evaluation/wechat/authurl?redirectUri=https://wx.966120.com.cn/evaluation&state=test" ``` ### 2. 微信环境测试 1. 在微信中打开生成的授权URL 2. 确认能正常跳转到微信授权页面 3. 授权后能正常回调到您的应用 ### 3. 用户信息获取测试 ```bash # 使用授权码获取用户信息 curl "http://localhost:8080/evaluation/wechat/userinfo?code=YOUR_AUTH_CODE" ``` ## 注意事项 1. **域名配置**:必须在微信公众平台配置正确的授权域名 2. **HTTPS要求**:生产环境必须使用HTTPS 3. **端口号限制**:微信授权不支持端口号 4. **编码问题**:确保URL编码正确 5. **测试环境**:开发时可以使用内网穿透工具 ## 推荐配置 ### 生产环境 ```yaml wechat: appId: wx70f6a7346ee842c0 appSecret: 2d6c59de85e876b7eadebeba62e5417a redirectUri: https://wx.966120.com.cn/evaluation ``` ### 开发环境 ```yaml wechat: appId: wx70f6a7346ee842c0 appSecret: 2d6c59de85e876b7eadebeba62e5417a redirectUri: https://your-ngrok-url.ngrok.io/evaluation dev: enabled: true mockUserInfo: true ``` 按照以上步骤配置后,您的微信授权功能应该能正常工作。