微信小程序🔥【达达】Web全栈之路微信小程序

微信小程序获取用户手机号

2018-09-27  本文已影响0人  是狮子呀_

2018年9月27日星期四

小程序获取用户手机号登录

使用方法

需要将< button >组件open-type的值设置为getPhoneNumber,当用户点击并同意之后,可以通过bindgetphonenumber事件回调获取到微信服务器返回的加密数据, 然后在第三方服务端结合session_key以及app_id进行解密获取手机号。

<button open-type=“getPhoneNumber” bindgetphonenumber=“getPhoneNumber”>

注意:获取微信用户绑定的手机号,需先调用login接口

在回调中调用 wx.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey,导致解密失败。建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免login 刷新登录态。

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

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

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

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

encryptedData 解密后为以下 json 结构

//app.js

App({

    onLaunch: function () {

    // 登录

    wx.login({

    success: function (res) {

    var code = res.code;

    wx.request({

    url: 'https://*****.com',

    method: 'POST',

    data: {

    js_code: code

    }, //传递后台code值

    header: {

    'Accept': "*/*"

    },

    success: function (res) {

    var wechat = {

    openid: res.data.openid,

    thirdkey: res.data.session_key

    }

    wx.setStorage({  //返回openid session_key  本地缓存

    key: 'wechat',

    data: wechat

    })

    }

    })

    },

    fail: function (res) {

    console.log("登陆失败")

    }

    })

    }

})

//login.wxml

<button hover-class='btn_hover' open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">登录</button>

// login.js

getPhoneNumber: function (e) {

    var that = this;

    // 拒绝授权

    if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {

    wx.showModal({

    title: '提示',

    showCancel: false,

    content: '未授权您将无法登陆',

    success: function (res) { }

    })

    } else {

    // 接受授权

    wx.getStorage({

    key: 'wechat',

    success: function (res) {

    var openid = res.data.openid; //openid

    var thirdkey = res.data.thirdkey; //session_key

    wx.request({

    url: 'https://www.*****.com',

    method: 'POST',

    data: {

    encryptedData: e.detail.encryptedData,

    iv: e.detail.iv,

    openid: openid,

    thirdkey: thirdkey

    },

    header: {'Accept': "*/*"},

    success: function (res) {

    console.log("提交到服务器成功了~~~~手机号登录")

    console.log(res.data)

    },

    fail: function (res) {

    console.log("提交到服务器失败了")

    }

    })//end of wx.request

    }

    })

    }

}

上一篇 下一篇

猜你喜欢

热点阅读