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 08 Python
Python开发如何在ubuntu 15.10 上配置vim
Jan 25 Python
Python简单格式化时间的方法【strftime函数】
Sep 18 Python
Python中的浮点数原理与运算分析
Oct 12 Python
Python工程师面试必备25条知识点
Jan 17 Python
详解python校验SQL脚本命名规则
Mar 22 Python
深入浅析python3中的unicode和bytes问题
Jul 03 Python
python利用re,bs4,requests模块获取股票数据
Jul 29 Python
python 控制台单行刷新,多行刷新实例
Feb 19 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
Jan 28 Python
如何用 Python 制作 GitHub 消息助手
Feb 20 Python
python抢购软件/插件/脚本附完整源码
Mar 04 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
回首过去10年中最搞笑的10部动漫,哪一部让你节操尽碎?
2020/03/03 日漫
BBS(php & mysql)完整版(六)
2006/10/09 PHP
社区(php&&mysql)三
2006/10/09 PHP
PHP教程 预定义变量
2009/10/23 PHP
PHP常见错误提示含义解释(实用!值得收藏)
2016/04/25 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
jquery 简短右键菜单 多浏览器兼容
2010/01/01 Javascript
jQuery中add实现同时选择两个id对象
2010/10/22 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
JS瀑布流实现方法实例分析
2016/12/19 Javascript
AngularJS中update两次出现$promise属性无法识别的解决方法
2017/01/05 Javascript
详解vue 模拟后台数据(加载本地json文件)调试
2017/08/25 Javascript
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
Angular5中调用第三方js插件的方法
2018/02/26 Javascript
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
vue elementui tree 任意级别拖拽功能代码
2020/08/31 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
2020/09/02 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
[03:42]2014DOTA2西雅图国际邀请赛 Navi战队巡礼
2014/07/07 DOTA
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
2018/12/11 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
pandas中遍历dataframe的每一个元素的实现
2019/10/23 Python
python实现tail实时查看服务器日志示例
2019/12/24 Python
Django数据统计功能count()的使用
2020/11/30 Python
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
社区工作感言
2014/02/21 职场文书
应届生求职信
2014/05/31 职场文书
同意迁入证明模板
2014/10/26 职场文书
2014大学生学生会工作总结
2014/12/19 职场文书
五四青年节比赛演讲稿
2015/03/18 职场文书
奥巴马开学演讲观后感
2015/06/12 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python
JS Object构造函数之Object.freeze
2021/04/28 Javascript
redis不能访问本机真实ip地址的解决方案
2021/07/07 Redis