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实现的栈(Stack)
Jan 26 Python
python使用turtle绘制分形树
Jun 22 Python
python得到一个excel的全部sheet标签值方法
Dec 10 Python
Numpy之random函数使用学习
Jan 29 Python
15行Python代码实现网易云热门歌单实例教程
Mar 10 Python
用python打印菱形的实操方法和代码
Jun 25 Python
python rsync服务器之间文件夹同步脚本
Aug 29 Python
Python实现大数据收集至excel的思路详解
Jan 03 Python
python ffmpeg任意提取视频帧的方法
Feb 21 Python
使用 django orm 写 exists 条件过滤实例
May 20 Python
Python如何实现后端自定义认证并实现多条件登陆
Jun 22 Python
解决Pytorch dataloader时报错每个tensor维度不一样的问题
May 28 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函数学习之PHP函数点评
2012/07/05 PHP
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
php数组删除元素示例
2014/03/21 PHP
php自定文件保存session的方法
2014/12/10 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
使用 laravel sms 构建短信验证码发送校验功能
2017/11/06 PHP
javascript 点击整页变灰的效果(可做退出效果)。
2008/01/09 Javascript
return false,对阻止事件默认动作的一些测试代码
2010/11/17 Javascript
使用jQuery的将桌面应用程序引入浏览器
2010/11/19 Javascript
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
JavaScript基础知识点归纳(推荐)
2016/07/09 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
2017/05/01 jQuery
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
Angular ElementRef简介及其使用
2018/10/01 Javascript
JavaScrip数组去重操作实例小结
2019/06/20 Javascript
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
对numpy中的数组条件筛选功能详解
2018/07/02 Python
python之Flask实现简单登录功能的示例代码
2018/12/24 Python
Python Excel处理库openpyxl使用详解
2019/05/09 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
python读取ini配置的类封装代码实例
2020/01/08 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
Docker如何部署Python项目的实现详解
2020/10/26 Python
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
电脑销售顾问自荐信
2014/01/29 职场文书
安全生产管理合理化建议书
2014/03/12 职场文书
大学三年计划书范文
2014/04/30 职场文书
个人查摆问题及整改措施
2014/10/16 职场文书
企业承诺书格式范文
2015/04/28 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android