微信中html5获取手机号,微信小程序用户授权获取手机号(getPhoneNumber)

本文介绍了微信小程序如何通过getPhoneNumber接口获取用户已绑定的手机号。首先,通过wx.login获取code,然后使用code换取openID和sessionKey。接着,调用getPhoneNumber获取encryptedData和iv,最后通过后台解密encryptedData获取手机号。详细步骤包括用户授权、解密过程以及后台解密代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

小程序有一个获取用户很便捷的api,就是通过getPhoneNumber获取用户的已经绑定微信的手机号码。有一点要大家注意,现在微信和注重用户体验,有些方法都是需要用户主动去触发才能调用的,比如getPhoneNumber。

实现思路:

1、通过wx.login获取code,从而获取到用户的openID和sessionKey

2、通过getPhoneNumber获取encryptedData,iv

3、通过参数【encryptedData】 、【iv】 、【sessionKey】  请求后台解密获取用户手机号

直接上干货:

1、用户点击获取用户手机号码按钮

open-type='getPhoneNumber' bindgetphonenumber="getPhoneNumber">获取用户手机号

2、弹出授权图片:

368a182e23ad2ff55b07fa018873673a.png

3、通过解密获取手机号码

0ea58b77ae30e30be7ce085db406706d.png

直接上代码:

wxlogin: function() { //获取用户的openID和sessionKey

var that = this;

wx.login({

//获取code 使用wx.login得到的登陆凭证,用于换取openid

success: (res) = >{

wx.request({

method: "GET",

url: 'https://xxxwx/wxlogin.do',

data: {

code: res.code,

appId: "appIdSbcx",

appKey: "appKeySbcx"

},

header: {

'content-type': 'application/json' // 默认值

},

success: (res) = >{

console.log(res);

that.setData({

sessionKey: res.data.session_key

});

}

});

}

});

}

getPhoneNumber: function(e) { //点击获取手机号码按钮

var that = this;

wx.checkSession({

success: function() {

console.log(e.detail.errMsg)

console.log(e.detail.iv)

console.log(e.detail.encryptedData)

var ency = e.detail.encryptedData;

var iv = e.detail.iv;

var sessionk = that.data.sessionKey;

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

that.setData({

modalstatus: true

});

} else { //同意授权

wx.request({

method: "GET",

url: 'https://xxx/wx/deciphering.do',

data: {

encrypdata: ency,

ivdata: iv,

sessionkey: sessionk

},

header: {

'content-type': 'application/json' // 默认值

},

success: (res) = >{

console.log("解密成功~~~~~~~将解密的号码保存到本地~~~~~~~~");

console.log(res);

var phone = res.data.phoneNumber;

console.log(phone);

},

fail: function(res) {

console.log("解密失败~~~~~~~~~~~~~");

console.log(res);

}

});

}

},

fail: function() {

console.log("session_key 已经失效,需要重新执行登录流程");

that.wxlogin(); //重新登录

}

});

}

后台代码:

/**

* 解密并且获取用户手机号码

* @param encrypdata

* @param ivdata

* @param sessionkey

* @param request

* @return

* @throws Exception

*/

@RequestMapping(value = "deciphering", method = RequestMethod.GET)

public @ResponseBody String deciphering(String encrypdata,

String ivdata, String sessionkey,

HttpServletRequest request) {

byte[] encrypData = Base64.decode(encrypdata);

byte[] ivData = Base64.decode(ivdata);

byte[] sessionKey = Base64.decode(sessionkey);

String str="";

try {

str = decrypt(sessionKey,ivData,encrypData);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println(str);

return str;

}

public static String decrypt(byte[] key, byte[] iv, byte[] encData) throws Exception {

AlgorithmParameterSpec ivSpec = new IvParameterSpec(iv);

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

SecretKeySpec keySpec = new SecretKeySpec(key, "AES");

cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);

//解析解密后的字符串

return new String(cipher.doFinal(encData),"UTF-8");

}

总结

到此这篇关于微信小程序用户授权获取手机号的文章就介绍到这了,更多相关小程序授权获取手机号内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值