受欢迎的博客标签

微信小程序云开发-自动鉴权免解密获取手机号码

Published

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

小程序云开发获取手机号完整代码

https://blog.csdn.net/qq_35713752/article/details/106484607?utm_medium=distribute.pc_relevant.none-task-blog-baidulandingword-2&spm=1001.2101.3001.4242

 

另1篇 登录、获取手机号完整代码

https://cloud.tencent.com/document/product/876/19534

 

官方解密介绍

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html