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中变量的作用域
Jun 16 Python
python爬虫爬取网页表格数据
Mar 07 Python
如何用Python实现简单的Markdown转换器
Jul 16 Python
python生成多个只含0,1元素的随机数组或列表的实例
Nov 12 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
Jun 25 Python
Python读写文件模式和文件对象方法实例详解
Sep 17 Python
Python 脚本拉取 Docker 镜像问题
Nov 10 Python
Python Pillow.Image 图像保存和参数选择方式
Jan 09 Python
Tensorflow中tf.ConfigProto()的用法详解
Feb 06 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
Feb 14 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
Feb 16 Python
PyTorch中Tensor的数据类型和运算的使用
Sep 03 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编码转换问题
2015/07/28 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
PHP 模拟登陆功能实例详解
2019/09/10 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
ie支持function.bind()方法实现代码
2012/12/27 Javascript
Node.js文件操作详解
2014/08/16 Javascript
简要了解jQuery移动web开发的响应式布局设计
2015/12/04 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
AngularJS API之copy深拷贝详解及实例
2016/09/14 Javascript
javascript滚轮控制模拟滚动条
2016/10/19 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
Vue不能观察到数组length的变化
2018/06/08 Javascript
实例详解Node.js 函数
2018/06/10 Javascript
vue实现抖音时间转盘
2019/09/08 Javascript
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
javascript实现固定侧边栏
2021/02/09 Javascript
[10:34]DOTA2上海特级锦标赛全纪录
2016/03/25 DOTA
Python两个整数相除得到浮点数值的方法
2015/03/18 Python
python+Django+apache的配置方法详解
2016/06/01 Python
在Python的Flask框架中构建Web表单的教程
2016/06/04 Python
python3读取MySQL-Front的MYSQL密码
2017/05/03 Python
vue.js实现输入框输入值内容实时响应变化示例
2018/07/07 Python
对python以16进制打印字节数组的方法详解
2019/01/24 Python
对Python 多线程统计所有csv文件的行数方法详解
2019/02/12 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
numpy:找到指定元素的索引示例
2019/11/26 Python
python的time模块和datetime模块实例解析
2019/11/29 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
丝芙兰美国官网:SEPHORA美国
2016/08/03 全球购物
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
会议活动邀请函
2014/01/27 职场文书
学校党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
2015年酒店前台工作总结
2015/04/20 职场文书
张丽莉事迹观后感
2015/06/16 职场文书