微信登錄sdk接入方式請見阿纤,移動應(yīng)用微信登錄開發(fā)指南雾叭。
公司官網(wǎng)android國內(nèi)版sdk账胧,其中第三方登錄選擇微信登錄竞慢,其實(shí)微信登錄已經(jīng)接入了一段時(shí)間了,測試也都通過治泥。新需求是登錄完微信sdk后需要保存在本地(就是在本地保存一份微信的登錄token筹煮,下次登錄不用再跳轉(zhuǎn)到微信進(jìn)行授權(quán)),見下圖:
剛開始覺得挺簡單的居夹,但是做的過程中發(fā)現(xiàn)了許多坑(主要還是自己當(dāng)時(shí)太心急)败潦,記錄一下:
1.微信登錄之后有個(gè)access_token,需要服務(wù)器端sdk進(jìn)行驗(yàn)證,我在本地保存的就是這個(gè)token准脂,但是這個(gè)token的有效期限為2個(gè)小時(shí)劫扒。(需要把微信開放平臺的說明貼一下),
2.微信登錄后還有一個(gè)refresh_token狸膏,sdk的說法是在access_token未失效的情況下沟饥,刷新refresh_token會重新設(shè)定之前的acess_token(access_token的有效期還是2個(gè)小時(shí),相當(dāng)于延長了之前的有效期)湾戳,當(dāng)access_token已經(jīng)失效的情況下贤旷,刷新refresh_token會重新獲取一個(gè)新的access_token。需要在本地保存一個(gè)refresh_token,refresh_token的有效期限是30天砾脑,refresh_token失效后幼驶,需要用戶再次授權(quán)登錄,以下是移動應(yīng)用微信登錄開發(fā)指南里關(guān)于刷新access_token有效期的說明:
刷新access_token有效期
access_token是調(diào)用授權(quán)關(guān)系接口的調(diào)用憑證韧衣,由于access_token有效期(目前為2個(gè)小時(shí))較短盅藻,當(dāng)access_token超時(shí)后,可以使用refresh_token進(jìn)行刷新汹族,access_token刷新結(jié)果有兩種:
1. 若access_token已超時(shí)萧求,那么進(jìn)行refresh_token會獲取一個(gè)新的access_token其兴,新的超時(shí)時(shí)間顶瞒;
2. 若access_token未超時(shí),那么進(jìn)行refresh_token不會改變access_token元旬,但超時(shí)時(shí)間會刷新榴徐,相當(dāng)于續(xù)期access_token。
refresh_token擁有較長的有效期(30天)匀归,當(dāng)refresh_token失效的后坑资,需要用戶重新授權(quán)。
請求方法
獲取第一步的code后穆端,請求以下鏈接進(jìn)行refresh_token:
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
參數(shù)說明
參數(shù)是否必須說明
appid是應(yīng)用唯一標(biāo)識
grant_type是填refresh_token
refresh_token是填寫通過access_token獲取到的refresh_token參數(shù)
返回說明
正確的返回:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
參數(shù)說明
access_token接口調(diào)用憑證
expires_inaccess_token接口調(diào)用憑證超時(shí)時(shí)間袱贮,單位(秒)
refresh_token用戶刷新access_token
openid授權(quán)用戶唯一標(biāo)識
scope用戶授權(quán)的作用域,使用逗號(,)分隔
錯(cuò)誤返回樣例:
{"errcode":40030,"errmsg":"invalid refresh_token"}
注意:
1体啰、Appsecret 是應(yīng)用接口使用密鑰攒巍,泄漏后將可能導(dǎo)致應(yīng)用數(shù)據(jù)泄漏嗽仪、應(yīng)用的用戶數(shù)據(jù)泄漏等高風(fēng)險(xiǎn)后果;存儲在客戶端柒莉,極有可能被惡意竊任偶帷(如反編譯獲取Appsecret);
2兢孝、access_token 為用戶授權(quán)第三方應(yīng)用發(fā)起接口調(diào)用的憑證(相當(dāng)于用戶登錄態(tài))窿凤,存儲在客戶端,可能出現(xiàn)惡意獲取access_token 后導(dǎo)致的用戶數(shù)據(jù)泄漏跨蟹、用戶微信相關(guān)接口功能被惡意發(fā)起等行為雳殊;
3、refresh_token 為用戶授權(quán)第三方應(yīng)用的長效憑證窗轩,僅用于刷新access_token相种,但泄漏后相當(dāng)于access_token 泄漏,風(fēng)險(xiǎn)同上品姓。
建議將Appsecret寝并、用戶數(shù)據(jù)(如access_token)放在App云端服務(wù)器,由云端中轉(zhuǎn)接口調(diào)用請求腹备。
3.需要保存一個(gè)微信sdk登錄后返回的一個(gè)用戶的唯一標(biāo)識openid,我是根據(jù)openid來進(jìn)行保存相對應(yīng)賬戶的refresh_token.