微信小程序用户授权获取手机号(getPhoneNumber)
前言
小程序有一个获取用户很便捷的api,就是通过getPhoneNumber获取用户的已经绑定微信的手机号码。有一点要大家注意,现在微信和注重用户体验,有些方法都是需要用户主动去触发才能调用的,比如getPhoneNumber。
实现思路:
1、通过wx.login获取code,从而获取到用户的openID和sessionKey
2、通过getPhoneNumber获取encryptedData,iv
3、通过参数【encryptedData】 、【iv】、【sessionKey】 请求后台解密获取用户手机号
直接上干货:
1、用户点击获取用户手机号码按钮
获取用户手机号
2、弹出授权图片:
3、通过解密获取手机号码
直接上代码:
wxlogin:function(){//获取用户的openID和sessionKey
varthat=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){//点击获取手机号码按钮
varthat=this;
wx.checkSession({
success:function(){
console.log(e.detail.errMsg)
console.log(e.detail.iv)
console.log(e.detail.encryptedData)
varency=e.detail.encryptedData;
variv=e.detail.iv;
varsessionk=that.data.sessionKey;
if(e.detail.errMsg=='getPhoneNumber:failuserdeny'){
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);
varphone=res.data.phoneNumber;
console.log(phone);
},
fail:function(res){
console.log("解密失败~~~~~~~~~~~~~");
console.log(res);
}
});
}
},
fail:function(){
console.log("session_key已经失效,需要重新执行登录流程");
that.wxlogin();//重新登录
}
});
}
后台代码:
/**
*解密并且获取用户手机号码
*@paramencrypdata
*@paramivdata
*@paramsessionkey
*@paramrequest
*@return
*@throwsException
*/
@RequestMapping(value="deciphering",method=RequestMethod.GET)
public@ResponseBodyStringdeciphering(Stringencrypdata,
Stringivdata,Stringsessionkey,
HttpServletRequestrequest){
byte[]encrypData=Base64.decode(encrypdata);
byte[]ivData=Base64.decode(ivdata);
byte[]sessionKey=Base64.decode(sessionkey);
Stringstr="";
try{
str=decrypt(sessionKey,ivData,encrypData);
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
System.out.println(str);
returnstr;
}
publicstaticStringdecrypt(byte[]key,byte[]iv,byte[]encData)throwsException{
AlgorithmParameterSpecivSpec=newIvParameterSpec(iv);
Ciphercipher=Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpeckeySpec=newSecretKeySpec(key,"AES");
cipher.init(Cipher.DECRYPT_MODE,keySpec,ivSpec);
//解析解密后的字符串
returnnewString(cipher.doFinal(encData),"UTF-8");
}
总结
到此这篇关于微信小程序用户授权获取手机号的文章就介绍到这了,更多相关小程序授权获取手机号内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。