2022.09.26 更新
云開發(fā)開始收費,首月免費體驗掂咒,后面19.9元/月锥累,原價39.9元/月缘挑,如果只是為了獲取手機號,目前不建議使用云開發(fā)方式獲取桶略。
小程序獲取用戶手機號有一些限制:
- 目前該接口針對非個人開發(fā)者语淘,且完成了認證的小程序開放(不包含海外主體),也就是只有國內認證的企業(yè)賬號才可以使用际歼。
- 必須通過
button
的點擊觸發(fā)惶翻,包括頭像、客服這些都需要通過button
的點擊來觸發(fā)獲取鹅心。 - 需先調用
wx.login
接口獲取code
吕粗,后端通過code
調用auth.code2Session
獲取到session_key
,再對獲取到的encryptedData
進行解密獲取到手機號旭愧。
詳細介紹可以看下官網(wǎng)文檔獲取手機號
在點擊獲取手機號按鈕之前需要先調用wx.login
颅筋,code
是有時效的,session_key
也是有時效的输枯,就不能像openId
一樣獲取之后緩存本地了议泵,需要調用wx.checkSession
進行登錄態(tài)檢查,以確定是否需要調用wx.login
重新獲取session_key
用押。
這是官方文檔服務端獲取開放數(shù)據(jù)第一種方式肢簿,這次主要講的是第二種方式,云調用直接獲取開放數(shù)據(jù)云開發(fā)蜻拨。
我們寫小程序或者APP一般都是前后端分離池充,前端寫界面,后端寫接口缎讼,前端通過調用后端接口進行數(shù)據(jù)處理收夸,這樣各司其職,保證了質量也保證了效率血崭。但是有時候前端人員想寫點自己個人的產品卧惜,卻不會后端開發(fā)以及沒有服務器厘灼,我想很多前端人員都有過這樣的想法,前幾年研究過LeanCloud的云存儲通過rest api
直接操作數(shù)據(jù)庫咽瓷,雖然比直接學習后端開發(fā)要簡單很多设凹,但學會還是需要不少時間。小程序云開發(fā)和LeanCloud的云存儲類似茅姜,入門要簡單很多闪朱,文檔也挺詳細。
新建項目時可以選擇小程序·云開發(fā)钻洒,這樣可以直接創(chuàng)建小程序·云開發(fā)模板奋姿。
查看目錄會發(fā)現(xiàn)和不使用云服務創(chuàng)建的小程序目錄有一些區(qū)別
區(qū)別在于,云開發(fā)目錄多了cloudfunctions
目錄素标,小程序的文件都在miniprogram
目錄下称诗。
同時project.config.json
配置文件中多了云開發(fā)的目錄配置
"miniprogramRoot": "miniprogram/",
"cloudfunctionRoot": "cloudfunctions/",
此時云服務還無法使用,點擊左上的云開發(fā)按鈕
會讓你創(chuàng)建環(huán)境名稱和環(huán)境ID头遭,壞境ID創(chuàng)建之后不可修改寓免,這里環(huán)境名稱官方文檔建議test
和release
方便區(qū)分的開發(fā)環(huán)境和生產環(huán)境名稱。
不使用云服務創(chuàng)建的小程序如何使用云開發(fā)
首先根目錄下創(chuàng)建兩個文件夾任岸,cloudfunctions
和miniprogram
再榄,其他名稱也可以。
然后把之前小程序目錄下文件享潜,除了project.config.json
都拖到miniprogram
目錄下困鸥,在project.config.json
配置中添加
"miniprogramRoot": "miniprogram/",
"cloudfunctionRoot": "cloudfunctions/",
添加之后
{
"miniprogramRoot": "miniprogram/",
"cloudfunctionRoot": "cloudfunctions/",
"description": "項目配置文件",
"packOptions": {
"ignore": []
},
點擊左上云開發(fā)按鈕創(chuàng)建環(huán)境,首次開通云環(huán)境后剑按,需等待大約 10 分鐘方可正常使用云 API疾就。
右鍵云開發(fā)目錄會看見當前環(huán)境
在小程序端開始使用云能力前,需在app.js
里調用wx.cloud.init
方法完成云能力初始化
//app.js
App({
onLaunch: function () {
//初始化云開發(fā)
wx.cloud.init({
traceUser: true
})
}
})
在cloudfunctions
文件夾右鍵選擇新建Node.js云函數(shù)艺蝴,名稱我們叫getPhone
猬腰。
新建之后默認會生成獲取小程序上下文的云函數(shù)cloud.getWXContext()
,如果需要獲取openId
和unionId
可以直接使用這個云函數(shù)猜敢,我們修改成獲取手機號的云函數(shù)姑荷,修改之后一定要右鍵上傳并部署。
在getPhoneNumber
中調用getPhone
云函數(shù)缩擂,小程序端同時支持 Callback
風格調用和Promise
風格的調用鼠冕。
// 獲取手機號
getPhoneNumber: function (event) {
let cloudID = event.detail.cloudID //開放數(shù)據(jù)ID
if (!cloudID) {
app.showToast('用戶未授權')
return
}
//loading
app.showLoading()
//獲取手機號
wx.cloud.callFunction({
name: 'getPhone',
data: {
cloudID: cloudID
}
}).then(res => {
app.hideLoading()
let phone = res.result.list[0].data.phoneNumber
if (phone) {
wx.setStorageSync('phone', phone)
//更新UI
this.setData({
phone: phone
})
}
this.triggerEvent('applyTap')
}).catch(error => {
app.hideLoading()
this.triggerEvent('applyTap')
})
},
參考
5行代碼獲取小程序用戶手機號
button
獲取手機號
服務端獲取開放數(shù)據(jù)
資源環(huán)境
初始化
我的第一個云函數(shù)
Cloud.getOpenData()