需求: 用戶通過微信進(jìn)行登錄惰赋,如果是第一次登錄,則進(jìn)入綁定界面蕴侧,需要用戶輸入用戶名和密碼保存到數(shù)據(jù)庫择同;如果不是第一次登錄,則直接跳過綁定界面净宵,實現(xiàn)微信自動登錄奠衔。
思路: 每個微信用戶請求某個微信服務(wù)號都會產(chǎn)生一個 code 值,通過該 code 值能夠解析出用戶唯一的 openid 值塘娶。將第一次登錄的用戶的 code 值和 openid 值保存到數(shù)據(jù)庫中归斤,以后如果再次請求該服務(wù)號,則先去判斷 code 和 openid 是否在數(shù)據(jù)庫中刁岸,如果在脏里,就能夠?qū)崿F(xiàn)微信的自動登錄。
注意: 微信的 code 值每 5 分鐘就會失效虹曙,但一個微信用戶的 openid 是不變的迫横。如果 code 值不在數(shù)據(jù)庫中,但 openid 在酝碳,也說明該用戶之前已經(jīng)登錄過矾踱,這個時候要更新數(shù)據(jù)庫中的 code,同時自動登錄疏哗。
具體流程如下圖:
那么問題來了:如何獲取 code 值呛讲?
在測試的時候,如何構(gòu)造一個 code 參數(shù)呢?首先我們可以注冊一個微信公眾號贝搁,然后在左側(cè)【開發(fā)中工具】中找到【公眾平臺測試賬號】的選項吗氏,能得到 appID 和 appsecret 兩個值,這兩個值可以幫助我們從 code 中解析出該用戶的 openid雷逆。往下滑動弦讽,我們還需要關(guān)注測試號二維碼,可以看到我們的 openid 值(下圖中打馬賽克的那個)膀哲,該 openid 值就是通過 code 值能夠解析出的該用戶的 openid 值往产。
再往下滑,找到 【網(wǎng)頁服務(wù)】-> 【網(wǎng)頁賬號】某宪,點擊修改捂齐,里面填入我們的回調(diào)域名(如果是測試工具,填 ip 地址也行)缩抡,但是不能加上 http:// 或者 https://(回調(diào)域名隨便設(shè)置一個可以訪問到的網(wǎng)址)奠宜。
之后我們可以用接下來的網(wǎng)址產(chǎn)生一個 code 參數(shù):
https://open.weixin.qq.com/connect/oauth2/authorize?appid=appID&redirect_uri=URI&response_type=code&scope=snsapi_base&state=123#wechat_redirect
注意點:其中,將 appID 換成你的測試號的 appID瞻想,URI 換成你的回調(diào)域名压真,而且一定要加上 http:// 或者 https:// ,這個鏈接要在微信客戶端打開蘑险,然后再在瀏覽器中打開滴肿,在瀏覽器的 URL 地址欄中就可以找到 code 參數(shù)值,如下返回的鏈接:
http://URI/?code=061nPiaw13KHu90vlw7w1WO4aw1nPiax&state=123佃迄,其中 URI 是你的回調(diào)域名泼差,061nPiaw13KHu90vlw7w1WO4aw1nPiax 就是生成的 code 參數(shù)。
在測試的時候呵俏,一個 code 只能使用一次堆缘,下次還用產(chǎn)生 code 參數(shù)的鏈接生成新 code 參數(shù)即可。
后記:如果項目最后要上線的話普碎,記得把該測試號用到的所有參數(shù)更新為服務(wù)號對應(yīng)的參數(shù)(如appID吼肥、appsecret、回調(diào)域名等等)麻车。
由于是公司項目缀皱,Java 實現(xiàn)的代碼就不貼出了。網(wǎng)上有類似的动猬,改一改就可以用啤斗。
PS:
我的博客即將搬運同步至騰訊云+社區(qū),邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=ag7l5g3a44ot