微信 {"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}

 

{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}

 

声明:是已认证的服务号api

 

这个问题已解决!!

 

前置说明

网页受权获取用户基本信息:两种 scope 域微信

https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope={2}&state=ok#wechat_redirectapp

snsapi_base 不须要用户点赞成,直接跳转到受权后的页面,只能用于获取openid,不能获取用户基本信息spa

snsapi_userinfo 会征求用户赞成,受权后,能够获取用户基本信息code

 

为了方便你们理解,把接口返回的数据展现下吧

{token

    "access_token":"YNTxefBAfNW565Q4MAI..................j-hLNzin9Vq6BnvcvJ8NKHdBSRhkLjHQliLiNQc",接口

    "expires_in":7200,io

    "refresh_token":"EYmfmvUg0PGtOWiLpb..................T8O2UyKL95_Da23fLV-nYFDgnt14Ljl_x_zCMY",oauth

    "openid":"oYbGRs8MmU6bESxXcX2Z0rFRivjQ",qq

    "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天内,再也不须要用户赞成受权,就能够获取用户基本信息

 

打完收工,请叫我 Alexander Mifan

相关文章
相关标签/搜索