您當前位置>首頁 » 新聞資(zī)訊 » 小程序相關(guān) >
小程序登錄及AppSecret(小程序密鑰)
發表時間:2021-1-4
發布人:葵宇科技
浏覽次數:63
在授權開發以後,需要提交小程序密鑰,有小程序密鑰第三方才有能力獲取用戶的一些信息,提供一些能力!
平台分别提供多種方式實現微信登錄:
調用wx.login接口,靜默獲取openid
适用場景:無需使用用戶頭像、昵稱、Unionid信息
複制代碼
使用 open-data (小程序)或者開放數據域(小遊戲)的方式展示用戶信息(無需用戶授權)
适用場景:需要在前端“展示”用戶頭像、昵稱信息,但不需要獲取Unionid
複制代碼
使用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è)人信息
getUserFootpathInfo: function (that) {
that = this;
wx.login({
success: function (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({
bikeFlag: true
})
} 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)
})
})
},
fail: function (err) {
console.log('wx.login 接口調用失敗,将無法正常使用開放接口等服務', err)
}
})
},