微信{"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 AppendChild与insertBefore用法详细对比
Dec 16 Javascript
javascript获得当前的信息的一些常用命令
Feb 25 Javascript
js实现的倒计时按钮实例
Jun 24 Javascript
JavaScript中的return语句简单介绍
Dec 07 Javascript
使用jQuery判断浏览器滚动条位置的方法
May 30 Javascript
js调用刷新界面的几种方式
May 03 Javascript
详解使用nvm安装node.js
Jul 18 Javascript
js中的数组对象排序分析
Dec 11 Javascript
seajs和requirejs模块化简单案例分析
Aug 26 Javascript
layer.alert回调函数执行关闭弹窗的实例
Sep 11 Javascript
JavaScript 反射和属性赋值实例解析
Oct 28 Javascript
vue 实现基础组件的自动化全局注册
Dec 25 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
对Session和Cookie的区分与解释
2007/03/16 PHP
php保存信息到当前Session的方法
2015/03/16 PHP
不能再简单的无闪刷新验证码原理很简单
2007/11/05 Javascript
javascript document.compatMode兼容性
2010/02/23 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
2012/01/20 Javascript
javascript作用域容易记错的两个地方分析
2012/06/22 Javascript
DIV+CSS+JS不间断横向滚动实现代码
2013/03/19 Javascript
jquery打开直接跳到网页最下面、最低端实现代码
2013/04/22 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
JavaScript将一个数组插入到另一个数组的方法
2015/03/19 Javascript
JS+CSS实现的经典tab选项卡效果代码
2015/09/16 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
2016/09/17 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
jquery Ajax 全局调用封装实例详解
2017/01/16 Javascript
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
js处理包含中文的字符串实例
2017/10/11 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
vue解决一个方法同时发送多个请求的问题
2018/09/25 Javascript
jquery实现两个div中的元素相互拖动的方法分析
2020/04/05 jQuery
JS脚本实现定时到网站上签到/签退功能
2020/04/22 Javascript
[01:01:41]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第二场 1月31日
2021/03/11 DOTA
在Python的列表中利用remove()方法删除元素的教程
2015/05/21 Python
详解Python用三种方式统计词频的方法
2019/07/29 Python
MATLAB数学建模之画图汇总
2020/07/16 Python
python字典key不能是可以是啥类型
2020/08/04 Python
实例讲解CSS3中的box-flex弹性盒属性布局
2016/06/09 HTML / CSS
英国复古服装购物网站:Collectif
2019/10/30 全球购物
绿化工程实施方案
2014/03/17 职场文书
学习张林森心得体会
2014/09/10 职场文书
服务员岗位职责范本
2015/04/09 职场文书
预备党员群众意见
2015/06/01 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书
pytorch 如何使用batch训练lstm网络
2021/05/28 Python