微信{"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自定义事件介绍
Aug 29 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
Mar 13 Javascript
javascript实现复选框超过限制即弹出警告框的方法
Feb 25 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
Jun 15 Javascript
基于jQuery插件实现点击小图显示大图效果
May 11 Javascript
Javascript之Date对象详解
Jun 07 Javascript
微信小程序 表单Form实例详解(附源码)
Dec 22 Javascript
JavaScript之生成器_动力节点Java学院整理
Jun 30 Javascript
JS实现数组简单去重及数组根据对象中的元素去重操作示例
Jan 05 Javascript
Rollup处理并打包JS文件项目实例代码
May 31 Javascript
Cocos2d实现刮刮卡效果
Dec 20 Javascript
Vue分页效果与购物车功能
Dec 13 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
全国FM电台频率大全 - 11 浙江省
2020/03/11 无线电
PHP中冒号、endif、endwhile、endfor使用介绍
2010/04/28 PHP
php学习笔记之面向对象编程
2012/12/29 PHP
php生成唯一数字id的方法汇总
2015/11/18 PHP
WordPress开发中的get_post_custom()函数使用解析
2016/01/04 PHP
Javascript中的数学函数
2007/04/04 Javascript
js用图作提交按钮或超连接
2008/03/26 Javascript
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
纯文字版返回顶端的js代码
2013/08/01 Javascript
javascript按位非运算符的使用方法
2013/11/14 Javascript
node.js中的fs.chmod方法使用说明
2014/12/18 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
2016/06/10 Javascript
Laydate时间组件在火狐浏览器下有多时间输入框时只能给第一个输入框赋值的解决方法
2016/08/18 Javascript
自制微信公众号一键排版工具
2016/09/22 Javascript
使用Bootstrap美化按钮实例代码(demo)
2017/02/03 Javascript
vue-router路由参数刷新消失的问题解决方法
2017/06/17 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
Vue源码解析之数据响应系统的使用
2019/04/24 Javascript
tweenjs缓动算法的使用实例分析
2019/08/26 Javascript
微信小程序实现签到弹窗动画
2020/09/21 Javascript
python中的内置函数getattr()介绍及示例
2014/07/20 Python
Python多进程同步Lock、Semaphore、Event实例
2014/11/21 Python
Python处理RSS、ATOM模块FEEDPARSER介绍
2015/02/18 Python
python http接口自动化脚本详解
2018/01/02 Python
Python输出\u编码将其转换成中文的实例
2018/12/15 Python
python自动化测试之如何解析excel文件
2019/06/27 Python
python实现拉普拉斯特征图降维示例
2019/11/25 Python
python3实现从kafka获取数据,并解析为json格式,写入到mysql中
2019/12/23 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
ProBikeKit德国:在线公路自行车专家
2018/06/03 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
2012/05/30 面试题
2014年大学学生会工作总结
2014/12/02 职场文书
故宫导游词
2015/01/31 职场文书