微信小程式雲開發實戰-答題積分賽小程式
接口聯調篇:進入首頁自動鑒權靜默登入
基本介紹
微信雲開發提供了多個基礎能力,包括資料庫、存儲、雲函數等。其中,雲函數是一段運作在雲端的代碼,無需管理伺服器,在開發工具内編寫、一鍵上傳部署即可運作後端代碼。
小程式内提供了專門用于雲函數調用的 API。開發者可以在雲函數内使用 wx-server-sdk 提供的 getWXContext 方法擷取到每次調用的上下文(appid、openid 等)。
技術要點
1、wx-server-sdk
雲函數中使用 wx-server-sdk 需在對應雲函數目錄下安裝 wx-server-sdk 依賴,在建立雲函數時會在雲函數目錄下預設建立一個 package.json,雲函數的運作環境是 Node.js 。
2、getWXContext
在雲函數中擷取微信調用上下文。
const cloud = require('wx-server-sdk')
exports.main = async (event, context) => {
const {
OPENID,//小程式使用者 openid,小程式端調用雲函數時有
APPID,//小程式 AppID,小程式端調用雲函數時有
UNIONID,//小程式使用者 unionid,小程式端調用雲函數,并且滿足 unionid 擷取條件時有
ENV,//雲函數所在環境的 ID
} = cloud.getWXContext()
return {
OPENID,
APPID,
UNIONID,
ENV,
}
}
定義雲函數
定義一個雲函數,命名為 getOpenId ,功能是實作自動鑒權,擷取使用者登入态(openid):
const cloud = require('wx-server-sdk')
// 初始化 cloud
cloud.init({
env: 'test-5613f6abn21'
})
/**
* 這個示例将經自動鑒權過的小程式使用者 openid 傳回給小程式端
*
* event 參數包含小程式端調用傳入的 data
*
*/
exports.main = async (event, context) => {
// 可執行其他自定義邏輯
// console.log 的内容可以在雲開發雲函數調用日志檢視
// 擷取 WX Context (微信調用上下文),包括 OPENID、APPID、及 UNIONID(需滿足 UNIONID 擷取條件)
const wxContext = cloud.getWXContext()
console.log(wxContext)
return {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
}
部署雲函數
在 cloudfunctions/getOpenId 檔案夾右擊,然後選擇 “上傳并部署”。
調用雲函數
在進入首頁時,進行調用雲函數getOpenId,将經自動鑒權過的小程式使用者 openid 傳回給小程式端。
/**
* 生命周期函數--監聽頁面加載
*/
onLoad(options) {
this.getOpenId();
},
getOpenId() {
wx.cloud.callFunction({
name: 'getOpenId' // 需調用的雲函數名
}).then(res => {
// 支援promise方式
console.log(res)
})
},
注意:在開發者工具中上傳部署雲函數後,我們在小程式中可以這麼調用。
本篇小結
作為小程式創作者,實作自動鑒權擷取使用者登入态(openid),實在是太常見了。比如網絡安全知識答題、交通安全答題、 消防安全知識宣傳、 安全生産知識學習、學法普法、五四青年節等答題活動或有獎競答等應用場景。
雲函數是一段運作在雲端的代碼,如需在雲函數中操作資料庫、管理雲檔案、調用其他雲函數等操作,可使用官方提供的 npm 包 wx-server-sdk 進行操作。
需特别注意,雲函數運作環境即是管理端。