django 微信网页授权认证api的步骤详解


Posted in Python onJuly 30, 2019

微信网页授权认证

根据微信官方文档,网页授权需要四个步骤,

- 用户同意授权-获取code
- 通过code 获取网页授权access_token
- 通过code 获取网页授权access_token
- 刷新token
- 拉去用户信息scope为snsapi_userinfo
-检验授权凭证 access_token是否有效

1 授权

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

弹出授权页面,可以通过`openid`获取到昵称,头像,用户信息,不需要关注就能获取用户信息

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 里面我们需要配置appid 和app_secret

url 也要配置

url(r'^r_oauth/$', views.r_oauth), # 授权 
 url(r'^user/$', views.get_user_info), # 获取用户信息

总结

以上所述是小编给大家介绍的django 微信网页授权认证api的步骤详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
深入Python函数编程的一些特性
Apr 13 Python
python 字典 按key值大小 倒序取值的实例
Jul 06 Python
Python2.7环境Flask框架安装简明教程【已测试】
Jul 13 Python
python+opencv+caffe+摄像头做目标检测的实例代码
Aug 03 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
Aug 02 Python
python中web框架的自定义创建
Sep 08 Python
Pytorch DataLoader 变长数据处理方式
Jan 08 Python
将matplotlib绘图嵌入pyqt的方法示例
Jan 08 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
Apr 08 Python
浅析Python 序列化与反序列化
Aug 05 Python
Django DRF认证组件流程实现原理详解
Aug 17 Python
Python之Sklearn使用入门教程
Feb 19 Python
Python Pandas 如何shuffle(打乱)数据
Jul 30 #Python
python tkinter实现屏保程序
Jul 30 #Python
python pandas 时间日期的处理实现
Jul 30 #Python
Django 反向生成url实例详解
Jul 30 #Python
Python Pandas数据中对时间的操作
Jul 30 #Python
python tkinter实现彩球碰撞屏保
Jul 30 #Python
详解python pandas 分组统计的方法
Jul 30 #Python
You might like
PHP中的日期及时间
2006/11/23 PHP
PHP集成百度Ueditor 1.4.3
2014/11/23 PHP
Apache服务器下防止图片盗链的办法
2015/07/06 PHP
PHP会话处理的10个函数
2015/08/11 PHP
php 实现银联商务H5支付的示例代码
2019/10/12 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
js select常用操作控制代码
2010/03/16 Javascript
js操作二级联动实现代码
2010/07/27 Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
2011/08/28 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
window.location.href中url中数据量太大时的解决方法
2013/12/23 Javascript
node.js中的dns.getServers方法使用说明
2014/12/08 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
简介JavaScript中POSITIVE_INFINITY值的使用
2015/06/05 Javascript
JS实现统计复选框选中个数并提示确定与取消的方法
2015/07/01 Javascript
js拼接html字符串的注意事项
2016/10/13 Javascript
AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)
2016/12/12 Javascript
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
javascript 中iframe高度自适应(同域)实例详解
2017/05/16 Javascript
JS实现验证码倒计时的注册页面
2018/01/02 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
2018/09/15 Javascript
webpack4 SplitChunks实现代码分隔详解
2019/05/23 Javascript
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
[01:45]亚洲邀请赛互动指南虚拟物品介绍
2015/01/30 DOTA
python检测远程服务器tcp端口的方法
2015/03/14 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
详解Python用户登录接口的方法
2019/04/17 Python
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
一文彻底解决HTML5页面中长按保存图片功能
2019/06/10 HTML / CSS
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
C#面试常见问题
2013/02/25 面试题
财务工作个人求职的自我评价
2013/12/19 职场文书
小学生爱国演讲稿
2014/04/25 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
大学生入党积极分子自我评价
2014/09/20 职场文书
食品安全责任书范本
2015/05/09 职场文书