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中read()、readline()和readlines()三者间的区别和用法
Jul 30 Python
python实现微信跳一跳辅助工具步骤详解
Jan 04 Python
Django rest framework实现分页的示例
May 24 Python
Python lxml解析HTML并用xpath获取元素的方法
Jan 02 Python
PyCharm 创建指定版本的 Django(超详图解教程)
Jun 18 Python
Python 使用 prettytable 库打印表格美化输出功能
Dec 26 Python
django实现更改数据库某个字段以及字段段内数据
Mar 31 Python
在keras 中获取张量 tensor 的维度大小实例
Jun 10 Python
Keras官方中文文档:性能评估Metrices详解
Jun 15 Python
Python定义一个函数的方法
Jun 15 Python
使用Nibabel库对nii格式图像的读写操作
Jul 01 Python
Jupyter Notebook 远程访问配置详解
Jan 11 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+dbfile开发小型留言本
2006/10/09 PHP
PHP 分页类(模仿google)-面试题目解答
2009/09/13 PHP
PHP笔记之:基于面向对象设计的详解
2013/05/14 PHP
php输出指定时间以前时间格式的方法
2015/03/21 PHP
php实现约瑟夫问题的方法小结
2015/03/23 PHP
用PHP代码在网页上生成图片
2015/07/01 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
php简单计算年龄的方法(周岁与虚岁)
2016/12/06 PHP
PHP实现批量修改文件名的方法示例
2019/09/18 PHP
javascript字符串拼接的效率问题
2010/12/25 Javascript
JS中获取数据库中的值的方法
2013/07/14 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
jquery ztree异步搜索(搜叶子)实践
2016/02/25 Javascript
JavaScript修改作用域外变量的方法
2016/03/25 Javascript
JavaScript  cookie 跨域访问之广告推广
2016/04/20 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
2016/05/30 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
Angular使用ng-messages与PHP进行表单数据验证
2016/12/28 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
webpack vue项目开发环境局域网访问方法
2018/03/20 Javascript
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
pm2发布node配置文件ecosystem.json详解
2019/05/15 Javascript
react实现antd线上主题动态切换功能
2019/08/12 Javascript
Echarts实现单条折线可拖拽效果
2019/12/19 Javascript
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
python在不同层级目录import模块的方法
2016/01/31 Python
python交互式图形编程实例(二)
2017/11/17 Python
python实现简单http服务器功能
2018/09/17 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
应届大专毕业生个人自荐信
2013/09/22 职场文书
小学亲子活动总结
2014/07/01 职场文书
运动会加油稿20字
2014/11/15 职场文书
单位更名证明
2015/06/18 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书
MySQL笔记 —SQL运算符
2022/01/18 MySQL
Vue的列表之渲染,排序,过滤详解
2022/02/24 Vue.js