微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
聲明:是已認證的服務(wù)號
前置說明
網(wǎng)頁授權(quán)獲取用戶基本信息:兩種 scope 域
snsapi_base 不需要用戶點同意,直接跳轉(zhuǎn)到授權(quán)后的頁面,只能用于獲取openid,不能獲取用戶基本信息
snsapi_userinfo 會征求用戶同意,授權(quán)后,可以獲取用戶基本信息
為了方便大家理解,把接口返回的數(shù)據(jù)展示下吧
{ "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" }
問題再現(xiàn)
1 首次使用 scope=snsapi_base 進行網(wǎng)頁授權(quán)
2 拿到 code 后調(diào)用接口 https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code
3 根據(jù)上一步獲取的 openid 和 access_token 調(diào)用接口 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 授權(quán)時,并沒有征求用戶同意授權(quán)這一操作)
問題來了
(有時候成功,有時候失?。?/p>
為什么有的時候(或者另外一個公眾號),按上面的步驟,能成功獲取到用戶的基本信息?
“48001,api unauthorized”之所以讓很多人迷惑不解,就在于這個問題
先直接上解決方式,再說原因
使用 scope=snsapi_userinfo 進行一次網(wǎng)頁授權(quán),步驟跟上面【問題再現(xiàn)】一樣,成功獲取到用戶的微信基本信息。
再使用 scope=snsapi_base 重復(fù)一遍【問題再現(xiàn)】,這次成功了?。?!
原因
上面的實驗其實已經(jīng)說明原因了,怕有些人一下子理解不了,所以
第一次使用 scope=snsapi_base,這是不需要經(jīng)過用戶同意的授權(quán),不能獲取用戶的基本信息
第二次使用 scope=snsapi_userinfo,這是需要用戶點擊同意的授權(quán),能獲取到用戶的基本信息
使用 scope=snsapi_userinfo,用戶同意授權(quán)后,在一定時間內(nèi),不需要用戶的同意,也可以獲取用戶基本信息(此時使用 scope=snsapi_base 也能獲取到用戶基本信息:甚至參數(shù)openid的值隨便填都沒關(guān)系,可以是空格,但不能為空)
注意
使用 scope=snsapi_userinfo,用戶同意授權(quán)后,access_token 的有效期是7200秒(兩小時)。
access_token 失效后,可以使用 refresh_token 調(diào)用接口 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天,即用戶同意授權(quán)后,在30天內(nèi),不再需要用戶同意授權(quán),就可以獲取用戶基本信息
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
微信小程序?qū)崿F(xiàn)省市區(qū)三級地址選擇
這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)省市區(qū)三級地址選擇,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-11-11javascript KeyDown、KeyPress和KeyUp事件的區(qū)別與聯(lián)系
KeyDown、KeyPress和KeyUp事件的區(qū)別與聯(lián)系,以后就可以根據(jù)需求來選擇使用。2009-12-12JS中的算法與數(shù)據(jù)結(jié)構(gòu)之常見排序(Sort)算法詳解
這篇文章主要介紹了JS中的算法與數(shù)據(jù)結(jié)構(gòu)之常見排序(Sort)算法,結(jié)合實例形式詳細分析了js常見排序算法中的冒泡排序、選擇排序、插入排序、希爾排序、歸并排序、快速排序等算法相關(guān)實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下2019-08-08如何在JavaScript中實現(xiàn)私有屬性的寫類方式(二)
這篇文章主要介紹了如何在JavaScript中實現(xiàn)私有屬性的寫類方式。需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12