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中常用检测字符串相关函数汇总
Apr 15 Python
python中pass语句用法实例分析
Apr 30 Python
python3.5实现socket通讯示例(TCP)
Feb 07 Python
Python有序字典简单实现方法示例
Sep 28 Python
Python语言描述连续子数组的最大和
Jan 04 Python
详解将Django部署到Centos7全攻略
Sep 26 Python
Python之两种模式的生产者消费者模型详解
Oct 26 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
Apr 04 Python
Mac安装python3的方法步骤
Aug 09 Python
Python绘制股票移动均线的实例
Aug 24 Python
Python过滤掉numpy.array中非nan数据实例
Jun 08 Python
教你漂亮打印Pandas DataFrames和Series
May 29 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
如何开始收听短波广播
2021/03/01 无线电
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
php实现水仙花数的4个示例分享
2014/04/08 PHP
jQuery的实现原理的模拟代码 -2 数据部分
2010/08/01 Javascript
基于jQuery的动态表格插件
2011/03/28 Javascript
Dom 结点创建 基础知识
2011/10/01 Javascript
基于jquery的拖动布局插件
2011/11/25 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
ES6学习教程之对象的扩展详解
2017/05/02 Javascript
websocket+node.js实现实时聊天系统问题咨询
2017/05/17 Javascript
利用 spin.js 生成等待效果(js 等待效果)
2017/06/25 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
2017/08/16 Javascript
NodeJS父进程与子进程资源共享原理与实现方法
2018/03/16 NodeJs
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
详解Python正则表达式re模块
2019/03/19 Python
Python基础之条件控制操作示例【if语句】
2019/03/23 Python
详解python持久化文件读写
2019/04/06 Python
Django REST framework 分页的实现代码
2019/06/19 Python
Python实现的微信红包提醒功能示例
2019/08/22 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
2019/09/03 Python
python使用turtle库绘制奥运五环
2020/02/24 Python
Appium+Python实现简单的自动化登录测试的实现
2021/01/26 Python
CSS3简单实现照片墙
2014/12/12 HTML / CSS
工厂厂长的职责
2013/12/12 职场文书
2014年移动公司工作总结
2014/12/08 职场文书
公司仓管员岗位职责
2015/04/01 职场文书
聘任书的格式及模板
2019/10/28 职场文书
mysql数据插入覆盖和时间戳的问题及解决
2022/03/25 MySQL
Python开发五子棋小游戏
2022/04/28 Python