微信{"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 function的正确书写方法
Aug 02 Javascript
javascript继承机制实例详解
Nov 20 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
Jun 19 Javascript
jquery专业的导航菜单特效代码分享
Aug 29 Javascript
window.onerror()的用法与实例分析
Jan 27 Javascript
详解微信JS-SDK选择图片遇到的坑
Aug 15 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
Sep 08 Javascript
使用Vue实现移动端左滑删除效果附源码
May 16 Javascript
基于form-data请求格式详解
Oct 29 Javascript
Vue实现导航栏的显示开关控制
Nov 01 Javascript
jQuery实现简易聊天框
Feb 08 jQuery
jQuery实现朋友圈查看图片
Sep 11 jQuery
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
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
2011/04/07 PHP
PHP中::、->、self、$this几种操作符的区别介绍
2013/04/24 PHP
浅析PHP微信支付通知的处理方式
2014/05/25 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
浅谈PHP之ThinkPHP框架使用详解
2020/07/21 PHP
accesskey 提交
2006/06/26 Javascript
JavaScript 异步调用框架 (Part 1 - 问题 & 场景)
2009/08/03 Javascript
js类的静态属性和实例属性的理解
2009/10/01 Javascript
JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)
2009/11/04 Javascript
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
js 调用父窗口的具体实现代码
2013/07/15 Javascript
jquery选择器之属性过滤选择器详解
2014/01/27 Javascript
JavaScript Window浏览器对象模型方法与属性汇总
2015/04/20 Javascript
js实现可折叠展开的手风琴菜单效果
2015/09/07 Javascript
JavaScript代码性能优化总结篇
2016/05/15 Javascript
在 Angular 中实现搜索关键字高亮示例
2017/03/21 Javascript
Node.js的Koa实现JWT用户认证方法
2018/05/05 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
VUE组件中的 Drawer 抽屉实现代码
2019/08/06 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
使用Python的Treq on Twisted来进行HTTP压力测试
2015/04/16 Python
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
Python实现的爬取百度贴吧图片功能完整示例
2019/05/10 Python
python,Django实现的淘宝客登录功能示例
2019/06/12 Python
使用python实现对元素的长截图功能
2019/11/14 Python
python爬虫开发之urllib模块详细使用方法与实例全解
2020/03/09 Python
扩大国家免疫规划实施方案
2014/03/21 职场文书
党的生日演讲稿
2014/09/10 职场文书
给客户的感谢信
2015/01/21 职场文书
催款函怎么写
2015/06/24 职场文书
小学毕业感言200字
2015/07/30 职场文书
怎样评估创业计划书是否有可行性?
2019/08/07 职场文书
详解TypeScript中的类型保护
2021/04/29 Javascript
Nebula Graph解决风控业务实践
2022/03/31 MySQL