Django实现微信网页授权认证完整流程解析
本文详细解析在Django框架中实现微信网页授权认证的完整步骤。涵盖配置AppID与Secret、构造授权URL、处理snsapi_userinfo与snsapi_base两种Scope差异、通过Code获取Access Token及刷新机制,最终拉取用户详细信息并存储至Cookie的全过程,旨在为开发者提供清晰的API对接指南。
微信网页授权概述
微信网页授权认证
依据微信官方文档说明,完成网页授权流程主要包含四个核心步骤。
具体流程包括:用户同意授权以获取Code;利用Code换取网页授权Access Token;通过Access Token刷新Token以保持有效性;以及当Scope设置为snsapi_userinfo时拉取用户信息,最后需检验Access Token的有效性。
授权URL构造与Scope配置
1 授权
构造授权跳转URL,格式为:url="https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_userinfo&state=openid_required#wechat_redirect"1
该链接即为微信提供的标准授权地址。
scope=snsapi_userinfo
若配置scope为snsapi_userinfo,页面将弹出授权窗口,用户允许后可获取昵称、头像及详细信息,且无需关注公众号即可获取相关用户信息。
scope=snsapi_base
若配置scope为snsapi_base,则不弹出授权页面,直接静默跳转,仅能获取用户的openid1。
def r_oauth(request):
#授权
url="https://open/weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_userifo&state=openid_required#wechat_redirect"
redirect_uri="http://pypages.gongchang.com/user/"
redirect_uri=urllib.quote(redirect_uri)
return redirect(url.format(app_id,redirect_uri) #format拼接url
def get_userinfo(request):
#获取用户信息
code=request.GET.get("code")
if not code:
return HttpResponse("not find code")
token_url="https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code"
# 通过code 可以获取到access_token ,但是code 只能获取道一次获取token 的时候可能要刷新,不然会获取不到token
data=requests.get(token_url.format(app_id,app_secret,code))
#转为json 格式的字符串
data=json.loads(data.content.decode("utf-8"))
#获取access_token
access_token=data['access_token']
open_id=data['openid']
refresh_token=data['refresh_token']
if not access_token or not open_id:
return None # 判断是否有token 和open_id
# 用户的url
user_url="https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh-CN"
d=requests.get(user_url.format(access_token,open_id)
d=d.content.decode("utf-8")
if not d:
return None
d=json.loads(d)
if d.has_key("errcode") and d["errcode"]==40001:
#token过期解决
refresh_toekn_url="https://api.weixin.qq.com/sns/oauth2/refresh_token?appi={0}&grant_type=refresh_type=refresh_token&refresh_token={1}"
r_d=requests.get(refresh_token_url.format(app_id,refresh_token))
r_d=json.loads(r_d.content.decode("utf-8"))
access_token=r_d["access_token"]
d=requests.get(user_url.format(access_token,open_id))
d=d.content.decode("utf-8")
response=HttpResponse(json.dumps(d))
# 设置cookie 将用户信息保存到cookie里面
response.set_cookie("userinfo",json.dumps(d),max_age=7 * 24 * 3600) # 设置过期时间7 天
return response
Django环境配置与实现
在实施开发前,必须先在微信公众平台完成网页授权域名等配置,参考微信网页授权开发文档进行设置。
在Django项目中,需在配置文件中正确设置AppID和App Secret。
同时,需在后台代码中配置对应的回调URL(Redirect URI)。
url(r'^r_oauth/$', views.r_oauth), # 授权
url(r'^user/$', views.get_user_info), # 获取用户信息
总结
以上内容为小编整理的Django微信网页授权认证API步骤详解,希望能为各位开发者提供帮助。如有任何疑问,欢迎留言,小编将及时回复。感谢大家对本站的支持!若本文对您有所助益,欢迎转载,请注明出处,谢谢!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









