微信{"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 相关文章推荐
JavaScript的document对象和window对象详解
Dec 30 Javascript
BootStrap实用代码片段之一
Mar 22 Javascript
javascript 常用验证函数总结
Jun 28 Javascript
AngularJS 实现JavaScript 动画效果详解
Sep 08 Javascript
jquery 抽奖小程序实现代码
Oct 12 Javascript
JavaScript中利用for循环遍历数组
Jan 15 Javascript
JS原型继承四步曲及原型继承图一览
Nov 28 Javascript
element-ui 表格实现单元格可编辑的示例
Feb 26 Javascript
react 创建单例组件的方法
Apr 26 Javascript
微信小程序 如何保持登录状态
Aug 16 Javascript
如何解决日期函数new Date()浏览器兼容性问题
Sep 11 Javascript
JavaScript数组去重实现方法小结
Jan 17 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
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
PHP EOT定界符的使用详解
2008/09/30 PHP
PHP命名空间(Namespace)简明教程
2014/06/11 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
2018/04/12 PHP
tp5.1 框架查询表达式用法详解
2020/05/25 PHP
jQuery dialog 异步调用ashx,webservice数据的代码
2010/08/03 Javascript
js 分页全选或反选标识实现代码
2011/08/09 Javascript
js原型链原理看图说明
2012/07/07 Javascript
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
JavaScript中获取样式的原生方法小结
2014/10/08 Javascript
js生成验证码并直接在前端判断
2015/05/15 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
2015/10/16 Javascript
javascript表单事件处理方法详解
2016/05/15 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
D3.js实现折线图的方法详解
2016/09/21 Javascript
js实现字符全排列算法的简单方法
2017/05/01 Javascript
微信小程序 支付功能(前端)的实现
2017/05/24 Javascript
jQuery 控制文本框自动缩小字体填充
2017/06/16 jQuery
AngularJS实现单一页面内设置跳转路由的方法
2017/06/28 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
2020/08/04 Javascript
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
[01:16:16]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第二场 1月8日
2021/03/11 DOTA
python 获取et和excel的版本号
2009/04/09 Python
对python读写文件去重、RE、set的使用详解
2018/12/11 Python
python3用PIL把图片转换为RGB图片的实例
2019/07/04 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
简单介绍django提供的加密算法
2019/12/18 Python
python numpy数组复制使用实例解析
2020/01/10 Python
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
公司户外活动总结
2014/07/04 职场文书
小学运动会通讯稿
2015/07/18 职场文书
2015年国庆节标语大全
2015/07/30 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书