微信{"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 相关文章推荐
常用js字符串判断方法整理
Oct 18 Javascript
jquery 缓存问题的几个解决方法
Nov 11 Javascript
javascript与Python快速排序实例对比
Aug 10 Javascript
jQuery Form表单取值的方法
Jan 11 Javascript
基于vue2的table分页组件实现方法
Mar 20 Javascript
QRCode.js:基于JQuery的生成二维码JS库的使用
Jun 23 jQuery
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
Oct 21 Javascript
微信小程序form表单组件示例代码
Jul 15 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
Aug 07 Javascript
Vue的H5页面唤起支付宝支付功能
Apr 18 Javascript
npm的lock机制解析
Jun 20 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
Nov 06 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
什么是MVC,好东西啊
2007/05/03 PHP
PHP开发框架总结收藏
2008/04/24 PHP
PHP数据库链接类(PDO+Access)实例分享
2013/12/05 PHP
php生成数组的使用示例 php全组合算法
2014/01/16 PHP
php支付宝手机网页支付类实例
2015/03/04 PHP
PHP实现多文件上传的方法
2015/07/08 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
2015/11/04 PHP
PHP设计模式之委托模式定义与用法简单示例
2018/08/13 PHP
实例讲解php实现多线程
2019/01/27 PHP
火狐下table中创建form导致两个table之间出现空白
2013/09/02 Javascript
JS设置获取cookies的方法
2014/01/26 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
简单理解vue中el、template、replace元素
2016/10/27 Javascript
自定义require函数让浏览器按需加载Js文件
2016/11/24 Javascript
原生js轮播特效
2017/05/18 Javascript
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
jQuery实现轮播图效果
2019/11/26 jQuery
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
详谈vue中router-link和传统a链接的区别
2020/07/22 Javascript
[00:14]PWL:老朋友Mushi拍VLOG与中国玩家问好
2020/11/04 DOTA
python 实现矩阵按对角线打印
2019/11/29 Python
Python 实现顺序高斯消元法示例
2019/12/09 Python
在notepad++中实现直接运行python代码
2019/12/18 Python
python使用SQLAlchemy操作MySQL
2020/01/02 Python
Python3 mmap内存映射文件示例解析
2020/03/23 Python
在keras下实现多个模型的融合方式
2020/05/23 Python
PyCharm 解决找不到新打开项目的窗口问题
2021/01/15 Python
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
高中毕业自我鉴定范文
2013/10/02 职场文书
师范大学应届生求职信
2013/11/21 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
2014年秋季新学期寄语
2014/08/02 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书
《分数的意义》教学反思
2016/02/20 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js
Go中使用gjson来操作JSON数据的实现
2022/08/14 Golang