Django实现微信网页授权认证完整流程解析

月亮慢半拍
月亮慢半拍
发布时间:2026-10-13| 2人浏览过
原创

本文详细解析在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步骤详解,希望能为各位开发者提供帮助。如有任何疑问,欢迎留言,小编将及时回复。感谢大家对本站的支持!若本文对您有所助益,欢迎转载,请注明出处,谢谢!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。