網頁受權獲取用戶信息

說明

網頁受權獲取用戶基本信息:兩種 scope 域api

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,不能獲取用戶基本信息app

snsapi_userinfo 會徵求用戶贊成,受權後,能夠獲取用戶基本信息spa

 

使用錯誤時候會產生 :code

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

爲了方便你們理解,把接口返回的數據展現下吧

{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 同窗

相關文章
相關標籤/搜索