纵有疾风起
人生不言弃

微信小程序获取用户手机号,利用云开发云函数拿到session_key

客户端

getPhoneNumber: function (e) {      var that = this;      if (!e.detail.errMsg || e.detail.errMsg != "getPhoneNumber:ok") {        wx.showModal({          content: '不能获取手机号码',          showCancel: false        })        return;      }      wx.showLoading({        title: '获取手机号中...',      })      wx.cloud.callFunction({        name: 'getToken',  // 对应云函数名        data: {          encryptedData: e.detail.encryptedData,          iv: e.detail.iv,          sessionCode: app.globalData.sessionCode    // 这个通过wx.login获取,去了解一下就知道。这不多描述        },        success: res => {          wx.hideLoading()          // 成功拿到手机号,跳转首页          wx.switchTab({            url: '../index/index' // 这里是要跳转的路径          })        },        fail: err => {          console.error(err);          wx.showToast({            title: '获取手机号失败',            icon: 'none'          })        }      })    }

服务端

  • 步骤1: 新建node.js云函数getToken

    微信小程序获取用户手机号,利用云开发云函数拿到session_key插图
    image.png
  • 步骤2:因为需要进行网络请求,这里使用request库

    右击getToken函数名,选择在终端中打开

    微信小程序获取用户手机号,利用云开发云函数拿到session_key插图1
    image.png
  • 步骤3.下载 request 或 request-promise 模块(request-promise模块,可以使用promise,async和await)
    命令行:
    npm install –save request
    npm install –save request-promise
    如成功下载,则可见
    微信小程序获取用户手机号,利用云开发云函数拿到session_key插图2
    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所示
至此,小程序便可得到解密后的用户手机号,

转载请注明出处,如有不同见解,欢迎私信讨论,谢谢

这里多谢@小文鱼 简友替我指出一个小错误,appid,没在最外面定义,已加回!

文章转载于:https://www.jianshu.com/p/9651cc121afe

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » 微信小程序获取用户手机号,利用云开发云函数拿到session_key
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录