获取用户手机号码有两种方式,第一种方法现对复杂,需要有服务端解码才能获取到手机号码;第二种相对简单,只需要使用云函数即可获取。
第二种方法如下:
page.wxml
使用 button,属性 open-type="getPhoneNumber"
用户点击按钮,弹出授权对话框
<view class="buttonWrap">
<button
wx:if="{{!hasBindUser}}"
class="bindUserButton"
open-type="getPhoneNumber"
bindgetphonenumber="getPhoneNumber">绑定手机号码</button>
</view>
page.js
用户允许,则 e.detail.errMsg == 'getPhoneNumber:ok'
使用 wx.cloud.callFunction 调用云函数 getPhoneNumber,传参 e.detail.cloudID
成功,则获取手机号码 let phonenumber = res.result.openData.list[0].data.purePhoneNumber
// 获取用户手机号码
getPhoneNumber: function (e) {
console.log('e', e)
var that = this
if(e.detail.errMsg == 'getPhoneNumber:ok') {
// 允许
wx.cloud.callFunction({
name: 'getPhoneNumber',
data: {
id: e.detail.cloudID
},
success: res => {
console.log('res', res)
let phonenumber = res.result.openData.list[0].data.purePhoneNumber
let openid = res.result.openid
console.log('phonenumber, openid', phonenumber, openid)
if(phonenumber) {
// 远程绑定用户
that.remoteBindUser(phonenumber, openid)
}else {
wx.showToast({
icon: 'none',
title: 'undefined',
})
}
},
fail: err => {
console.log('err', err)
wx.showToast({
icon: 'none',
title: 'fail',
})
},
complete: () => {
console.log('complete')
}
})
}else {
// 拒绝
wx.showToast({
icon: 'none',
title: '绑定方可使用',
})
}
},
云函数
return 返回对象中的 openData 中包含了手机号码
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
const openData = await cloud.getOpenData({
list: [event.id],
})
return {
openData,
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
}
网友评论