1.只有企业小程序才可以获取用户手机号,个人小程序没有办法获取的。
2.云开发是自动鉴权的,不应该还要解密。
3.wx.cloud.CloudID is not a function错误
原因:基础库版本不对。
修改:开发工具->详情->调试基础库:版本修改为2.7.0
在开发工具中正常,但在模拟器中出错:
需要将版本号推送到云端。
wx.cloud.CloudID is not a function
正确的通过云函数获取手机号码的流程如下:
1,页面 cellphone.wxml
<!--miniprogram/pages/my/info/modify/cellphone/cellphone.wxml-->
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">手机号码</button>
{errMsg: "getPhoneNumber:ok",
encryptedData: "Aw+W76TSvYAPS.....g==",
iv: "9wSepi6qx...=",
cloudID: "30_sSext5q.....qmLQ"}
这个cloudID只有在开通了云开发的小程序才会返回,我们可以将cloudID传入云函数,通过云调用就可以直接获取开放数据
2,js cellphone.js
然后再在openData.js里输入以下代码,我们用事件处理函数getWeRunData来调用wx.getWeRunData接口,并打印结果
Page({
/**
* 页面的初始数据
*/
data: {
},
getPhoneNumber(e) {
console.log(JSON.stringify(e));
wx.cloud.callFunction({
name: 'openapi',
data: {
action:'getcellphone',
id:e.detail.cloudID
}
}).then(res => {
console.log('res: ', res)
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})
3,云函数 openapi 的index.js
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 云函数入口函数-start
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
switch (event.action) {
case 'getcellphone': {
return getCellphone(event);
}
default: {
return
}
}
return {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
}
// 云函数入口函数-end
//函数开始
async function getCellphone(event){
const res = await cloud.getOpenData({
list: [event.id], // 假设 event.openData.list 是一个 CloudID 字符串列表
})
}
detail:
cloudID: "36_7yGFBpYyOgaelsai0UOc0pPzvNsWIC-W-Sjk9WC0N0T_R0QjiG81JC7c8"
使用开发者工具新建云函数比如opendata,再index.js里输入以下代码,并部署上线,在云函数端接收到的 event 将会包含对应开放数据的对象
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV,
})
exports.main = async (event, context) => {
return event
}
真机获取到cloudID的前提条件
基础库》=2.8
微信客户端》=7.07
否则真机获取不到cloudID
https://cloud.tencent.com/developer/article/1554196
https://www.w3cschool.cn/cloudbasehandbookpro/cloudbasehandbookpro-ambo389w.html (ok)
2.普通解密数据获取手机号步骤
https://blog.csdn.net/sybolg/article/details/77678052
https://blog.csdn.net/hl18730262380/article/details/89671346
小程序云开发获取手机号完整代码
另1篇 登录、获取手机号完整代码
https://cloud.tencent.com/document/product/876/19534
官方解密介绍
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html