微信小程序登陸流程

image.png
  • 通過 wx.login() 獲取到用戶登錄態(tài)之后蒿叠,需要維護(hù)登錄態(tài)。開發(fā)者要注意不應(yīng)該直接把 session_key彤侍、openid 等字段作為用戶的標(biāo)識(shí)或者 session 的標(biāo)識(shí)较雕,而應(yīng)該自己派發(fā)一個(gè)session 登錄態(tài)。
    微信官方文檔

1:session_key和openId是什么度陆?session_key

官方說明為:

  • session_key是微信服務(wù)器生成的針對(duì)用戶數(shù)據(jù)進(jìn)行加密簽名的密鑰

  • session_key的用途
    (1)對(duì)wx.getUserInfo()接口得到“用戶信息中的密文”進(jìn)行解密。
    (2)對(duì)它“稍作處理”献幔,用作維護(hù)小程序的登錄態(tài)懂傀。
    “稍微處理”大體為:
    (1)生成一個(gè)隨機(jī)數(shù)(官方把他叫做3rd_session)
    (2)把這個(gè)隨機(jī)數(shù)當(dāng)session的key,session_key + openid為value蜡感。
    即:session[3rd_session]=session_key+openid

  • openId:用戶唯一標(biāo)識(shí)
    即:每個(gè)微信用戶在你的小程序的唯一的標(biāo)識(shí)蹬蚁。


    wx.login

2.調(diào)用本地的方法將code傳給后端

// 配置請(qǐng)求參數(shù)
        Map<String, String> param = new HashMap<>();
        param.put("appid", WX_LOGIN_APPID);
        param.put("secret", WX_LOGIN_SECRET);
        param.put("js_code", userVO.getCode());
        param.put("grant_type", WX_LOGIN_GRANT_TYPE);
        // 發(fā)送請(qǐng)求
        String wxResult = HttpUtils.doGet(WX_LOGIN_URL, param);
        JSONObject jsonObject = JSONObject.parseObject(wxResult);
        // 獲取參數(shù)返回的
        String sessionKey = jsonObject.get("session_key").toString();
        String openId = jsonObject.get("openid").toString();
        // 根據(jù)返回的user實(shí)體類,判斷用戶是否是新用戶郑兴,不是的話犀斋,更新最新登錄時(shí)間,是的話情连,將用戶信息存到數(shù)據(jù)庫
        User user = butcherUserAgent.selectByOpenId(openId);
        if (user != null) {
            user.setLoginTime(new Date());
            butcherUserAgent.updateUser(user);
        } else {
            user.setUserName(userVO.getUserName());
            user.setPassword(userVO.getPassword());
            user.setOpenId(openId);
            user.setLoginTime(new Date());
            System.out.println("user:" + user.toString());
            User insert = butcherUserAgent.insert(user);
            if (insert == null) {
                //返回錯(cuò)誤提示
            }
        }
        // 封裝返回小程序
        Map<String, Object> map = new HashMap<>();
        map.put("session_key", sessionKey);
        map.put("openId", openId);
        return ResultUtil.createResultJson(ResultEnum.SUCCESS.getCode(), ResultEnum.SUCCESS.getCode(), map);
  • 返回值:
    session_key
    openId

3:如何獲得session_key和openId官方提供了HTTP接口:

https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
獲取步驟:
(1)獲得appid叽粹,secret,js_code
(2)用appid却舀,secret虫几,js_code分別替換如上接口地址的APPID、SECRET挽拔、JSCODE辆脸,其他不變,組裝成完整的地址篱昔。

微信小程序獲得session_key和openId(加解密每强、簽名系列)


image.png

4.在“瀏覽器打開此地址”或者“在后臺(tái)模擬瀏覽器的GET執(zhí)行此地址”就可返回如下的JSON數(shù)據(jù)(包含openid、sessionkey)

微信小程序獲得session_key和openId(加解密州刽、簽名系列)

總結(jié):從1,2,3步驟可知空执,只要獲得appid,secret穗椅,js_code就可得到session_key和openId


image.png

5:appid和secret的獲得方式

appid為小程序ID
secret為小程序密鑰(AppSecret)
獲得方法:小程序后臺(tái)登錄網(wǎng)址:https://mp.weixin.qq.com/
打開小程序后臺(tái)網(wǎng)址辨绊、注冊(cè)、登錄后匹表,按如下圖所示就可找到你的AppID和AppSecret门坷。
微信小程序獲得session_key和openId(加解密、簽名系列)
注意:目前小程序個(gè)人不能注冊(cè)袍镀,開放注冊(cè)范圍:企業(yè)默蚌、政府、媒體苇羡、其他組織绸吸;
當(dāng)然用這個(gè)辦法,個(gè)人也能注冊(cè)了。
傳送門:http://www.moquu.com/v/372.html

6:js_code如何獲得調(diào)用wx.login()接口就可獲取登錄憑證(js_code)

微信小程序獲得session_key和openId(加解密锦茁、簽名系列)


image

7:總結(jié)整個(gè)session_key獲取的流程(1)注冊(cè)微信小程序攘轩、登錄后臺(tái)在設(shè)置中獲得appId和secret(密鑰)

(2)調(diào)用wx.login()接口獲取登錄憑證js_code
(3)調(diào)用wx.request()接口把js_code發(fā)送到服務(wù)器后臺(tái)
(4)在服務(wù)器后臺(tái),已知appId码俩、secret度帮、js_code
然后調(diào)用如下官方提供的http接口,即可返回獲取openId稿存、session_key

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末笨篷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子挠铲,更是在濱河造成了極大的恐慌冕屯,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拂苹,死亡現(xiàn)場(chǎng)離奇詭異安聘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瓢棒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門浴韭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人脯宿,你說我怎么就攤上這事念颈。” “怎么了连霉?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵榴芳,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我跺撼,道長(zhǎng)窟感,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任歉井,我火速辦了婚禮柿祈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哩至。我一直安慰自己躏嚎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布菩貌。 她就那樣靜靜地躺著卢佣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪箭阶。 梳的紋絲不亂的頭發(fā)上珠漂,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天晚缩,我揣著相機(jī)與錄音,去河邊找鬼媳危。 笑死,一個(gè)胖子當(dāng)著我的面吹牛冈敛,可吹牛的內(nèi)容都是我干的待笑。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼抓谴,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼暮蹂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起癌压,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤仰泻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后滩届,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體集侯,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年帜消,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了棠枉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泡挺,死狀恐怖辈讶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情娄猫,我是刑警寧澤贱除,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站媳溺,受9級(jí)特大地震影響月幌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜褂删,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一飞醉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧屯阀,春花似錦缅帘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至盖袭,卻和暖如春失暂,著一層夾襖步出監(jiān)牢的瞬間彼宠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工弟塞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凭峡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓决记,卻偏偏與公主長(zhǎng)得像摧冀,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子系宫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

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

  • 登陸流程 1索昂、【小程序】調(diào)用wx.login() 獲取code給服務(wù)器 2、【服務(wù)器】用code換openid和s...
    junjuna閱讀 2,891評(píng)論 0 4
  • 背景 微信小程序的使用可以快速的基于場(chǎng)景進(jìn)行用戶圈的建立推廣扩借,其中根據(jù)業(yè)務(wù)需要使用用戶信息以及授權(quán)過程椒惨,主要用到的...
    極樂叔閱讀 1,189評(píng)論 1 4
  • 同一個(gè)微信開放平臺(tái)下的相同主體的App错洁、公眾號(hào)秉宿、小程序的unionid是相同的,這樣可判斷是否同一用戶微信針對(duì)不同...
    Reg8888閱讀 5,292評(píng)論 1 7
  • 小程序調(diào)用wx.login得到code. 調(diào)用接口獲取登錄憑證(code)進(jìn)而換取用戶登錄態(tài)信息屯碴,包括用戶的唯一標(biāo)...
    T_ttt閱讀 11,008評(píng)論 0 1
  • 我承認(rèn)我的狹隘描睦,偏見,無知导而,自私忱叭,貪婪,虛偽今艺,狡詐韵丑,我唯獨(dú)不想承認(rèn)的是我的無能,因?yàn)檫@我做了許多匪夷所思的事虚缎,比如...
    柴火妞妞閱讀 522評(píng)論 1 0