微信{"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 浮点数运算 精度问题
Oct 06 Javascript
jquery实现输入框动态增减的实例代码
Jul 14 Javascript
鼠标焦点离开文本框时验证的js代码
Jul 19 Javascript
通过onmouseover选项卡实现img图片的变化
Feb 12 Javascript
JavaScript中如何通过arguments对象实现对象的重载
May 12 Javascript
快速学习AngularJs HTTP响应拦截器
Dec 31 Javascript
JavaScript Ajax编程 应用篇
Jul 02 Javascript
JS图片压缩(pc端和移动端都适用)
Jan 12 Javascript
php简单数据库操作类的封装
Jun 08 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
Oct 12 Javascript
JSON是什么?有哪些优点?JSON和XML的区别?
Apr 29 Javascript
js实现随机点名功能
Dec 23 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
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
PHP实现更改hosts文件的方法示例
2017/08/08 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
使用JQuery进行跨域请求
2010/01/25 Javascript
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
6款经典实用的jQuery小插件及源码(对话框/提示工具等等)
2013/02/04 Javascript
如何使用json在前后台进行数据传输实例介绍
2013/04/11 Javascript
javascript简单事件处理和with用法介绍
2013/09/16 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
常用的几段javascript代码分享
2014/03/25 Javascript
Javascript的表单验证长度
2016/03/16 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
nuxt+axios解决前后端分离SSR的示例代码
2017/10/24 Javascript
React Native使用百度Echarts显示图表的示例代码
2017/11/07 Javascript
Vue.js实现可配置的登录表单代码详解
2018/03/29 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
Python入门_浅谈for循环、while循环
2017/05/16 Python
Python实现求两个csv文件交集的方法
2017/09/06 Python
python中实现指定时间调用函数示例代码
2017/09/08 Python
Python partial函数原理及用法解析
2019/12/11 Python
3种python调用其他脚本的方法
2020/01/06 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
2020/05/10 Python
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
大四毕业生学习总结的自我评价
2013/10/31 职场文书
仓管员岗位职责范文
2013/11/08 职场文书
英语自荐信常用语句
2013/12/13 职场文书
小学国庆节活动方案
2014/02/11 职场文书
产品质量承诺书
2014/03/27 职场文书
管理建议书范文
2014/05/13 职场文书
法院授权委托书范文
2014/08/02 职场文书
商务信函英语问候语
2015/11/10 职场文书
nginx proxy_cache 缓存配置详解
2021/03/31 Servers
pyqt5蒙版遮罩mask,setmask的使用
2021/06/11 Python
Python可变与不可变数据和深拷贝与浅拷贝
2022/04/06 Python