小程序登錄及AppSecret(小程序密鑰) - 新聞資(zī)訊 - 雲南小程序開發|雲南軟件開發|雲南網站(zhàn)建設-西山區知普網絡科技工作室

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不管是網站(zhàn),軟件還是小程序,都要直接或間接能為您産生價值,我們在追求其視覺表現的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站(zhàn)成為營銷工具,讓軟件能切實提升企業(yè)内部管理水平和(hé)效率。優秀的程序為後期升級提供便捷的支持!

小程序登錄及AppSecret(小程序密鑰)

發表時間:2021-1-4

發布人:葵宇科技

浏覽次數:63


在授權開發以後,需要提交小程序密鑰,有小程序密鑰第三方才有能力獲取用戶的一些信息,提供一些能力!

平台分别提供多種方式實現微信登錄:
  1. 調用wx.login接口,靜默獲取openid
适用場景:無需使用用戶頭像、昵稱、Unionid信息
複制代碼
  1. 使用 open-data (小程序)或者開放數據域(小遊戲)的方式展示用戶信息(無需用戶授權)
适用場景:需要在前端“展示”用戶頭像、昵稱信息,但不需要獲取Unionid
複制代碼
  1. 使用button(小程序)或UserInfoButton(小遊戲)組件,用戶點擊後彈窗請求用戶授權
适用場景:需要獲取用戶頭像、昵稱、Unionid等基本信息
複制代碼

開發建議

  • 第一步:獲取openID
當用戶訪問(wèn)小程序時,先通(tōng)過wx.login,獲取用戶openID 。這時無需彈框授權,開發者拿到 openID 可(kě)以建立自身的帳号 ID。
複制代碼
  • 第二步: 使用open-data方式或開放數據域方式展示頭像昵稱
如(rú)需要在前端展示用戶頭像、昵稱信息, 使用open-data 方式或者開放數據域的方式展示用戶信息
複制代碼
  • 第三步:根據實際使用場景,使用組件,引導用戶登錄
在關(guān)鍵操作中(zhōng),如(rú)必須獲取用戶頭像、昵稱、UnionID信息,可(kě)根據第一步獲取的openID判斷是新用戶還是舊用戶:

    如(rú)果是舊用戶,可(kě)以直接登錄,也可(kě)定期使用wx.getUserInfo更新用戶的信息;

    如(rú)果是新用戶,使用button(小程序)或UserInfoButton(小遊戲)組件,在用戶點擊後彈窗請求獲取用戶基本信息。
複制代碼

會話密鑰 session_key 有效性

開發者如(rú)果遇到因為session_key 不正确而校(xiào)驗簽名失敗或解密失敗,請關(guān)注下(xià)面幾個(gè)與session_key有關(guān)的注意事項

1. wx.login 調用時,用戶的 session_key 可(kě)能會被更新而緻使舊 session_key 失效(刷新機制存在最短(duǎn)周期,如(rú)果同一個(gè)用戶短(duǎn)時間内多次調用 wx.login,并非每次調用都導緻 session_key 刷新)。開發者應該在明确需要重新登錄時才調用 wx.login,及時通(tōng)過 code2Session 接口更新服務器(qì)存儲的 session_key。
2. 微信不會把 session_key 的有效期告知開發者。我們會根據用戶使用小程序的行為對 session_key 進行續期。用戶越頻繁使用小程序,session_key 有效期越長。
開發者在 session_key 失效時,可(kě)以通(tōng)過重新執行登錄流程獲取有效的
3. 開發者在 session_key 失效時,可(kě)以通(tōng)過重新執行登錄流程獲取有效的 session_key。使用接口 wx.checkSession可(kě)以校(xiào)驗 session_key 是否有效,從而避免小程序反複執行登錄流程。
4. 當開發者在實現自定義登錄态時,可(kě)以考慮以 session_key 有效期作為自身登錄态有效期,也可(kě)以實現自定義的時效性策略。
複制代碼
  • 如(rú)果使用自己服務器(qì)定義的登錄态失效時間,則不需要wx.checkSession

下(xià)面是自己項目中(zhōng)的小程序登錄代碼

涉及到用戶掃碼進入小程序,同時判斷掃碼進入是否注冊過

   //獲取個(gè)人信息
   getUserFootpathInfofunction (that{
    that = this;
    wx.login({
      successfunction (data{
        console.log(data, '個(gè)人信息1')
        http.getReq('getwechatinfo?code=' + data.code + "&serct=" + app.globalData.serct, function (ress{
          console.log(ress)
          app.globalData.openid = ress.data.openid
          that.setData({
            openid:ress.data.openid
          })
          http.getReq("getuserinfo?openid=" + ress.data.openid + "&unionid=" + app.globalData.unionid + "&serct=" + getApp().globalData.serct, function (res{
            console.log(res.data, '個(gè)人信息2')
            // imageId 掃碼進入小程序 用戶 進入遊戲的唯一标識
            that.setData({
              imageId: res.data.imageId
            })
            if (that.data.device) {
              getApp().globalData.type = 2// 2代表掃碼
              // 同時通(tōng)過注冊得Id判斷是否注冊,
              if (that.data.imageId) {
                // 授權成功
                that.setData({
                  bikeFlagtrue
                })
              } else {
                // 沒有授權 "跳轉到注冊頁面"
                if(that.data.btn_disabled){
                  wx.redirectTo({
                    url'../webview/webregist?openid=' + that.data.openid
                  })
                }else{
                  wx.showToast({
                    title"請勾選相關(guān)條款",
                    icon'none'
                  })
                }
                
              }
            }
            app.globalData.imageId = res.data.imageId;
            app.globalData.getUserInfo = res.data;
            app.globalData.existsflag = res.data.existsflag;
            // 調取單車(chē)數據
            that.postRunSportData();
            if (res.data.existsflag == 1 || that.data.skipType == "0001") {
              that.setData({
                httpUserInfo: res.data
              })
              if (that.data.httpUserInfo.username == null || that.data.httpUserInfo.username == "") {
                that.setData({
                  nickName"步道用戶"
                })
              } else {
                that.setData({
                  nickName: that.data.httpUserInfo.username
                })
              }
            } else {
              app.globalData.openid = "guest";
              //未注冊 彈窗注冊
              that.setData({
                showRegisterModal: !that.data.showRegisterModal
              })
            }
            that.checkLocation(that)
          })
        })
      },
      failfunction (err{
        console.log('wx.login 接口調用失敗,将無法正常使用開放接口等服務', err)
      }
    })
  },

相關(guān)案例查看更多