微信{"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 相关文章推荐
关于Jqzoom的使用心得 jquery放大镜效果插件
Apr 12 Javascript
如何将JS的变量值传递给ASP变量
Dec 10 Javascript
javascript获取隐藏dom的宽高 具体实现
Jul 14 Javascript
JavaScript原生对象之Number对象的属性和方法详解
Mar 13 Javascript
浅谈javascript中的call、apply、bind
Mar 06 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
Oct 26 Javascript
AngularJS执行流程详解
Feb 17 Javascript
JS失效 提示HTML1114: (UNICODE 字节顺序标记)的代码页 utf-8 覆盖(META 标记)的冲突的代码页 utf-8
Jun 23 Javascript
小程序实现多选框功能
Oct 30 Javascript
微信小程序模板消息推送的两种实现方式
Aug 27 Javascript
node.JS二进制操作模块buffer对象使用方法详解
Feb 06 Javascript
分享15个Webpack实用的插件!!!
Mar 31 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
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
十天学会php之第八天
2006/10/09 PHP
PHP生成自适应大小的缩略图类及使用方法分享
2014/05/06 PHP
php对关联数组循环遍历的实现方法
2015/03/13 PHP
如何使用PHP Embed SAPI实现Opcodes查看器
2015/11/10 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
Sort()函数的多种用法
2016/03/20 Javascript
JS构造函数与原型prototype的区别介绍
2016/07/04 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
js入门之Function函数的使用方法【新手必看】
2016/11/22 Javascript
AngularJS实现网站换肤实例
2021/02/19 Javascript
angular中实现li或者某个元素点击变色的两种方法
2017/07/27 Javascript
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
Vue中添加手机验证码组件功能操作方法
2017/12/07 Javascript
javascript实现文件拖拽事件
2018/03/29 Javascript
[01:31](回顾)杀出重围,决战TI之巅
2014/07/01 DOTA
使用Python求解最大公约数的实现方法
2015/08/20 Python
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
python脚本执行CMD命令并返回结果的例子
2019/08/14 Python
Django发送邮件功能实例详解
2019/09/02 Python
为什么说Python可以实现所有的算法
2019/10/04 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
Anaconda+Pycharm环境下的PyTorch配置方法
2020/03/13 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
如何向scrapy中的spider传递参数的几种方法
2020/11/18 Python
python 实现图片批量压缩的示例
2020/12/18 Python
任命书格式
2014/06/05 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
2014年信贷员工作总结
2014/11/18 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
2015年高中班级工作总结
2015/07/21 职场文书