微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}


Posted in Javascript onOctober 12, 2018

{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}

声明:是已认证的服务号 

前置说明

网页授权获取用户基本信息:两种 scope 域

https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope={2}&state=ok#wechat_redirect

snsapi_base 不需要用户点同意,直接跳转到授权后的页面,只能用于获取openid,不能获取用户基本信息

snsapi_userinfo 会征求用户同意,授权后,可以获取用户基本信息

为了方便大家理解,把接口返回的数据展示下吧

{

  "access_token":"YNTxefBAfNW565Q4MAI..................j-hLNzin9Vq6BnvcvJ8NKHdBSRhkLjHQliLiNQc",

  "expires_in":7200,

  "refresh_token":"EYmfmvUg0PGtOWiLpb..................T8O2UyKL95_Da23fLV-nYFDgnt14Ljl_x_zCMY",

  "openid":"oYbGRs8MmU6bESxXcX2Z0rFRivjQ",

  "scope":"snsapi_base"

}

{

  "access_token":"IdFXvRMq3J6vXUcZ0iQ..................G1xbkGJEnbnSKQ4G0nyQ5vmNSKF4a4DzGu64",

  "expires_in":7200,

  "refresh_token":"J8ot4JWphxwvyAY3I9r..................krET6P-8dot_-_tQfFoLUQI3EI-NT-I-degNRGumA",

  "openid":"oYbGRs8MmU6bESxXcX2Z0rFRivjQ",

  "scope":"snsapi_userinfo"

}

问题再现

1  首次使用 scope=snsapi_base 进行网页授权

2  拿到 code 后调用接口 https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code

3  根据上一步获取的 openid 和 access_token 调用接口 https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN 获取用户基本信息

4  获取失败:返回 {"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}

失败原因

scope=snsapi_base 时,只能用于获取openid,不能获取用户的基本信息(获取用户信息,需要用户同意。scope=snspai_base 授权时,并没有征求用户同意授权这一操作)

问题来了

(有时候成功,有时候失败)

为什么有的时候(或者另外一个公众号),按上面的步骤,能成功获取到用户的基本信息?

“48001,api unauthorized”之所以让很多人迷惑不解,就在于这个问题

先直接上解决方式,再说原因

使用 scope=snsapi_userinfo 进行一次网页授权,步骤跟上面【问题再现】一样,成功获取到用户的微信基本信息。

再使用 scope=snsapi_base 重复一遍【问题再现】,这次成功了!!!

原因

上面的实验其实已经说明原因了,怕有些人一下子理解不了,所以

第一次使用 scope=snsapi_base,这是不需要经过用户同意的授权,不能获取用户的基本信息

第二次使用 scope=snsapi_userinfo,这是需要用户点击同意的授权,能获取到用户的基本信息

使用 scope=snsapi_userinfo,用户同意授权后,在一定时间内,不需要用户的同意,也可以获取用户基本信息(此时使用 scope=snsapi_base 也能获取到用户基本信息:甚至参数openid的值随便填都没关系,可以是空格,但不能为空)

注意

使用 scope=snsapi_userinfo,用户同意授权后,access_token 的有效期是7200秒(两小时)。

access_token 失效后,可以使用 refresh_token 调用接口 https://api.weixin.qq.com/sns/oauth2/refresh_token?appid={0}&grant_type=refresh_token&refresh_token={1} 重新获取 access_token(有效期7200秒)

(终于知道 refresh_token 是干嘛用的了吧)

refresh_token 的有效期是30天,即用户同意授权后,在30天内,不再需要用户同意授权,就可以获取用户基本信息

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)
Dec 02 Javascript
vue.js的提示组件
Mar 02 Javascript
discuz表情的JS提取方法分析
Mar 22 Javascript
angular 用拦截器统一处理http请求和响应的方法
Jun 08 Javascript
vue小图标favicon不显示的解决方案
Sep 19 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
Jan 23 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
Mar 13 Javascript
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
Aug 28 Javascript
微信小程序云开发之云函数详解
May 16 Javascript
Layui数据表格 前后端json数据接收的方法
Sep 19 Javascript
JavaScript canvas仿代码流瀑布
Feb 10 Javascript
react的hooks的用法详解
Oct 12 Javascript
JS编写兼容IE6,7,8浏览器无缝自动轮播
Oct 12 #Javascript
Vue cli3 库模式搭建组件库并发布到 npm的流程
Oct 12 #Javascript
详解vue服务端渲染浏览器端缓存(keep-alive)
Oct 12 #Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
Oct 12 #Javascript
在JS循环中使用async/await的方法
Oct 12 #Javascript
代码实例ajax实现点击加载更多数据图片
Oct 12 #Javascript
vue项目环境变量配置的实现方法
Oct 12 #Javascript
You might like
建立文件交换功能的脚本(二)
2006/10/09 PHP
php防注
2007/01/15 PHP
php常用数组函数实例小结
2016/12/29 PHP
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
js实现局部页面打印预览原理及示例代码
2014/07/03 Javascript
JavaScript中误用/g导致的正则test()无法正确重复执行的解决方案
2016/07/27 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
JS插件plupload.js实现多图上传并显示进度条
2016/11/29 Javascript
浅谈JavaScript的函数及作用域
2016/12/30 Javascript
jquery.cookie.js的介绍与使用方法
2017/02/09 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
用户管理的设计_jquery的ajax实现二级联动效果
2017/07/13 jQuery
利用vue + element实现表格分页和前端搜索的方法
2017/12/25 Javascript
Vue 中使用 CSS Modules优雅方法
2018/04/09 Javascript
Vue下路由History模式打包后页面空白的解决方法
2018/06/29 Javascript
微信小程序开发之路由切换页面重定向问题
2018/09/18 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
Python中的index()方法使用教程
2015/05/18 Python
Python实现希尔排序算法的原理与用法实例分析
2017/11/23 Python
python 分离文件名和路径以及分离文件名和后缀的方法
2018/10/21 Python
Python 测试框架unittest和pytest的优劣
2020/09/26 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
临床医学专业学生的自我评价分享
2013/11/21 职场文书
工艺员岗位职责
2014/02/11 职场文书
《我不是最弱小的》教学反思
2014/02/23 职场文书
秸秆管理实施方案
2014/03/15 职场文书
海飞丝的广告词
2014/03/20 职场文书
会计专业自荐信
2014/06/03 职场文书
卫生院义诊活动总结
2015/05/07 职场文书
告诉你一个秘密:富人致富的五大优点
2019/07/11 职场文书
PHP命令行与定时任务
2021/04/01 PHP
只需要100行Python代码就可以实现的贪吃蛇小游戏
2021/05/27 Python