Files
ZangShiQi/extend/api/CenterClient.php
2026-04-04 17:27:12 +08:00

125 lines
3.0 KiB
PHP
Executable File

<?php
namespace extend\api;
/**
* 授权中心
* Class CenterClient
* @package extend\api
*/
class CenterClient
{
// 请求地址
private $request_url = "http://localhost/niucenter/?s=/niucenter/api/";
// 平台标识
private $name = "NIUCLOUD";
private $app_key = "b61d312d32976df698ca34d098d23a9d";
private $public_key;
private $private_key;
private $key_len;
// 参数
private $params = array();
public function __construct()
{
$this->initRSA();
$this->params['params'] = [
'name' => $this->name,
'app_key' => $this->app_key
];
}
/**
* POST请求
* @param $method
* @param array $params
* @return bool|false|mixed|string
*/
public function post($method, $params = [])
{
$this->request_url .= $method;
$publicEncrypt = $this->publicEncrypt(json_encode($params));
$this->params['params']['public_encrypt'] = $publicEncrypt;
$res = HttpClient::post($this->request_url, $this->params);
if (!empty($res)) {
//对返回数据进行解密,解密需要一些时间,暂时去掉
// $decrypted = $this->publicDecrypt($res);
// if(!empty($decrypted)){
// $res = json_decode($decrypted, true);
// }else{
// $res = json_decode($res, true);
// }
$res = json_decode($res, true);
return $res;
} else {
return json_encode(error("接口发生错误"));
}
}
/**
* 初始化公钥 长度
*/
private function initRSA()
{
$public_key = ADDON_APP_PATH . '/Niushop/rsa_public_key.pem';
$public_key_content = file_get_contents($public_key);
$this->public_key = openssl_pkey_get_public($public_key_content);
$this->key_len = openssl_pkey_get_details($this->public_key)['bits'];
}
/*
* 公钥加密
*/
public function publicEncrypt($data)
{
$encrypted = '';
$part_len = $this->key_len / 8 - 11;
$parts = str_split($data, $part_len);
//分段加密
foreach ($parts as $part) {
$encrypted_temp = '';
openssl_public_encrypt($part, $encrypted_temp, $this->public_key);
$encrypted .= $encrypted_temp;
}
return $this->url_safe_base64_encode($encrypted);
}
/*
* 公钥解密
*/
public function publicDecrypt($encrypted)
{
$decrypted = "";
$part_len = $this->key_len / 8;
$base64_decoded = $this->url_safe_base64_decode($encrypted);
$parts = str_split($base64_decoded, $part_len);
foreach ($parts as $part) {
$decrypted_temp = '';
openssl_public_decrypt($part, $decrypted_temp, $this->public_key);
$decrypted .= $decrypted_temp;
}
return $decrypted;
}
function url_safe_base64_encode($data)
{
return str_replace(array( '+', '/', '=' ), array( '-', '_', '' ), base64_encode($data));
}
function url_safe_base64_decode($data)
{
$base_64 = str_replace(array( '-', '_' ), array( '+', '/' ), $data);
return base64_decode($base_64);
}
}