小程序獲取用戶手機號有一些限制:
- 目前該接口針對非個人開發(fā)者全景,且完成了認證的小程序開放(不包含海外主體)巫湘,也就是只有國內(nèi)認證的企業(yè)賬號才可以使用。
- 必須通過
button
的點擊觸發(fā),包括頭像、客服這些都需要通過button
的點擊來觸發(fā)獲取内贮。 - 需先調(diào)用
wx.login
接口獲取code
,后端通過code
調(diào)用auth.code2Session
獲取到session_key
,再對獲取到的encryptedData
進行解密獲取到手機號贺归。
詳細介紹可以看下官網(wǎng)文檔獲取手機號
在點擊獲取手機號按鈕之前需要先調(diào)用wx.login
,code
是有時效的断箫,session_key
也是有時效的拂酣,就不能像openId
一樣獲取之后緩存本地了,需要調(diào)用wx.checkSession
進行登錄態(tài)檢查仲义,以確定是否需要調(diào)用wx.login
重新獲取session_key
婶熬。
這是官方文檔服務端獲取開放數(shù)據(jù)第一種方式,這次主要講的是第二種方式埃撵,云調(diào)用直接獲取開放數(shù)據(jù)云開發(fā)赵颅。
我們寫小程序或者APP一般都是前后端分離,前端寫界面暂刘,后端寫接口饺谬,前端通過調(diào)用后端接口進行數(shù)據(jù)處理,這樣各司其職谣拣,保證了質(zhì)量也保證了效率募寨。但是有時候前端人員想寫點自己個人的產(chǎn)品,卻不會后端開發(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)境和生產(chǎ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
里調(diào)用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
中調(diào)用getPhone
云函數(shù)迈窟,小程序端同時支持 Callback
風格調(diào)用和Promise
風格的調(diào)用。
// 獲取手機號
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()