使用nginx负载均衡后,微信公众号报错:redirect_uri域名与后台配置不一致,错误码:10003

本文介绍了解决Nginx负载均衡下IIS站点获取错误域名的问题,详细讲述了如何正确配置代理传递域名,并解决了微信公众号访问时出现的端口冲突问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:

nginx负载均衡服务器:192.168.1.18

IIS节点服务器:192.168.1.12

IIS节点服务器:192.168.1.16

说明:

公司IIS网站中有配置判断域名,

通过nginx做负载均衡后,IIS网站中获取的域名就变了

解决:

在nginx添加负载均衡是配置代理地址为域名即可

proxy_pass http://www.xxxx.com;

upstream www.xxxx.com{
server 192.168.1.12;
server 192.168.1.16 backup;
}

IIS网站获取到的值为www.xxxx.com

 

但微信公众号使用这个方法好像不能用

将域名解析到IIS节点服务器,无报错

将域名解析到nginx服务器后,通过负载均衡到IIS,报错:

 百度原因,无果,大多是在微信公众号上配置的url跟自己提交的redirect_uri 是一致的

但是我在微信公众号中配置的url与解析的域名一致

后在页面中添加

获取到请求过来的地址

查看发现为http://www.xxxx.com:81/index.aspx

原因:

因在IIS中配置的网站端口为81

nginx配置为:

proxy_pass http://weixin.xxxx.com;

upstream weixin.xxxx.com{
server 192.168.1.12:81;
server 192.168.1.16:81 backup;
}

微信公众号获取到的值为weixin.xxxx.com:81,会默认加上节点的端口

解决:

在IIS节点服务器中将微信公众号的网站绑定为80端口。

<think>好的,我需要帮助用户在RuoYi-Vue分离版中实现微信扫码登录PC端的功能,并且要传递用户ID。首先,我得回忆一下RuoYi-Vue的结构,它前后端分离,前端是Vue,后端是Spring Boot。用户想通过微信扫码获取用户ID然后登录,这涉及到第三方登录流程,尤其是微信的OAuth2.0授权。 首先,用户需要注册微信开放平台的应用,获取AppID和AppSecret,这样才有权限调用微信的接口。然后,在RuoYi的前端部分,需要生成微信登录的二维码。用户扫码后,微信会跳转到指定的回调地址,并携带code参数。前端需要将这个code发送到后端,后端再用code、AppID和AppSecret去微信服务器换取access_token和openid。过根据微信的文档,现在可能直接能拿到用户信息,比如unionid,这可以作为用户的唯一标识。 接下来,后端需要处理这个openid或unionid。在RuoYi的系统中,可能需要将微信用户和本地用户绑定。如果用户第一次登录,可能需要跳转到绑定页面,输入用户名密码,然后关联微信的openid。或者,如果系统允许直接使用微信登录,可以在用户表中新增一个字段存储微信的openid,登录时通过这个字段查询用户。 然后,后端生成JWT令牌返回给前端,前端保存这个token,后续请求携带token进行鉴权。这符合RuoYi的鉴权机制,因为它本身使用了Spring Security和JWT。 另外,需要考虑跨域问题。前端调用微信接口时可能会遇到跨域,可以通过nginx代理解决,或者使用axios的配置。例如,引用5提到用nginx转发请求避免跨域错误,这可能需要在配置文件中设置代理。 还需要修改RuoYi的登录页面,加入微信登录的入口,比如一个按钮,点击后跳转到微信的授权页面。授权页面的URL需要拼接正确的参数,如appid、redirect_uri(后端处理code的回调地址)、scope为snsapi_login(用于扫码登录)等,如引用4中的示例URL。 在后端,新增一个Controller处理微信的回调,接收code,调用微信接口获取用户信息,然后进行本地用户查询或创建,最后生成token。这里可能需要使用HttpClient或者RestTemplate来发送请求到微信的API。 安全性方面,要注意state参数防止CSRF攻击,回调地址需要正确编码,并且处理可能的错误情况,比如用户拒绝授权、网络问题等。 最后,测试整个流程,确保扫码后能正确跳转,获取用户信息,并登录系统。可能还需要处理会话管理,比如用户已绑定和未绑定的同处理流程。 总结步骤:注册微信应用、前端生成二维码、处理回调获取code、后端用code换用户信息、关联本地用户、返回token、前端存储token并跳转。需要参考RuoYi现有的登录逻辑,集成微信的SDK或API,确保符合项目的架构。</think>在RuoYi-Vue分离版中实现微信扫码登录PC端功能,需结合微信开放平台OAuth2.0协议系统原有鉴权体系。以下是分步骤实现方案: --- ### 一、准备工作 1. **注册微信开放平台应用** - 获取`AppID`和`AppSecret`,并配置授权回调域名(如`www.yourdomain.com`)[^4]。 2. **修改系统配置** - 在`ruoyi-admin`模块的`application.yml`中添加微信配置: ```yaml wx: appid: YOUR_APPID secret: YOUR_SECRET redirect-url: http://www.yourdomain.com/auth/callback ``` --- ### 二、前端改造(Vue部分) 1. **添加微信登录入口** 在登录页添加扫码按钮,生成微信授权链接: ```javascript // login.vue const buildWxAuthUrl = () => { const appid = 'YOUR_APPID'; const redirect_uri = encodeURIComponent('后端回调接口地址'); return `https://open.weixin.qq.com/connect/qrconnect?appid=${appid}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect`; }; ``` 2. **处理回调页面** 创建`wxCallback.vue`页面接收微信返回的`code`和`state`,并提交到后端: ```javascript mounted() { const code = this.$route.query.code; if (code) { this.$store.dispatch('LoginByWechat', code).then(() => { this.$router.push({ path: '/' }); }); } } ``` --- ### 三、后端改造(Spring Boot部分) 1. **新增微信登录接口** ```java // SysLoginController.java @GetMapping("/wxCallback") public String wxCallback(@RequestParam String code) { // 1. 使用code换取access_token和openid WxAuthResponse res = wxService.getAccessToken(code); // 2. 根据openid查询或创建用户 SysUser user = userService.selectUserByWxOpenid(res.getOpenid()); // 3. 生成JWT令牌 String token = loginService.createToken(user); return token; } ``` 2. **实现微信API调用** ```java // WxServiceImpl.java public WxAuthResponse getAccessToken(String code) { String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={appid}&secret={secret}&code={code}&grant_type=authorization_code"; return restTemplate.getForObject(url, WxAuthResponse.class, appid, secret, code); } ``` 3. **用户绑定逻辑** 若用户未绑定,返回特定状态码引导前端跳转至绑定页面: ```java if (user == null) { return AjaxResult.error("未绑定用户").put("code", 401); } ``` --- ### 四、安全增强 1. **State参数校验** 在授权请求中添加随机`state`参数,回调时验证防止CSRF攻击[^4]。 2. **Token存储** 建议将微信`access_token`和`refresh_token`存入Redis,设置合理过期时间[^1]。 --- ### 五、测试流程 1. 用户点击微信图标跳转至微信授权页 2. 微信扫码后重定向到`wxCallback`页面 3. 后端通过`code`换取用户唯一标识(openid/unionid) 4. 系统根据标识自动登录或跳转绑定页面 5. 返回标准JWT令牌完成鉴权[^2] ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值