小程序微信授權(quán)登錄塔鳍、獲取用戶信息及授權(quán)綁定微信手機(jī)號(hào)流程

登錄及獲取微信用戶信息

  1. 調(diào)用wx.login()獲取登錄憑證code,再調(diào)用后端接口換取用戶登錄態(tài)信息(openid, session_key)

    此時(shí)獲得的登錄狀態(tài)具有時(shí)效性献幔,可以調(diào)用wx.checkSession()檢查是否過(guò)期,若過(guò)期蜡感,則需要重新調(diào)用wx.login()執(zhí)行登錄流程

  2. 使用wx.getSetting()獲取用戶授權(quán)列表

    1. 若已授權(quán):調(diào)用wx.getUserInfo()獲取用戶信息
    2. 若未授權(quán):彈出模態(tài)框展示一個(gè) 微信授權(quán)登錄 按鈕提示用戶點(diǎn)擊登錄
      1. 同意授權(quán):用戶授權(quán)后可通過(guò)綁定的方法獲取用戶信息
      2. 拒絕授權(quán):則無(wú)法獲取用戶信息,若必須微信授權(quán)登錄才可用犀斋,可以以恰當(dāng)?shù)姆绞浇o出說(shuō)明情连,如使用wx.openSetting()引導(dǎo)用戶手動(dòng)打開(kāi)授權(quán)開(kāi)關(guān)
  3. 將獲取到的用戶信息和第1部中得到的code使用服務(wù)端提供的接口更新用戶信息叽粹,如1中的示例

授權(quán)綁定微信手機(jī)號(hào)

  1. 顯示授權(quán)綁定微信手機(jī)號(hào)的按鈕(必須用戶手動(dòng)點(diǎn)擊)
  2. 用戶同意授權(quán)后却舀,調(diào)用成功回調(diào)處理后續(xù)操作

相應(yīng)接口代碼示例

  1. 用戶授權(quán)列表:wx.getSetting()

    wx.getSetting({
      success (res) {
        console.log(res.authSetting)
        // res.authSetting = {
        //   "scope.userInfo": true, // true已授權(quán) false未授權(quán)
        //   "scope.userLocation": true
        //    ...
        // }
      }
    })
    
  2. 檢查登錄態(tài)是否過(guò)期

    wx.checkSession({
      success () {
        //session_key 未過(guò)期,并且在本生命周期一直有效
      },
      fail () {
        // session_key 已經(jīng)失效辆脸,需要重新執(zhí)行登錄流程
        wx.login() //重新登錄
      }
    })
    
  3. 調(diào)用wx.login()進(jìn)行登錄并獲取cookies

    wx.login({
        success: function(res) {
            // 得到了code
            if (res.code) {
                wx.request({
                    url: api.user.authLogin(res.code) // 后端提供的驗(yàn)證登錄接口
                    success: function(response) {
                     // 驗(yàn)證成功螃诅,保存cookies, 封裝在全局統(tǒng)一的請(qǐng)求方法中状囱,如get, post
                        wx.setStorage({
                         key: 'cookies',
                         data: response.data.res.cookies
                        })
                     
                        wx.getUserInfo({
                         withCredentials: true,
                            success: function(res) {
                                // 取得用戶微信信息,調(diào)用后端接口更新用戶信息
                                const userInfo = res.userInfo
                                const encryptedData = res.encryptedData
                             const iv = res.iv
                                
                                const params = {
                                  nick_name: userInfo.nickName,
                                  gender: userInfo.gender,
                                  province: userInfo.province,
                                  city: userInfo.city,
                                  country: userInfo.country,
                                  avatar_url: userInfo.avatarUrl,
                                  encrypted_data: encryptedData,
                                  encrypt_iv: iv
                                }
    
                                server.get(api.user.updateBaseInfo(), params, () => {
                                 // 成功保存用戶信息
                                })
                            }
                        })
                 }
                })
            }
        }
    })
    
  4. 微信授權(quán)登錄

    <button open-type="getUserInfo" bindgetuserinfo="onGetUserInfo">微信登錄</button>
    
    methods = {
        onGetUserInfo: this.handleGetUserInfo
    }
    
    // 同意授權(quán)
    handleGetUserInfo(e) {
        wx.getUserInfo()
    }
    
  5. 授權(quán)獲取微信綁定的手機(jī)號(hào)

    <button open-type="getPhoneNumber" bindgetphonenumber="onGetPhoneNumber">
        綁定微信手機(jī)號(hào)
    </button>
    
    methods = {
        onGetPhoneNumber: this.handleGetPhoneNumber
    }
    
    /**
    * 同意授權(quán)獲取手機(jī)號(hào)
    * @desc 獲取到 encryptedData,iv信息搀崭,需要服務(wù)端解密才能獲取到真正的手機(jī)號(hào)
    */
    handleGetPhoneNumber(e) {
        if (e.detail.iv) {
            server.post(api.user.bindWXPhoneNumber(), {
                encrypted_data: e.detail.encryptedData,
                encrypt_iv: e.detail.iv
            }, data => {
                wx.showToast({ title: '綁定成功' })
                // do something
            }, error => {
                wx.showModal({
                    title: '綁定失敗',
                    content: '[服務(wù)端返回的錯(cuò)誤信息]',
                    showCancel: false,
                    success: res => {
                        if (res.confirm) { // 用戶確認(rèn)后
                            // do something
                        }
                    }
                })
            })
        } else { // 用戶拒絕授權(quán)
            // do something
        }
    }
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瘤睹,一起剝皮案震驚了整個(gè)濱河市宣鄙,隨后出現(xiàn)的幾起案子默蚌,更是在濱河造成了極大的恐慌苇羡,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件设江,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡叉存,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)稿存,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瞳秽,“玉大人瓣履,你說(shuō)我怎么就攤上這事练俐。” “怎么了腺晾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)归形。 經(jīng)常有香客問(wèn)我,道長(zhǎng)连霉,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任跺撼,我火速辦了婚禮,結(jié)果婚禮上歉井,老公的妹妹穿的比我還像新娘。我一直安慰自己躏嚎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布卢佣。 她就那樣靜靜地躺著箭阶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪仇参。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天诈乒,我揣著相機(jī)與錄音,去河邊找鬼喂饥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛仰泻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播集侯,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼帜消,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了泡挺?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤贱除,失蹤者是張志新(化名)和其女友劉穎生闲,沒(méi)想到半個(gè)月后月幌,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扯躺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年录语,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了倍啥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澎埠。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蒲稳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情弟塞,我是刑警寧澤拙已,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站倍踪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏建车。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一潮罪、第九天 我趴在偏房一處隱蔽的房頂上張望领斥。 院中可真熱鬧嫉到,春花似錦月洛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)疫赎。三九已至盛撑,卻和暖如春虚缎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背实牡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留创坞,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓偎谁,卻偏偏與公主長(zhǎng)得像纲堵,于是被迫代替她去往敵國(guó)和親巡雨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子席函,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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