编辑 | blame | 历史 | 原始文档

微信授权调试指南

问题分析

您遇到的 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. 配置开发环境

wechat:
appId: wx70f6a7346ee842c0
appSecret: 2d6c59de85e876b7eadebeba62e5417a
redirectUri: https://your-ngrok-url.ngrok.io/evaluation
```

3. 微信公众平台配置

在网页授权域名中添加:your-ngrok-url.ngrok.io

方案三:本地开发模拟

1. 添加开发环境配置

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. 修改后端代码支持开发模式

@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. 检查当前配置

# 检查应用配置
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. 检查域名解析

# 检查域名是否解析正确
nslookup wx.966120.com.cn
ping wx.966120.com.cn

4. 检查HTTPS证书

# 检查HTTPS是否正常
curl -I https://wx.966120.com.cn

常见错误及解决方案

1. redirect_uri 参数错误

原因: 域名未在微信公众平台配置或配置错误
解决: 在微信公众平台正确配置网页授权域名

2. 域名不匹配

原因: 回调地址与配置的授权域名不一致
解决: 确保回调地址的域名与配置的授权域名完全一致

3. 端口号问题

原因: 微信授权不支持端口号
解决: 使用反向代理,将80/443端口转发到应用端口

4. HTTPS要求

原因: 生产环境必须使用HTTPS
解决: 配置SSL证书,使用HTTPS协议

测试验证

1. 本地测试

# 启动应用
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. 用户信息获取测试

# 使用授权码获取用户信息
curl "http://localhost:8080/evaluation/wechat/userinfo?code=YOUR_AUTH_CODE"

注意事项

  1. 域名配置:必须在微信公众平台配置正确的授权域名
  2. HTTPS要求:生产环境必须使用HTTPS
  3. 端口号限制:微信授权不支持端口号
  4. 编码问题:确保URL编码正确
  5. 测试环境:开发时可以使用内网穿透工具

推荐配置

生产环境

wechat:
  appId: wx70f6a7346ee842c0
  appSecret: 2d6c59de85e876b7eadebeba62e5417a
  redirectUri: https://wx.966120.com.cn/evaluation

开发环境

wechat:
  appId: wx70f6a7346ee842c0
  appSecret: 2d6c59de85e876b7eadebeba62e5417a
  redirectUri: https://your-ngrok-url.ngrok.io/evaluation
  dev:
    enabled: true
    mockUserInfo: true

按照以上步骤配置后,您的微信授权功能应该能正常工作。