TypechoJoeTheme

至尊技术网

统计
登录
用户名
密码
/
注册
用户名
邮箱

微信登录域名不一致的解决方案

2025-03-25
/
0 评论
/
38 阅读
/
正在检测是否收录...
03/25

4.1 配置域名白名单

首先,需要在微信公众平台或开放平台中配置你的应用所涉及的所有域名到白名单中。这包括你的开发环境、测试环境和生产环境的所有可能访问的域名。这样,微信服务器在处理登录请求时,会认为这些域名的请求是合法的。

4.2 设置正确的回调URL

在微信开放平台或公众平台的设置中,你需要设置正确的OAuth2.0回调URL。这个URL是用户完成授权后,微信服务器用来返回授权结果(如code)的地址。请确保你设置的回调URL与你在服务器上配置的地址完全一致,包括协议头(http或https)。

4.3 验证回调URL

微信会对你设置的回调URL进行验证,确保该URL是可访问的。因此,你需要确保你的服务器能够正确响应来自微信服务器的请求。在开发环境中,你可以使用ngrok等工具将本地开发环境的地址映射为一个公网可访问的URL,然后进行验证。对于生产环境,直接使用实际的生产域名即可。

4.4 服务器端配置

在服务器端,你需要做以下配置:
- 反向代理:如果使用了反向代理(如Nginx、Apache),请确保代理设置正确,不会破坏HTTP头信息(如Host),这样微信服务器才能正确识别回调请求的原始主机名。
- HTTPS:为了安全起见,建议使用HTTPS协议作为OAuth2.0的回调协议。如果尚未部署SSL证书,请尽快完成部署。
- 跨域访问:如果你的前端和后端分离部署在不同的域名下,请确保服务器端正确处理CORS(跨源资源共享)问题。对于微信登录的请求和响应,需要允许跨域访问。

4.5 代码示例(使用OAuth2.0)

以下是一个简单的OAuth2.0授权流程的代码示例(使用Python的requests库):
```python
import requests
import json
import base64
from urllib.parse import urlencode, urlparse, parseqsl, urlunparse, urlunparse as parseurlastuple, urlunparse # noqa: E402

def getredirecturl(redirecturi, state): # 获取授权后的重定向地址
base = parse
urlastuple(redirecturi) # 获取URI各部分信息
query = parse
qsl(base[4]) # 获取查询字符串
query.append(("state", state)) # 添加state参数
return urlunparse(base[:4] + (urlencode(query),)) # 重构URI

获取授权链接并重定向到浏览器

redirecturi = "https://your-domain.com/wechat/callback" # 根据实际情况修改为你的回调地址
auth
url = f"https://open.weixin.qq.com/connect/oauth2/authorize?appid=YOURAPPID&redirecturi={getredirecturl(redirecturi, '12345')}&responsetype=code&scope=snsapiuserinfo&state=STATE" # 根据实际情况修改为你的AppID和SCOPE
print(auth
url) # 输出授权链接
以上代码只是生成了授权链接并打印出来,实际使用时需要在Web页面中重定向到这个链接让用户进行授权。用户完成授权后,会重定向到`redirect_uri`指定的地址,并带上code参数,此时你可以通过code换取用户的OpenID和Access Token等信息。 注意:这里的`YOUR_APPID`、`snsapi_userinfo`等需要根据实际情况替换为正确的值。同时,请确保`redirect_uri`与你在微信开放平台设置的回调URL一致。python # 使用code换取OpenID和Access Token等信息的示例代码 # noqa: E501 ```python def getaccesstoken(appid, secret, code): # 使用code换取Access Token等信息的函数 headers = { "Content-Type": "application/x-www-form-urlencoded", } params = { "appid": appid, "secret": secret, "code": code, "granttype": "authorizationcode", } response = requests.post("https://api.weixin.qq.com/sns/oauth2/accesstoken", headers=headers, data=params) data = json.loads(response.text) if data["errcode"] == 0: return data["openid"], data["accesstoken"] else: raise Exception(f"获取Access Token失败: {data['errmsg']}") else: raise Exception("解析JSON失败")

api接口服务器配置域名白名单微信登录回调地址域名不一致OAuth2.0多环境开发回调URL验证
朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/22395/(转载时请注明本文出处及文章链接)

评论 (0)