第一步,登录,获取用户的 session_key;
第二步,前端 点击按钮调用 bindgetphonenumber 事件,通过该事件得到 encryptedData 和 iv
第三步,把session_key,encryptedData 和 iv 传递给后端解密得到用户的手机号信息
/**
*获取微信手机号
*
*/
public function actionGetMobile(){
if($this->request->isPost){
$param = $this->request->post();
$sessionKey = !empty($param['session_key']) ? $param['session_key'] :'';
$encryptedData = !empty($param['encryptedData']) ? $param['encryptedData'] :'';
$iv = !empty($param['iv']) ? $param['iv'] :'';
if(!$sessionKey || !$encryptedData || !$iv){
return json(['code'=>0,'msg'=>'参数不能为空']);
}
include_once "wxBizDataCrypt.php";
$appid = 'wx4f4bc4dec97d474b';
$pc = new WxBizDataCrypt($appid, $sessionKey);
$errCode = $pc->decryptData($encryptedData, $iv, $data );
if ($errCode == 0) {
return json(['code'=>1,'msg'=>$data]);
} else {
return json(['code'=>0,'msg'=>$errCode]);
}
}
}
WxBizDataCrypt 文件可在 微信小程序 下载
class WxBizDataCrypt
{
private $appid;
private $sessionKey;
private $ErrorCode=[
'OK' => 0,
'IllegalAesKey' => -41001,
'IllegalIv' => -41002,
'IllegalBuffer' => -41003,
'DecodeBase64Error' => -41004,
];
/**
* 构造函数
* @param $sessionKey string 用户在小程序登录后获取的会话密钥
* @param $appid string 小程序的appid
*/
public function __construct( $appid, $sessionKey)
{
$this->sessionKey = $sessionKey;
$this->appid = $appid;
}
/**
* 检验数据的真实性,并且获取解密后的明文.
* @param $encryptedData string 加密的用户数据
* @param $iv string 与用户数据一同返回的初始向量
* @param $data string 解密后的原文
*
* @return int 成功0,失败返回对应的错误码
*/
public function decryptData( $encryptedData, $iv, &$data )
{
if (strlen($this->sessionKey) != 24) {
return $this->ErrorCode['IllegalAesKey'];// ['code'=>0,'msg'=>'sessionKey错误'];
}
$aesKey=base64_decode($this->sessionKey);
if (strlen($iv) != 24) {
return $this->ErrorCode['IllegalIv'];//['code'=>0,'msg'=>'iv错误'];
}
$aesIV = base64_decode($iv);
$aesCipher = base64_decode($encryptedData);
$result = openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);
$dataObj = json_decode( $result );
if ($dataObj == NULL ) {
return $this->ErrorCode['IllegalBuffer'];//['code'=>0,'msg'=>'数据为空'];
}
if ($dataObj->watermark->appid != $this->appid) {
return $this->ErrorCode['IllegalBuffer'];//['code'=>0,'msg'=>'数据不正确'];
}
$data = $result;
return $this->ErrorCode['OK'];
#return ['code'=>1,'data'=>$data];
}
}
感谢博主,喝杯咖啡~
感谢博主,喝杯咖啡~
如果爱他,接受他的现在,别幻想他的改变。如果他能改,当然最好,不然,就想一想,你能不能接受。婚前的每一个缺点,婚后都会被放大。他抽烟,而你又爱他,就努力接受吧,婚后戒烟的男人太少了。其他缺点也是一样。