Python中实现微信第三方登录的设计思路
这两天在做利用微信第三方登陆应用网站的接口,查了下资料,说的还是蛮详细的,总结一下。
-
进行开发的相关文档基本都在这里: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432,建议大概看下,可以了解到,微信没有提供免费的沙箱环境以供调试本地三方登陆网站。测试号那个也没有提供二维码登陆的调试功能,所以没必要像我再走弯路。
-
开发流程开始:
-
根据网站应用注册可以获取到 app_id 和 app_secret,这个是在开放平台注册应用时获取到的。
-
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 根据这个 url 格式,填写 url 中的各个参数,其中 scope 为 snsapi_login,state 是个随机字符串,可以使用时间,session 等进行加密生成的字符串。
-
跳转认证成功之后,会跳转到你的回调地址,你的 url 会多了一个参数 code (前提是参数:response_type=code ),我们需要拿到这个 code 换取网页授权 access_token,https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
-
认证后,会返回一个 json,包括 open_id 等信息。可以通过 open_id 获取用户信息,最后就是拿到 json 中的 access_token 和 openid 去获取用户的微信信息数据了。
网上有很多相关的资料,可以多查查,少走弯路就是提高了效率, 欢迎加群号:902788038 这里有一群可以一起奋斗的小伙伴,也有阅人无数的 HR 小姐姐,希望可以在这里可以收获成长,并找到心仪工作。
-
Python中实现微信第三方登录的设计思路
要搞微信第三方登录,核心就三块:OAuth2.0授权、获取用户信息、处理回调。
1. 准备工作
先去微信开放平台注册应用,拿到AppID和AppSecret,设置好授权回调域名(比如www.yoursite.com)。
2. 前端引导授权 用户点击登录时,前端跳转到微信的授权URL:
# 构造授权URL
def get_auth_url(app_id, redirect_uri, state):
base_url = "https://open.weixin.qq.com/connect/qrconnect"
params = {
"appid": app_id,
"redirect_uri": redirect_uri,
"response_type": "code",
"scope": "snsapi_login", # 网页应用用这个
"state": state # 防CSRF
}
return f"{base_url}?{urlencode(params)}#wechat_redirect"
3. 后端处理回调
微信会带着code和state跳回你的回调地址,后端需要:
import requests
from flask import request
def wechat_callback():
code = request.args.get("code")
state = request.args.get("state")
# 验证state防止CSRF
if not validate_state(state):
return "Invalid state", 400
# 用code换access_token
token_url = "https://api.weixin.qq.com/sns/oauth2/access_token"
params = {
"appid": APP_ID,
"secret": APP_SECRET,
"code": code,
"grant_type": "authorization_code"
}
resp = requests.get(token_url, params=params).json()
access_token = resp.get("access_token")
openid = resp.get("openid")
# 获取用户信息
user_info_url = "https://api.weixin.qq.com/sns/userinfo"
params = {"access_token": access_token, "openid": openid}
user_info = requests.get(user_info_url, params=params).json()
# 处理用户登录/注册逻辑
return handle_user_login(openid, user_info)
4. 用户绑定
如果是首次登录,把微信openid和你系统的用户ID绑定存数据库。下次同一个openid过来就直接登录。
关键点:一定要验证state参数防CSRF,access_token有时效性(2小时),需要处理刷新逻辑。网页应用用snsapi_login,公众号里用snsapi_userinfo。
总结:流程就是跳转微信→拿code→换token→取用户信息→绑定本地账号。
我也以为是另辟蹊径的那种登录
骚年,慢慢的你会发现,很多坑.
对。后面坑得我五体投地。
楼上两位坑都踩光了么
还有内外网问题,当时我可是惨了
能用别人做好的库就别自己写,坑太多
好像说的就是的吧
移动端的开发也在日程中了
内外网,我用的是 natapp,网上教程很多,可以试试。
不一样,我说的不需要 app_id、app_secret
小程序出来后就没碰微信开发了,贴一下常规外的方案:
可以用认证服务号的参数二维码
可以被动获得 openid/unionid
當初坑太多,然後就改用現成的了,要求不高,能用就行啦


