微信小程序 获取手机号码详解

小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等,

      有了这个组件可以快速获取微信绑定手机号码,无须用户填写。


1.getPhoneNumber这个组件通过button来实现(别的标签无效)。将button中的open-type=“getPhoneNumber”,并且绑定bindgetphonenumber事件获取回调。

< button open-type= "getPhoneNumber" bindgetphonenumber= "getPhoneNumber"> 获取手机号码 button >

这个组件之前必须先调用login接口,如果没有调用login点击button时会提示先调用login。

[html]  view plain  copy
  1. wx.login({
    success: function (res) {
    // console.log(res);
    if (res.code) {
    //发起网络请求
    wx.request({
    url: ''
    data: {
    code: res.code
    },
    success: function (response) {
    console.log(response);
    var openId = response.data.openid;
    var session_key = response.data.session_key;
    var app = getApp();
    app.globalData.openid = openId;
    app.globalData.session_key = session_key;
    typeof cb == "function" && cb()

    }
    })
    } else {
    console.log( '获取用户登录态失败!' + res.errMsg)
    }
    }
    });



3.通过bindgetphonenumber绑定的事件来获取回调。回调的参数有三个,

errMsg:用户点击取消或授权的信息回调。

iv:加密算法的初始向量(如果用户没有同意授权则为undefined)。

encryptedData: 用户信息的加密数据(如果用户没有同意授权同样返回undefined)

微信小程序 获取手机号码详解_第1张图片

[html]  view plain  copy
  1. getPhoneNumber: function(e) {   
  2.     
    var that= this;
    var session_key=app.globalData.session_key;

    if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {
    wx.showModal({
    title: '提示',
    showCancel: false,
    content: '未授权',
    success: function (res) { }
    })
    } else {

    wx.checkSession({
    success: function () {
    console.log( 1);
    wx.request({
    url: 'https://m.xianmaogame.com/sd_idiom/xcx/getPhoneNumber/demo.php',
    data: {
    encryptedData:e.detail.encryptedData,
    iv:e.detail.iv,
    sessionKey:session_key
    },
    method: 'GET',
    success: function (res) {
    console.log( '获取手机号码成功');
    console.log(res);
    }
    })
    },
    fail: function () {
    console.log( 2);
    wx.login({
    success: function (res) {
    if (res.code) {
    //发起网络请求
    wx.request({
    url: ''
    data: {
    code: res.code
    },
    success: function (response) {
    var openId = response.data.openid;
    var session_key = response.data.session_key
    wx.request({
    url: '',
    data: {
    encryptedData: e.detail.encryptedData,
    iv: e.detail.iv,
    sessionKey: session_key
    },
    method: 'GET',
    success: function (res) {
    console.log( '获取手机号码成功');
    console.log(res);
    }
    })
    }
    })
    } else {
    console.log( '获取用户登录态失败!' + res.errMsg)
    }
    }
    });
    }
    })
    }

  3.   }  
4.最后我们需要根据自己的业务逻辑来进行处理,如果用户不同意授权的话可能我们会有一个让他手动输入的界面,如果不是强制获取手机号的话可以直接跳转页面进行下一步。(用户不同意授权errMsg返回‘getPhoneNumber:fail user deny’)

5.用户同意授权,我们可以根据login时获取到的code来通过后台以及微信处理拿到session_key,最后通过app_id,session_key,iv,encryptedData(用户同意授权errMsg返回‘getPhoneNumber:ok’)

6.解密的方法可以去微信官方开发文档查看,有很详细说明。
加密数据解密算法(官方文档)

你可能感兴趣的:(微信小程序)