小程序雲開發獲取手機號完整代碼
效果圖:
小程序代碼
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">登錄</button>
getPhoneNumber: function (e) {
var that = this;
if (!e.detail.errMsg || e.detail.errMsg != "getPhoneNumber:ok") {
wx.showModal({
content: '請打開設置授權手機號',
showCancel: false
})
return;
}
wx.cloud.callFunction({
name: 'getToken', // 對應雲函數名
data: {
encryptedData: e.detail.encryptedData,
iv: e.detail.iv,
sessionCode: app.globalData.sessionCode // 這個通過wx.login獲取,去了解一下就知道。這不多描述
},
success: res => {
wx.hideLoading()
console.log('成功拿到手機號,跳轉首頁',res)
// 成功拿到手機號,跳轉首頁
return
wx.switchTab({
url: '../index/index' // 這裏是要跳轉的路徑
})
},
fail: err => {
console.error(err);
wx.showToast({
title: '獲取手機號失敗',
icon: 'none'
})
}
})
},
雲函數:
-
步驟1: 新建node.js雲函數getToken
image.png
-
步驟2:因爲需要進行網絡請求,這裏使用request庫
image.png
- 步驟3.下載 request 或 request-promise 模塊(request-promise模塊,可以使用promise,async和await)
命令行:
npm install --save request
npm install --save request-promise
如成功下載,則可見image.png
- 步驟4:getToken下的index.js文件中
// 雲函數入口文件
const cloud = require('wx-server-sdk')
const requestpromise = require('request-promise');
var WXBizDataCrypt = require('./RdWXBizDataCrypt') // 用於手機號解密
cloud.init()
// 雲函數入口函數
exports.main = async (event, context) => {
// 獲取 WX Context (微信調用上下文),包括 OPENID、APPID、及 UNIONID(需滿足 UNIONID 獲取條件)
const wxContext = cloud.getWXContext()
const appid = wxContext.APPID
const AccessToken_options = {
method: 'GET',
url: 'https://api.weixin.qq.com/sns/jscode2session',
qs: {
appid:wxContext.APPID,
secret:'xxxxxxxxxxxxxxxxxxx', // 微信開發後臺可生成,唯有微信認證過的國內主體纔可有
grant_type: 'authorization_code',
js_code: event.sessionCode // 小程序中獲取過來的
},
json: true
};
const resultValue = await requestpromise (AccessToken_options);
const pc = new WXBizDataCrypt(appid, resultValue.session_key) // -解密第一步
const data = pc.decryptData(event.encryptedData, event.iv) // 解密第二步
return { data }
}
這裏的WXBizDataCrypt文件純js寫的,非官方給出的java,node,php等後端語言的demo,js文件我放
文件網盤裏了,有需要的自行下載,請點擊這裏 提取碼:i2ve
具體放置的位置如步驟3所示
至此,小程序便可得到解密後的用戶手機號,