微信{"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 相关文章推荐
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
Jun 19 Javascript
js设置组合快捷键/tabindex功能的方法
Nov 21 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
Jul 18 Javascript
基于jQuery实现文本框缩放以及上下移动功能
Nov 24 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
Jun 05 Javascript
js实现图片放大和拖拽特效代码分享
Sep 05 Javascript
基于javascript制作经典传统的拼图游戏
Mar 22 Javascript
Bootstrap表单Form全面解析
Jun 13 Javascript
详解Node.js如何开发命令行工具
Aug 14 Javascript
微信小程序项目总结之点赞 删除列表 分享功能
Jun 25 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
Jan 24 Javascript
vue实现自定义H5视频播放器的方法步骤
Jul 01 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
「OVERLORD」动画重要删减!雅儿贝德的背叛?至尊猎杀队结成
2020/04/09 日漫
PHP+MYSQL会员系统的登陆即权限判断实现代码
2011/09/23 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
2014/05/07 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
2013/11/21 Javascript
flash遮住div问题的正确解决方法
2014/02/27 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
vue-router跳转页面的方法
2017/02/09 Javascript
原生js 封装get ,post, delete 请求的实例
2017/08/11 Javascript
JS设计模式之观察者模式实现实时改变页面中金额数的方法
2018/02/05 Javascript
package.json中homepage属性的作用详解
2020/03/11 Javascript
vue计算属性+vue中class与style绑定(推荐)
2020/03/30 Javascript
Python删除指定目录下过期文件的2个脚本分享
2014/04/10 Python
python正则表达式re模块详解
2014/06/25 Python
编写简单的Python程序来判断文本的语种
2015/04/07 Python
Python自动生产表情包
2017/03/17 Python
详解Python异常处理中的Finally else的功能
2017/12/29 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
Django3中的自定义用户模型实例详解
2020/08/23 Python
Pandas的数据过滤实现
2021/01/15 Python
阿里健康官方海外旗舰店:阿里健康国际自营
2017/11/24 全球购物
Bibloo匈牙利:女装、男装、童装及鞋子和配饰
2019/04/14 全球购物
优秀员工个人的自我评价
2013/11/29 职场文书
会议室标语
2014/06/21 职场文书
联片教研活动总结
2014/07/01 职场文书
颂军魂爱军营演讲稿
2014/09/13 职场文书
2014年度党员自我评议
2014/09/13 职场文书
产品委托授权书范本
2014/09/16 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
庆七一活动简报
2015/07/20 职场文书
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android
MySQL实现字段分割一行转多行的示例代码
2022/07/07 MySQL