微信{"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 相关文章推荐
dwz 如何去掉ajaxloading具体代码
May 22 Javascript
jquery实现checkbox全选全不选的简单实例
Dec 31 Javascript
node.js中使用node-schedule实现定时任务实例
Jun 03 Javascript
一个JavaScript处理textarea中的字符成每一行实例
Sep 22 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
Nov 25 Javascript
省市联动效果的简单实现代码(推荐)
Jun 06 Javascript
纯JS前端实现分页代码
Jun 21 Javascript
JS使用onerror捕获异常示例
Aug 03 Javascript
详解Vue 事件驱动和依赖追踪
Apr 22 Javascript
React Native 通告消息竖向轮播组件的封装
Aug 25 Javascript
vue判断input输入内容全是空格的方法
Mar 02 Javascript
微信小程序实现图片上传功能
May 28 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
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
JS获取URL中的参数数据
2013/12/05 Javascript
jQuery中的编程范式详解
2014/12/15 Javascript
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
javascript冒泡排序小结
2016/04/10 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
2017/09/04 Javascript
Vue 通过自定义指令回顾v-内置指令(小结)
2018/09/03 Javascript
Vue filter 过滤当前时间 实现实时更新效果
2019/12/20 Javascript
Nodejs + Websocket 指定发送及群聊的实现
2020/01/09 NodeJs
JavaScript中this的学习笔记及用法整理
2020/02/17 Javascript
详解JS函数防抖
2020/06/05 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
JS模拟实现京东快递单号查询
2020/11/30 Javascript
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
通过python下载FTP上的文件夹的实现代码
2013/02/10 Python
python中列表和元组的区别
2017/12/18 Python
Python进程间通信Queue实例解析
2018/01/25 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
Sephora丝芙兰印尼官方网站:购买化妆品和护肤品
2018/07/02 全球购物
《谁的本领大》教后反思
2014/04/25 职场文书
冬季安全检查方案
2014/05/23 职场文书
售后客服工作职责
2014/06/16 职场文书
机械设备与数控技术专业求职信
2014/08/10 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
2014第二批党员干部对照“四风”找差距检查材料思想汇报
2014/09/18 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
赡养老人协议书范本
2015/08/06 职场文书
关于应聘教师的自荐信
2016/01/28 职场文书
使用pycharm运行flask应用程序的详细教程
2021/06/07 Python
分享Python获取本机IP地址的几种方法
2022/03/17 Python