PHP实现微信小程序用户授权的工具类示例(4)

  /**
   * 根据unionid获取用户信息
   */
  public function getByWxUnionId($unionId)
  {
    $cacheKey = getCacheKey('redis_key.cache_key.wxa_user.info') . $unionId;
    $value = $this->remember($cacheKey, function () use ($unionId) {
      $userInfo = WxaUser::where('wx_union_id', $unionId)->first();
      $userInfo = $this->compactUserInfo($userInfo);
      return $userInfo;
    });
    return $value;
  }

WxBizDataHelper工具类

<?php
/**
 * Created by PhpStorm.
 * User: Auser
 * Time: 11:17
 */

namespace App\Http\Base\Wx;


class WxBizDataHelper
{

  private $appid;
  private $seesionKey ;
  private $encryptedData;
  private $iv;
  public function __construct($appid, $sessionKey,$encryptedData, $iv)
  {
    $this->appid = $appid;
    $this->seesionKey = $sessionKey;
    $this->encryptedData = $encryptedData;
    $this->iv = $iv;
  }

  public function getData(){
    $pc = new WXBizDataCrypt($this->appid, $this->seesionKey);
    $json = '';
    $errCode = $pc->decryptData($this->encryptedData, $this->iv, $json);
    $data = [];
    if ($errCode == 0) {
      $data = json_decode($json,true);
    }
    return $data;
  }


}

WXBizDataCrypt工具类

<?php
/**
 * Created by PhpStorm.
 * User: Auser
 * Time: 10:38
 */

namespace App\Http\Base\Wx;

use App\Http\Base\Wx\Prpcrypt;
use App\Http\Base\Wx\ErrorCode;
use App\Http\Base\Wx\PKCS7Encoder;
class WXBizDataCrypt
{

  private $appid;
  private $sessionKey;

  /**
   * 构造函数
   * @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 ErrorCode::$IllegalAesKey;
    }
    $aesKey=base64_decode($this->sessionKey);


    if (strlen($iv) != 24) {
      return ErrorCode::$IllegalIv;
    }
    $aesIV=base64_decode($iv);

    $aesCipher=base64_decode($encryptedData);

    $pc = new Prpcrypt($aesKey);
    $result = $pc->decrypt($aesCipher,$aesIV);

    if ($result[0] != 0) {
      return $result[0];
    }

    $dataObj=json_decode( $result[1] );
    if( $dataObj == NULL )
    {
      return ErrorCode::$IllegalBuffer;
    }
    if( $dataObj->watermark->appid != $this->appid )
    {
      return ErrorCode::$IllegalBuffer;
    }
    $data = $result[1];
    return ErrorCode::$OK;
  }

}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/6041.html