微信公眾號(hào)開發(fā)之登錄流程

<p>
1.瀏覽器js 請(qǐng)求java的islogin 接口
2.java 從session 中獲取當(dāng)前用戶
3.能獲取到說明已經(jīng)登錄
4.不能獲取到說明沒有登陸
5.返回一個(gè)result
6.resuel.code == 200 是已經(jīng)登錄
7.result.code == 400 是沒有登錄
8.已經(jīng)登錄的就不說了,說下沒有登陸情況
9.瀏覽器js根據(jù)result.code == 400 判斷沒有登錄
10.在瀏覽器端進(jìn)行跳轉(zhuǎn) window.location.href = result.redirect_url
11.result.redirect-url 是微信的接口伟叛,如下

  1. https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxb3549eaaee11457a&redirect_uri=http://jiezhao.xtake.cn/weixin/login&response_type=code&scope=snsapi_base&state=snsapi_base|http://localhost:3000/dev/index.html#wechat_redirect
    13.瀏覽器js直接進(jìn)行跳轉(zhuǎn)了 get請(qǐng)求
    14.這里請(qǐng)求的是微信的服務(wù)器 response_type告訴微信我現(xiàn)在是想要code
    15.微信知道了之后私痹,進(jìn)行一系列判斷,就能在 12 那個(gè)頁面上進(jìn)行再次跳轉(zhuǎn)统刮,你可以理解成這樣:
    16.你get請(qǐng)求 12 的地址后紊遵,微信的控制層 拿到你傳進(jìn)來的幾個(gè)參數(shù),appid 是認(rèn)證過的侥蒙,好了 那就沒問題了暗膜,微信服務(wù)器生成一個(gè)隨機(jī)的code,然后把這個(gè)code 和請(qǐng)求傳過來的redirect_url,state 原封不動(dòng)的一并傳到了返回的頁面上辉哥,頁面上的js無論通過什么樣的形式都能獲取到剛剛傳過來的生成的code和redirect_url以及state桦山,這樣一來js 就能在這個(gè)頁面上直接進(jìn)行window.location.href = 傳過來的redirect_url?code=[傳過來的code]&state=[傳過來的state]
    17.到這里就簡(jiǎn)單了,因?yàn)閞edirect_url 和state 是原封不動(dòng)的傳過來的醋旦,所以到現(xiàn)在的請(qǐng)求連接就是我們自己網(wǎng)站了恒水。并且?guī)е鴧?shù) code state
    18.我們自己的服務(wù)器要針對(duì)redirect_url 寫響應(yīng)的controller
    19.比如我們這里的連接是 jiezhao.xtake.cn/weixin/login?code=xxxx&state=xxxxx
    20.這個(gè)時(shí)候就進(jìn)入到我們的業(yè)務(wù)層的了
    21我們?cè)赾ontroller 中能根據(jù)code 獲取access_token,是在controller中通過httpClient 請(qǐng)求如下連接完成的:(注意是在controller層請(qǐng)求的)
    22.https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
    23.上面的這個(gè)請(qǐng)求中填上自己的appid,sectrt 以及controller傳過來的CODE,就能獲取到access_token
    24.這是正確時(shí)返回的數(shù)據(jù)json
    25.{ "access_token":"ACCESS_TOKEN",
    "expires_in":7200,
    "refresh_token":"REFRESH_TOKEN",
    "openid":"OPENID",
    "scope":"SCOPE" }

26.里面有access_token ,有效時(shí)長(zhǎng)饲齐,refresh_token(用來刷新token),還有一個(gè)很重要的openid ,這個(gè)openid 就是當(dāng)前微信用戶的唯一標(biāo)識(shí)啊钉凌,這也從一定程度上說明access_token 是面向單一用戶的。這個(gè)基礎(chǔ)的access_token有這本質(zhì)的區(qū)別捂人,真實(shí)坑爹啊御雕。scope 是snsapi_base 或者 snspai_userinfo
27.有了access_token 和用戶的openid 就能真正的進(jìn)入業(yè)務(wù)層。

==========================華麗分割線===========================

28.我們簡(jiǎn)稱25 中的json包是access_token對(duì)象
29.先是檢驗(yàn)了access_token 是否還有效滥搭,無效的話能通過對(duì)象中的refresh_token 進(jìn)行刷新酸纲,從而獲取最新的 access_token
30.查看scope的類型是 snsapi_base 還是 snsapi_userinfo
31.以下我用偽代碼描述

accessToken = 通過code獲取accessToken(code)

if(accessToken is 失效) {
重新獲取AccessToken

if (accessToken 的scope 是 snspai_base) {
openid = accessToken.getopenid()
業(yè)務(wù)user = userservice.getUserBy(openid)
if(業(yè)務(wù)user == null) {
//說明該微信用戶在我們的業(yè)務(wù)系統(tǒng)中并不存在,我們想不他直接存進(jìn)來
//想要存起來 我們不想僅僅知道openid 還想知道用戶頭像以及更詳細(xì)的信息瑟匆。
//這時(shí)候snspai_base 的scope 已經(jīng)不夠用了闽坡,需要能提供更詳細(xì)信息的 . //nsapi_userinfo scope
//然后。構(gòu)建像12 中一樣的url 不過scope 改成了 snsapi_userinfo
snsapi_userinfo_url = 構(gòu)建url();
// 然后使用WebUtils.issueRedirect()這個(gè)工具能在后臺(tái)進(jìn)行請(qǐng)求
//這個(gè)時(shí)候思考
//請(qǐng)求了這個(gè)構(gòu)建好的類似于12 的這個(gè)連接之后就又進(jìn)入了12之后的步驟愁溜。
//也就是說如果用戶沒有登錄疾嗅,為了拿到更詳細(xì)的用戶信息,
//重新獲取snsapi_userinfo 的 scope 的access_token

} else {

}//后來的寫到程序上面的注釋上了

</p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子孵奶,更是在濱河造成了極大的恐慌刚照,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件移层,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)意荤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來只锻,“玉大人玖像,你說我怎么就攤上這事∑胍” “怎么了捐寥?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)祖驱。 經(jīng)常有香客問我握恳,道長(zhǎng),這世上最難降的妖魔是什么捺僻? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任乡洼,我火速辦了婚禮崇裁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘束昵。我一直安慰自己拔稳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布锹雏。 她就那樣靜靜地躺著巴比,像睡著了一般。 火紅的嫁衣襯著肌膚如雪礁遵。 梳的紋絲不亂的頭發(fā)上轻绞,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音佣耐,去河邊找鬼政勃。 笑死,一個(gè)胖子當(dāng)著我的面吹牛兼砖,可吹牛的內(nèi)容都是我干的稼病。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼掖鱼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼然走!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起戏挡,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤芍瑞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后褐墅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拆檬,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年妥凳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了竟贯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逝钥,死狀恐怖屑那,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情艘款,我是刑警寧澤持际,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站哗咆,受9級(jí)特大地震影響蜘欲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晌柬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一姥份、第九天 我趴在偏房一處隱蔽的房頂上張望郭脂。 院中可真熱鬧,春花似錦澈歉、人聲如沸展鸡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至傲诵,卻和暖如春凯砍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拴竹。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工悟衩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人栓拜。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓座泳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親幕与。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挑势,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容