分享按钮

微信小程序获取手机号

微信 / 2589人浏览 / 0人评论

第一步,登录,获取用户的 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];
   }

}

 




感谢博主,喝杯咖啡~

请喝咖啡


感谢博主,喝杯咖啡~

心灵鸡汤

如果爱他,接受他的现在,别幻想他的改变。如果他能改,当然最好,不然,就想一想,你能不能接受。婚前的每一个缺点,婚后都会被放大。他抽烟,而你又爱他,就努力接受吧,婚后戒烟的男人太少了。其他缺点也是一样。