微信{"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写法
Sep 15 Javascript
javascript基础知识大集锦(二) 推荐收藏
Jan 13 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
Apr 27 Javascript
javascript根据时间生成m位随机数最大13位
Oct 30 Javascript
JavaScript实现将xml转换成html table表格的方法
Apr 17 Javascript
javascript实现tab切换的两个实例
Nov 05 Javascript
浅谈vuepress 踩坑记
Apr 18 Javascript
解决vue-cli项目webpack打包后iconfont文件路径的问题
Sep 01 Javascript
vue-cli中使用高德地图的方法示例
Mar 28 Javascript
jQuery HTML css()方法与css类实例详解
May 20 jQuery
如何检测JavaScript中的死循环示例详解
Aug 30 Javascript
微信小程序实现滚动Tab选项卡
Nov 16 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边学边教》(01.开篇――准备工作)
2006/12/13 PHP
PHP Directory 函数的详解
2013/03/07 PHP
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
javascript中创建对象的三种常用方法
2010/12/30 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
2014/01/13 Javascript
Nodejs sublime text 3安装与配置
2014/06/19 NodeJs
封装属于自己的JS组件
2016/01/27 Javascript
VUE使用vuex解决模块间传值问题的方法
2017/06/01 Javascript
Vue实例中生命周期created和mounted的区别详解
2017/08/25 Javascript
Taro集成Redux快速上手的方法示例
2018/06/21 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
给localStorage设置一个过期时间的方法分享
2018/11/06 Javascript
微信小程序基于Taro的分享图片功能实践详解
2019/07/12 Javascript
VUE实现密码验证与提示功能
2019/10/18 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
jQuery zTree如何改变指定节点文本样式
2020/10/16 jQuery
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
实例讲解python函数式编程
2014/06/09 Python
Python类方法__init__和__del__构造、析构过程分析
2015/03/06 Python
详解python脚本自动生成需要文件实例代码
2017/02/04 Python
Python实现简单生成验证码功能【基于random模块】
2018/02/10 Python
Python3安装psycopy2以及遇到问题解决方法
2019/07/03 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
比较一下entity bean和session bean
2013/12/27 面试题
UNIX特点都有哪些
2016/04/05 面试题
半年思想汇报
2013/12/30 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
机关领导查摆四风思想汇报
2014/09/13 职场文书
二年级上册数学教学计划
2015/01/20 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
导游词之清晏园
2019/11/22 职场文书
超详细Python解释器新手安装教程
2021/05/10 Python
MySQL中in和exists区别详解
2021/06/03 MySQL
画错魏国疆域啦!《派对咖孔明》动画因作画失误于官网致歉
2022/04/07 日漫