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 __setattr__、 __getattr__、 __delattr__、__call__用法示例
Mar 06 Python
python将图片文件转换成base64编码的方法
Mar 14 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
Dec 18 Python
python调用opencv实现猫脸检测功能
Jan 15 Python
Python进程间通信Queue消息队列用法分析
May 22 Python
python实现控制COM口的示例
Jul 03 Python
python实现集中式的病毒扫描功能详解
Jul 09 Python
Python (Win)readline和tab补全的安装方法
Aug 27 Python
在python shell中运行python文件的实现
Dec 21 Python
Xadmin+rules实现多选行权限方式(级联效果)
Apr 07 Python
windows上彻底删除jupyter notebook的实现
Apr 13 Python
python删除指定列或多列单个或多个内容实例
Jun 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
PH P5.2至5.5、5.6的新增功能详解
2014/07/14 PHP
PHP实现类似题库抽题效果
2018/08/16 PHP
解决Laravel无法使用COOKIE和SESSION的问题
2019/10/16 PHP
JavaScript和JQuery实用代码片段(一)
2010/04/07 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
js实时获取系统当前时间实例代码
2013/06/28 Javascript
javascript轻量级模板引擎juicer使用指南
2014/06/22 Javascript
jquery插件推荐 jquery.cookie
2014/11/09 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
3个可以改善用户体验的AngularJS指令介绍
2015/06/18 Javascript
自己动手写的javascript前端等待控件
2015/10/30 Javascript
JSP防止网页刷新重复提交数据的几种方法
2016/11/19 Javascript
jquery实现输入框实时输入触发事件代码
2016/12/21 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
JavaScript中使用Async实现异步控制
2017/08/15 Javascript
在layui下对元素进行事件绑定的实例
2019/09/06 Javascript
解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
2019/09/27 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
跟老齐学Python之编写类之三子类
2014/10/11 Python
Python 多进程和数据传递的理解
2017/10/09 Python
Tensorflow环境搭建的方法步骤
2018/02/07 Python
python书籍信息爬虫实例
2018/03/19 Python
使用python获取(宜宾市地震信息)地震信息
2019/06/20 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
Python count函数使用方法实例解析
2020/03/23 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
Python自带的IDE在哪里
2020/07/01 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
Python爬虫之Selenium下拉框处理的实现
2020/12/04 Python
配件采购员岗位职责
2013/12/03 职场文书
酒店节能降耗方案
2014/05/08 职场文书
学习雷锋精神演讲稿
2014/05/10 职场文书
落实八项规定专题民主生活会对照检查材料
2014/09/15 职场文书
八达岭长城导游词
2015/01/30 职场文书
导游词之青岛崂山
2019/12/27 职场文书
mysql数据插入覆盖和时间戳的问题及解决
2022/03/25 MySQL