微信{"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 相关文章推荐
JavaScript 脚本将当地时间转换成其它时区
Mar 19 Javascript
jQuery Selector选择器小结
May 06 Javascript
图片Slider 带左右按钮的js示例
Aug 30 Javascript
js中键盘事件实例简析
Jan 10 Javascript
JavaScript兼容性总结之获取非行间样式案例
Aug 07 Javascript
ES6中Class类的静态方法实例小结
Oct 28 Javascript
vue2.0 自定义 饼状图 (Echarts)组件的方法
Mar 02 Javascript
JavaScript实现预览本地上传图片功能完整示例
Mar 08 Javascript
微信小程序实现图片上传
May 23 Javascript
p5.js码绘“跳动的小正方形”的实现代码
Oct 22 Javascript
JS Html转义和反转义(html编码和解码)的实现与使用方法总结
Mar 10 Javascript
vue 插槽简介及使用示例
Nov 19 Vue.js
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中的Traits
2015/07/29 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
laravel migrate初学常见错误的解决方法
2017/10/11 PHP
Laravel框架模板继承操作示例
2018/06/11 PHP
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
jquery垂直公告滚动实现代码
2013/12/08 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
Javascript的严格模式strict mode详细介绍
2014/06/06 Javascript
JQuery动态添加和删除表格行的方法
2015/03/09 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
jQuery替换节点元素的操作方法
2018/03/18 jQuery
Vue 按键修饰符处理事件的方法
2018/05/04 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
2019/03/19 jQuery
vue 项目build错误异常的解决方法
2019/04/22 Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
2019/07/15 Javascript
浅谈vue-router路由切换 组件重用挖下的坑
2019/11/01 Javascript
vue路由缓存的几种实现方式小结
2020/02/02 Javascript
[51:52]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
2014/08/15 Python
python 3.5下xadmin的使用及修复源码bug
2017/05/10 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
python实现门限回归方式
2020/02/29 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
2020/07/13 Python
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
Kathmandu英国网站:新西兰户外运动品牌
2017/03/27 全球购物
智能旅行箱:Horizn Studios
2018/04/30 全球购物
德国电子产品购物网站:TechInTheBasket德国
2018/12/07 全球购物
初级软件工程师面试题 Junior Software Engineer Interview
2015/02/15 面试题
幼儿园六一儿童节主持节目串词
2014/03/21 职场文书
企业爱岗敬业演讲稿
2014/09/04 职场文书
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
python自动化测试通过日志3分钟定位bug
2021/11/20 Python
苹果发布了MagSafe固件更新,可以不外接电源实现最高7.5W充电
2022/04/21 数码科技
德生TECSUN S-2000使用手册文字版
2022/05/10 无线电