微信{"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 相关文章推荐
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
Nov 03 Javascript
使用jquery写个更改表格行顺序的小功能
Apr 29 Javascript
jQuery源码解读之removeAttr()方法分析
Feb 20 Javascript
js实现简单鼠标跟随效果的方法
Apr 10 Javascript
javascript中callee与caller的区别分析
Apr 20 Javascript
程序员必知35个jQuery 代码片段
Nov 05 Javascript
jquery自定义插件开发之window的实现过程
May 06 Javascript
js仿支付宝多方框输入支付密码效果
Sep 27 Javascript
用vue-cli开发vue时的代理设置方法
Sep 20 Javascript
JS实现倒序输出的几种常用方法示例
Apr 13 Javascript
Vue v-bind动态绑定class实例方法
Jan 15 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
Jul 29 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
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
php下获取http状态的实现代码
2014/05/09 PHP
php中instanceof 与 is_a()区别分析
2015/03/03 PHP
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
2009/05/25 Javascript
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
file控件选择上传文件确定后触发的js事件是哪个
2014/03/17 Javascript
jquery的ajax异步请求接收返回json数据实例
2014/06/16 Javascript
js中iframe调用父页面的方法
2014/10/30 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
举例说明JavaScript中的实例对象与原型对象
2016/03/11 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
浅谈Three.js截图并下载的大坑
2019/11/01 Javascript
详解vue-flickity的fullScreen功能实现
2020/04/07 Javascript
[46:50]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
简化Python的Django框架代码的一些示例
2015/04/20 Python
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
使用11行Python代码盗取了室友的U盘内容
2018/10/23 Python
python+Django+pycharm+mysql 搭建首个web项目详解
2019/11/29 Python
pandas 对group进行聚合的例子
2019/12/27 Python
ipython jupyter notebook中显示图像和数学公式实例
2020/04/15 Python
Python requests接口测试实现代码
2020/09/08 Python
linux mint中搜狗输入法导致pycharm卡死的问题
2020/10/28 Python
Vilebrequin美国官方网上商店:法国豪华泳装品牌
2020/02/22 全球购物
为数据库创建索引都需要注意些什么
2012/07/17 面试题
省文明单位申报材料
2014/05/08 职场文书
优质服务演讲稿
2014/05/14 职场文书
土建工程师岗位职责
2014/06/10 职场文书
2015年生产车间工作总结
2015/04/22 职场文书
仰望星空观后感
2015/06/10 职场文书
李强优秀员工观后感
2015/06/16 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang
详细总结Python常见的安全问题
2021/05/21 Python