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 django实现简单的邮件系统发送邮件功能
Jul 14 Python
python3.4下django集成使用xadmin后台的方法
Aug 15 Python
用tensorflow实现弹性网络回归算法
Jan 09 Python
Python数据持久化shelve模块用法分析
Jun 29 Python
python 将list转成字符串,中间用符号分隔的方法
Oct 23 Python
获取Pytorch中间某一层权重或者特征的例子
Aug 17 Python
python3 assert 断言的使用详解 (区别于python2)
Nov 27 Python
Python3 搭建Qt5 环境的方法示例
Jul 16 Python
python使用建议与技巧分享(二)
Aug 17 Python
关于PySnooper 永远不要使用print进行调试的问题
Mar 04 Python
Python学习开发之图形用户界面详解
Aug 23 Python
python 详解turtle画爱心代码
Feb 15 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 Mssql操作简单封装支持存储过程
2009/12/11 PHP
《PHP编程最快明白》第八讲:php启发和小结
2010/11/01 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
2014/04/09 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
PHP递归的三种常用方式
2019/02/28 PHP
php中yar框架实例用法讲解
2020/12/27 PHP
javascript 限制输入和粘贴(IE,firefox测试通过)
2008/11/14 Javascript
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
extjs表格文本启用选择复制功能具体实现
2013/10/11 Javascript
js+ajax实现获取文件大小的方法
2015/12/08 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
2017/11/20 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
2018/08/31 Javascript
Vue 权限控制的两种方法(路由验证)
2019/08/16 Javascript
js实现简单页面全屏
2019/09/17 Javascript
[02:19]DOTA2女子战队FOX视频专访:希望更多美眉一起加入
2013/10/15 DOTA
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
Python+微信接口实现运维报警
2016/08/27 Python
使用Python绘制图表大全总结
2017/02/11 Python
Python 2.7中文显示与处理方法
2018/07/16 Python
Python的numpy库下的几个小函数的用法(小结)
2019/07/12 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
python实现UDP协议下的文件传输
2020/03/20 Python
利用Python如何实时检测自身内存占用
2020/05/09 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
2020/08/04 Python
python用tkinter实现一个gui的翻译工具
2020/10/26 Python
Python安装Bs4的多种方法
2020/11/28 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
2020/12/22 Python
Betsey Johnson官网:妖娆可爱的连衣裙及鞋子、手袋和配件
2016/12/30 全球购物
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
工程采购员岗位职责
2014/03/09 职场文书
社区健康教育工作方案
2014/06/03 职场文书
《绝招》教学反思
2016/02/20 职场文书
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android
Python利用capstone实现反汇编
2022/04/06 Python
MySQL数据库如何查看表占用空间大小
2022/06/10 MySQL