微信{"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下的几个你可能没用过的功能
Aug 29 Javascript
JS代码同步文本框内容的实例方法
Jul 12 Javascript
js根据日期判断星座的示例代码
Jan 23 Javascript
JavaScript实现的一个日期格式化函数分享
Dec 06 Javascript
javascript 判断整数方法分享
Dec 16 Javascript
以JavaScript来实现WordPress中的二级导航菜单的方法
Dec 14 Javascript
浅谈jQuery中的eq()与DOM中element.[]的区别
Oct 28 Javascript
Angular学习笔记之集成三方UI框架、控件的示例
Mar 23 Javascript
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
Aug 10 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
Mar 29 Javascript
使用 Vue 实现一个虚拟列表的方法
Aug 20 Javascript
深入学习Vue nextTick的用法及原理
Oct 08 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
收音机玩机评测 406 篇视频合集
2020/03/11 无线电
德生1994机评
2021/03/02 无线电
使用GDB调试PHP代码,解决PHP代码死循环问题
2015/03/02 PHP
PHP使用Pear发送邮件(Windows环境)
2016/01/05 PHP
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
IE与firefox下Dhtml的一些区别小结
2009/12/02 Javascript
JavaScript的类型简单说明
2010/09/03 Javascript
jQuery图片播放8款精美插件分享
2013/02/17 Javascript
js与jQuery 获取父窗、子窗的iframe
2013/12/20 Javascript
JSON格式化输出
2014/11/10 Javascript
解决jQuery上传插件Uploadify出现Http Error 302错误的方法
2015/12/18 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
JavaScript实现解析INI文件内容的方法
2016/11/17 Javascript
JavaScript中this的用法实例分析
2016/12/19 Javascript
AngularJS实现网站换肤实例
2021/02/19 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
2017/06/28 Javascript
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
Vue-Router实现组件间跳转的三种方法
2017/11/07 Javascript
babel之配置文件.babelrc入门详解
2018/02/22 Javascript
详解webpack打包后如何调试的方法步骤
2018/11/07 Javascript
基于layPage插件实现两种分页方式浅析
2019/07/27 Javascript
九步学会Python装饰器
2015/05/09 Python
python套接字流重定向实例汇总
2016/03/03 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
Django 路由控制的实现代码
2018/11/08 Python
python中的列表与元组的使用
2019/08/08 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
canvas绘图按照contain或者cover方式适配并居中显示
2019/02/18 HTML / CSS
广告学毕业生求职信
2014/01/30 职场文书
腾讯广告词
2014/03/19 职场文书
2014年医院工作总结
2014/11/20 职场文书
2015年七一建党节活动总结
2015/03/20 职场文书
MySQL 使用自定义变量进行查询优化
2021/05/14 MySQL