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中MYSQLdb出现乱码的解决方法
Oct 11 Python
python列表的常用操作方法小结
May 21 Python
python3利用Dlib19.7实现人脸68个特征点标定
Feb 26 Python
解决python replace函数替换无效问题
Jan 18 Python
Python通过正则库爬取淘宝商品信息代码实例
Mar 02 Python
Python实现猜年龄游戏代码实例
Mar 25 Python
python实现逢七拍腿小游戏的思路详解
May 26 Python
python如何变换环境
Jul 21 Python
Python自动化测试中yaml文件读取操作
Aug 20 Python
python pip如何手动安装二进制包
Sep 30 Python
python使用torch随机初始化参数
Mar 22 Python
python实现双向链表原理
May 25 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 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
ThinkPHP使用Smarty第三方插件方法小结
2016/03/19 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
2016/03/21 PHP
PHP购物车类Cart.class.php定义与用法示例
2016/07/20 PHP
PHP实现带进度条的Ajax文件上传功能示例
2019/07/02 PHP
如何重写Laravel异常处理类详解
2020/12/20 PHP
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
Js获取事件对象代码
2010/08/05 Javascript
jQuery基于cookie实现的购物车实例分析
2015/12/24 Javascript
React Native实现进度条弹框的示例代码
2017/07/17 Javascript
浅析vue中常见循环遍历指令的使用 v-for
2018/04/18 Javascript
从vue源码看props的用法
2019/01/09 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
微信小程序多列表渲染数据开关互不影响的实现
2020/06/05 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
react-intl实现React国际化多语言的方法
2020/09/27 Javascript
js定时器出现第一次延迟的原因及解决方法
2021/01/04 Javascript
用Python的Django框架完成视频处理任务的教程
2015/04/02 Python
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
基于python的图片修复程序(实现水印去除)
2018/06/04 Python
Python3 执行系统命令并获取实时回显功能
2019/07/09 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
Python银行系统实战源码
2019/10/25 Python
django框架cookie和session用法实例详解
2019/12/10 Python
python解释器安装教程的方法步骤
2020/07/02 Python
HTML5进阶段内联标签汇总(小篇)
2016/07/13 HTML / CSS
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
精美的手工家居和生活用品:Nkuku
2019/11/01 全球购物
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
物业经理自我鉴定
2014/03/03 职场文书
幼儿园教研活动总结
2014/04/30 职场文书
微笑服务演讲稿
2014/05/13 职场文书
庆元旦主持词
2015/07/06 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书
Vue图片裁剪组件实例代码
2021/07/02 Vue.js
Javascript使用integrity属性进行安全验证
2021/11/07 Javascript