美文网首页小程序
微信小程序获取用户手机号,利用云开发云函数拿到session_k

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

作者: Cue_Ada | 来源:发表于2019-05-10 20:51 被阅读0次

客户端

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


    image.png
  • 步骤2:因为需要进行网络请求,这里使用request库

    右击getToken函数名,选择在终端中打开 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所示
至此,小程序便可得到解密后的用户手机号,

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

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

相关文章

网友评论

    本文标题:微信小程序获取用户手机号,利用云开发云函数拿到session_k

    本文链接:https://www.haomeiwen.com/subject/qeezoqtx.html