时间:2021-05-18
小程序有一个获取用户很便捷的api,就是通过getPhoneNumber获取用户的已经绑定微信的手机号码。有一点要大家注意,现在微信和注重用户体验,有些方法都是需要用户主动去触发才能调用的,比如getPhoneNumber。
1、通过wx.login获取code,从而获取到用户的openID和sessionKey
2、通过getPhoneNumber获取encryptedData,iv
3、通过参数【encryptedData】、【iv】 、【sessionKey】 请求后台解密获取用户手机号
1、用户点击获取用户手机号码按钮
<button class='pop_btn' plain="true"open-type='getPhoneNumber' bindgetphonenumber="getPhoneNumber">获取用户手机号</button>2、弹出授权图片:
3、通过解密获取手机号码
直接上代码:
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 blocke.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"); }到此这篇关于微信小程序用户授权获取手机号的文章就介绍到这了,更多相关小程序授权获取手机号内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
微信小程序getPhoneNumber获取用户手机号小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等,有了这个组件可以快速获取微信绑定手机号码
这篇文章主要介绍了微信小程序如何通过用户授权获取手机号(getPhoneNumber),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等,有了这个组件可以快速获取微信绑定手机号码,无须用户填写。1.getPhoneNumber这个
“小程序用户注册等环节,现在可以使用手机号快速填写组件。用户点击并授权后,即可将当前微信绑定的手机号快速填入。微信会员卡商家在小程序内可以使用开卡组件帮助用户快
最近在做一款微信小程序,需要获取用户手机号,具体步骤如下:流程图:1、首先,客户端调用wx.login,回调数据了包含jscode,用于获取openid(用户唯