网页手机号抓取程序(开发微信小程序的时候经常会遇到要绑定用户手机号的需求 )

优采云 发布时间: 2021-11-25 12:06

  网页手机号抓取程序(开发微信小程序的时候经常会遇到要绑定用户手机号的需求

)

  在开发微信小程序时,我们经常会遇到绑定用户手机号的需求。这里首先要获取用户信息中的手机号码:

  首先是页面上的做法(就一句)wxml:

   手机号认证

  然后是js(wx):

  里面调试代码很多,这里就不清理了(嘻嘻)

   /**

* 授权手机号

* @param {*} e

*/

getPhoneNumber: function(e) {

console.log("手机号iv");

console.log(e.detail.iv)

console.log("手机号encryptedData");

console.log(e.detail.encryptedData)

// var session_key = wx.getStorageSync('session_key');

// console.log('session_key');

// console.log(session_key);

console.log("config appid");

console.log(site.AppID);

var that=this;

wx.login({

success: res => {

console.log("手机号rescode");

console.log(res.code);

console.log(res);

/**

* 这里重新获取session_key 的请求放到后台去因为如果放在小程序中的话 还需要端口认证

*/

// wx.request({

// url: 'https://api.weixin.qq.com/sns/jscode2session?appid=wxe1bd8e4045ad80ba&secret=9fbf669bb61ddfdd2d455eebe1d6fdf5&js_code='+res.code+'&grant_type=authorization_code',

// success:function(resc){

// console.log('哈哈哈哈')

// console.log(resc)

wx.request({

url: decode,

data:{

data:e.detail.encryptedData,

iv: e.detail.iv,

code:res.code

},

success:function(res){

console.log("解密之后");

console.log(res);

console.log("返回手机号");

console.log(res.data.data.data.phoneNumber);

var timestamp=new Date().getTime()

var data = {

"timestamp":timestamp,

"url":(checkphone+"").replace(config.baseUrl,""),

"user_id":userid,

'phone':res.data.data.data.phoneNumber,

}

var sign=utils.makeSign(site.siteTokenKey,data)

var phone = res.data.data.data.phoneNumber;

if(res.data.data.flag==1){

wx.request({

url: checkphone,

method: "POST",

data:data,

header: {

"Content-Type": "application/x-www-form-urlencoded",

"sign":sign,

'timestamp':timestamp

},

success: function (res) {

console.log(res);

if(res.data.data.flag == 1){

wx.navigateBack({

delta: 1

})

}

if(res.data.data.status == 0){

wx.showToast({

title: '保存失败',

icon: 'none',

duration: 2000

})

}

},

})

}else{

wx.navigateBack({

delta: 1

})

}

}

})

// }

// })

}

})

}

  接下来是后台解密和更新手机号到数据库的主程序(php版):

   /**

* 解密

*/

public function decode(){

//siteconfig读取类

$siteConfigObj = new Config("site_config");

$site_config = $siteConfigObj->getInfo();

$data=IFilter::act(IReq::get('data'));

$iv=IFilter::act(IReq::get('iv'));

// $sessionkey=IFilter::act(IReq::get('sessionkey'));

$code=IFilter::act(IReq::get('code'));

$decrypt = new WxServerApi();

//siteconfig中记录的appid以及secret

$appid=$site_config['wechat_AppID'];

$secret=$site_config['wechat_AppSecret'];

//生成一个新的session_key

$ccc="https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=$code&grant_type=authorization_code";

$content=$this->curl($ccc);

$content=json_decode($content);

$sessionkey=$content->session_key;

$config=new Config('site_config');

$appid=$config->wechat_AppID;

if (strlen($sessionkey) != 24) {

Block::sendRseult(200,'goods detail success',[

'flag'=>0,

'data'=>'false1',

]);

}

$aesKey=base64_decode($sessionkey);

if (strlen($iv) != 24) {

Block::sendRseult(200,'goods detail success',[

'flag'=>0,

'data'=>'false2',

]);

}

$aesIV=base64_decode($iv);

$aesCipher=base64_decode($data);

$result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);

/**

* 这里再次判断一次的原因是因为 重新生成的session_key 第一次解密会出现返回false的情况 第二次就正常 so.....

*/

if($result==false){

$result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);

}

$dataObj=json_decode( $result );

if( $dataObj == NULL )

{

Block::sendRseult(200,'goods detail success',[

'flag'=>0,

'data'=>'false3',

]);

}

if( $dataObj->watermark->appid != $appid )

{

Block::sendRseult(200,'goods detail success',[

'flag'=>0,

'data'=>'false4',

]);

}

Block::sendRseult(200,'goods detail success',[

'flag'=>1,

'data'=>$dataObj,

]);

}

  这里值得一提的是,重新生成 session_key 来执行解密操作

  $result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);

的时候 第一次总是会会出现返回false的情况 第二次就正常了 所以需要判断false 然后在执行一遍 (虽然办法有点笨 但是很有效 如果有更好的办法 请在评论区中留言 欢迎欢迎!!!)

到这里基本上就结束了手机认证 感谢您的耐心阅读 希望可以帮到您! bingo!!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线