頻道欄目
首頁 > 資訊 > 微信小程序 > 正文

微信小程序獲取用戶的 OpenId (附前端代碼)-教程-小程序社區-微信小程序-微信小程序開發社區-小程序開發論壇-微信小程序聯盟

19-03-07        來源:[db:作者]  
收藏   我要投稿

OpenId是什么?

openid是表示用戶在你的當前應用中的唯一標識,比如小程序,微信公眾號等,這些都算是一個應用,如果你有多個應用,同一個用戶的openId可能并不相同

**下圖是獲取OpenId的過程微信的官方文檔和時序圖**

**小程序登錄的時序圖**

思路:

  1. 首先調用wx.login({})獲取登錄憑證(code)
  2. 調用接口前,需要把微信小程序的appid 和 secret 告知后端
  3. 用拿到的code 換取 openid

    實例:

    App({
    onLaunch: function() {
        var self = this;
        // 展示本地存儲能力
        var logs = wx.getStorageSync('logs') || []
        logs.unshift(Date.now())
        wx.setStorageSync('logs', logs)
    
    /** 重點來了****************
        |
        |
        |
        |
    *********/
        // 登錄
        wx.login({
          success: res => {
            // 發送 res.code 到后臺換取 openId, sessionKey, unionId
            var Params = {
              code: res.code, //臨時登錄憑證
              key: self.globalData.MD5Key
            };
            //生成加密key
            Params.key = self.MD5(Params.code + "&" + self.getNowTime() + "&" + Params.key);
            wx.request({
              url: 'https://testurl/api/test/GetOpenId', //此處填寫第三方的接口地址
              data: '=' + JSON.stringify(Params),
              header: {
                'content-type': 'application/json'
              },
              method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
              success: function(res) {
                var openid = res.data.RntData.openid //返回openid
                self.globalData.openid = openid;
                console.log(openid);
              }
            })
          }
        })
        /** 重點結束
        |
        |
        |
        |
    ********************************/
        // 獲取用戶信息
        wx.getSetting({
          success: res => {
            if (res.authSetting['scope.userInfo']) {
              // 已經授權,可以直接調用 getUserInfo 獲取頭像昵稱,不會彈框
              wx.getUserInfo({
                success: res => {
                  // 可以將 res 發送給后臺解碼出 unionId
                  this.globalData.userInfo = res.userInfo
    
                  // 由于 getUserInfo 是網絡請求,可能會在 Page.onLoad 之后才返回
                  // 所以此處加入 callback 以防止這種情況
                  if (this.userInfoReadyCallback) {
                    this.userInfoReadyCallback(res)
                  }
                }
              })
            }
          }
        })
      }
    })

    是不是很好奇,為什么會多了一步,用第三方服務器去訪問微信接口的過程呢?

    如果appid和secret存在本地或者前端直接去獲取,很容易被抓包從而導致用戶信息泄露,因此,用第三方服務器去請求微信接口,能確保openID的安全性。

    赞赏
相關TAG標簽
上一篇:臺積電:絕大多數7nm客戶都會轉向6nm_IT新聞_博客園
下一篇:最后一頁
相關文章
圖文推薦

關于我們 | 聯系我們 | 廣告服務 | 投資合作 | 版權申明 | 在線幫助 | 網站地圖 | 作品發布 | Vip技術培訓 | 舉報中心

版權所有: 紅黑聯盟--致力于做實用的IT技術學習網站

美女MM131爽爽爽毛片