網(wǎng)站應(yīng)用微信登錄是基于OAuth2.0協(xié)議標(biāo)準(zhǔn)構(gòu)建的微信OAuth2.0授權(quán)登錄系統(tǒng)。
一個(gè)網(wǎng)站在進(jìn)行微信OAuth2.0授權(quán)登錄接入之前,應(yīng)該先到微信開放平臺(tái)注冊(cè)開發(fā)者帳號(hào),申請(qǐng)并獲得相應(yīng)的AppID和AppSecret,之后可開始接入流程。
寫這篇文章的目的不是為了講解如何搭建一個(gè)使用微信授權(quán)登錄的網(wǎng)站,而是為了講解如何在一臺(tái)沒有界面的linux系統(tǒng)上模擬微信掃碼登錄。
以登錄簡(jiǎn)書為例
-
點(diǎn)擊網(wǎng)站微信登陸圖標(biāo),打開一個(gè)二維碼頁面,url如下所示
https://open.weixin.qq.com/connect/qrconnect?appid=wxe9199d568fe57fdd&client_id=wxe9199d568fe57fdd&redirect_uri=http%3A%2F%2Fwww.itdecent.cn%2Fusers%2Fauth%2Fwechat%2Fcallback&response_type=code&scope=snsapi_login&state=%257B%257D#wechat_redirect這個(gè)url包含主要的三個(gè)參數(shù)appid、client_id、redirect_uri,在此我們不需要太多關(guān)注,每個(gè)網(wǎng)站這些參數(shù)都是固定的。
程序需要模擬瀏覽器請(qǐng)求這個(gè)url
-
解析二維碼url、獲取授權(quán)碼的url
在第1步驟的response中找到以下兩個(gè)內(nèi)容:<div class="wrp_code"><img class="qrcode lightBorder" src="/connect/qrcode/001F82OszFAzElbp"></div><script> // @cunjin 下面的變量是給開發(fā)者工具用的,inline到html里面,一定不能刪掉 var fordevtool = "https://long.open.weixin.qq.com/connect/l/qrconnect?uuid=081KWIzIzrcRYwFs" console.log('devtool use', fordevtool) </script> 下載二維碼,并在規(guī)定的時(shí)間內(nèi)使用微信掃描,這一步需要人工完成。
-
掃描完成之后,訪問第2步驟
fordevtool標(biāo)識(shí)的地址,獲取授權(quán)碼。獲取到的結(jié)果是一個(gè)json, 大致形如
{errcode:405, wx_code:yyyyyyy},當(dāng)errcode為405時(shí)表示成功,此時(shí)wx_code有效,這就是我們要的授權(quán)碼。 -
帶著獲取到的授權(quán)碼登錄網(wǎng)站,獲取cookie,并保存在文件中。
簡(jiǎn)書登錄地址大致為
http://www.itdecent.cn/users/auth/wechat/callback?code=xxxxxxx&state=7B7D"獲取到授權(quán)碼,訪問這個(gè)把授權(quán)碼填入到這個(gè)地址中,state在第1步驟的url的state保持一致。
訪問成功后,獲取到cookie,登錄完成。