微信{"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 返回时间戳所对应的具体时间
Jul 20 Javascript
类似天猫商品详情随浏览器移动的示例代码
Feb 27 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
Jan 09 Javascript
JS实现的N多简单无缝滚动代码(包含图文效果)
Nov 06 Javascript
JS读写CSS样式的方法汇总
Aug 16 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
Oct 24 Javascript
JavaScript 有用的代码片段和 trick
Feb 22 Javascript
vue实现验证码按钮倒计时功能
Apr 10 Javascript
在webstorm中配置less的方法详解
Sep 25 Javascript
vue+swiper实现左右滑动的测试题功能
Oct 30 Javascript
vue实现两个组件之间数据共享和修改操作
Nov 12 Javascript
React 并发功能体验(前端的并发模式)
Jul 01 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获取301跳转URL简单实例
2013/12/16 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
php中实现进程锁与多进程的方法
2016/09/18 PHP
PHP中for循环与foreach的区别
2017/03/06 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
jquery实现手风琴效果实例代码
2013/11/15 Javascript
JS上传图片前实现图片预览效果的方法
2015/03/02 Javascript
深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP详解
2015/03/05 Javascript
JavaScript记录光标在编辑器中位置的实现方法
2016/04/22 Javascript
JS正则表达式之非捕获分组用法实例分析
2016/12/28 Javascript
js仿微博动态栏功能
2017/02/22 Javascript
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
JavaScript学习笔记之数组基本操作示例
2019/01/09 Javascript
Javascript数组及类数组相关原理详解
2020/10/29 Javascript
antd form表单数据回显操作
2020/11/02 Javascript
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
2016/09/18 Python
使用matplotlib画散点图的方法
2018/05/25 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
PyQt5实现简易电子词典
2019/06/25 Python
实例详解Python模块decimal
2019/06/26 Python
Python脚本利用adb进行手机控制的方法
2019/07/08 Python
Python3的socket使用方法详解
2020/02/18 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
Django配置跨域并开发测试接口
2020/11/04 Python
Java的for语句中break, continue和return的区别
2013/12/19 面试题
搞笑的获奖感言
2014/08/16 职场文书
商务司机岗位职责
2015/04/10 职场文书
资金申请报告范文
2015/05/14 职场文书
2015年安全生产月工作总结
2015/07/27 职场文书
初二数学教学反思
2016/02/17 职场文书
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL