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编写爬虫小程序
May 14 Python
详细分析python3的reduce函数
Dec 05 Python
rabbitmq(中间消息代理)在python中的使用详解
Dec 14 Python
python的dataframe转换为多维矩阵的方法
Apr 11 Python
解决phantomjs截图失败,phantom.exit位置的问题
May 17 Python
详解python如何在django中为用户模型添加自定义权限
Oct 15 Python
浅谈python3发送post请求参数为空的情况
Dec 28 Python
使用Python调取任意数字资产钱包余额功能
Aug 15 Python
python SVD压缩图像的实现代码
Nov 05 Python
pandas中read_csv的缺失值处理方式
Dec 19 Python
python将字典内容写入json文件的实例代码
Aug 12 Python
Python自动发送和收取邮件的方法
Aug 12 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
ThinkPHP模板IF标签用法详解
2014/07/01 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
PHP 500报错的快速解决方法
2016/12/14 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
2019/06/03 PHP
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
jQuery+CSS 实现的超Sexy下拉菜单
2010/01/17 Javascript
jQuery 动画弹出窗体支持多种展现方式
2010/04/29 Javascript
Web 前端设计模式--Dom重构 提高显示性能
2010/10/22 Javascript
jquery基础教程之数组使用详解
2014/03/10 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
学习javascript文件加载优化
2016/02/19 Javascript
jQuery实现移动端手机商城购物车功能
2016/09/24 Javascript
jstl中判断list中是否包含某个值的简单方法
2016/10/14 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
2017/12/25 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
2018/01/02 Javascript
JavaScript简单实现的仿微博留言功能示例
2019/01/17 Javascript
vue 中Virtual Dom被创建的方法
2019/04/15 Javascript
js实现移动端tab切换时下划线滑动效果
2019/09/08 Javascript
Vue实现页面添加水印功能
2019/11/09 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
Python爬虫DNS解析缓存方法实例分析
2017/06/02 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
Python字符串的一些操作方法总结
2019/06/10 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
python使用gdal对shp读取,新建和更新的实例
2020/03/10 Python
如何快速一次性卸载所有python包(第三方库)呢
2020/10/20 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
2020/12/07 Python
Tarte Cosmetics官网:美国最受欢迎的化妆品公司之一
2017/08/24 全球购物
美国最大婚纱连锁店运营商:David’s Bridal
2019/03/12 全球购物
WSDL的操作类型主要有几种
2013/07/19 面试题
国培远程培训感言
2014/03/08 职场文书
护林防火标语
2014/06/27 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
Nginx中使用Lua脚本与图片的缩略图处理的实现
2022/03/18 Servers