上传文件至「aliapi/lib」

这个提交包含在:
2026-07-24 11:44:30 +08:00
父节点 0e3f5e718a
当前提交 591896833d
修改 2 个文件,包含 248 行新增0 行删除
+189
查看文件
@@ -0,0 +1,189 @@
<?php
class AliyunDnsClient {
private $accessKeyId;
private $accessKeySecret;
private $endpoint;
private $regionId;
public function __construct($accessKeyId, $accessKeySecret, $endpoint = 'https://alidns.aliyuncs.com', $regionId = 'cn-hangzhou') {
$this->accessKeyId = $accessKeyId;
$this->accessKeySecret = $accessKeySecret;
$this->endpoint = $endpoint;
$this->regionId = $regionId;
}
private function percentEncode($str) {
$res = urlencode($str);
$res = str_replace('+', '%20', $res);
$res = str_replace('*', '%2A', $res);
$res = str_replace('%7E', '~', $res);
return $res;
}
private function generateSignature($parameters) {
ksort($parameters);
$canonicalizedQueryString = '';
foreach ($parameters as $key => $value) {
$canonicalizedQueryString .= '&' . $this->percentEncode($key) . '=' . $this->percentEncode($value);
}
$canonicalizedQueryString = substr($canonicalizedQueryString, 1);
$stringToSign = 'GET&%2F&' . $this->percentEncode($canonicalizedQueryString);
$signature = base64_encode(hash_hmac('sha1', $stringToSign, $this->accessKeySecret . '&', true));
return $signature;
}
private function sendRequest($action, $params) {
$parameters = [
'Action' => $action,
'AccessKeyId' => $this->accessKeyId,
'Format' => 'JSON',
'RegionId' => $this->regionId,
'SignatureMethod' => 'HMAC-SHA1',
'SignatureNonce' => uniqid() . mt_rand(1000, 9999),
'SignatureVersion' => '1.0',
'Timestamp' => gmdate('Y-m-d\TH:i:s\Z'),
'Version' => '2015-01-09'
];
foreach ($params as $key => $value) {
$parameters[$key] = $value;
}
ksort($parameters);
$signature = $this->generateSignature($parameters);
$queryParts = [];
foreach ($parameters as $key => $value) {
$queryParts[] = $this->percentEncode($key) . '=' . $this->percentEncode($value);
}
$queryParts[] = 'Signature=' . $this->percentEncode($signature);
$queryString = implode('&', $queryParts);
$url = $this->endpoint . '?' . $queryString;
if (function_exists('curl_init')) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_USERAGENT, 'AliyunDnsClient/1.0');
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
if ($response === false) {
throw new Exception('cURL error: ' . $error);
}
} else {
$context = stream_context_create([
'http' => [
'method' => 'GET',
'timeout' => 30,
'header' => [
'User-Agent: AliyunDnsClient/1.0'
],
'protocol_version' => 1.1
],
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false
]
]);
$response = @file_get_contents($url, false, $context);
if ($response === false) {
$error = error_get_last();
throw new Exception('HTTP request failed: ' . ($error ? $error['message'] : 'Unknown error'));
}
}
$result = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new Exception('Invalid JSON response: ' . $response);
}
if (isset($result['Code']) && $result['Code'] !== 'Success') {
throw new Exception($result['Message'] ?? 'API error');
}
return $result;
}
public function addDomainRecord($domainName, $rr, $type, $value, $ttl = 600, $priority = null) {
$params = [
'DomainName' => $domainName,
'RR' => $rr,
'Type' => $type,
'Value' => $value,
'TTL' => $ttl
];
if ($priority !== null && in_array($type, ['MX', 'SRV'])) {
$params['Priority'] = $priority;
}
return $this->sendRequest('AddDomainRecord', $params);
}
public function deleteDomainRecord($recordId) {
$params = [
'RecordId' => $recordId
];
return $this->sendRequest('DeleteDomainRecord', $params);
}
public function updateDomainRecord($recordId, $rr, $type, $value, $ttl = 600, $priority = null) {
$params = [
'RecordId' => $recordId,
'RR' => $rr,
'Type' => $type,
'Value' => $value,
'TTL' => $ttl
];
if ($priority !== null && in_array($type, ['MX', 'SRV'])) {
$params['Priority'] = $priority;
}
return $this->sendRequest('UpdateDomainRecord', $params);
}
public function describeDomainRecords($domainName, $rrKeyWord = null, $type = null, $pageNumber = 1, $pageSize = 20) {
$params = [
'DomainName' => $domainName,
'PageNumber' => $pageNumber,
'PageSize' => $pageSize
];
if ($rrKeyWord !== null) {
$params['RRKeyWord'] = $rrKeyWord;
}
if ($type !== null) {
$params['Type'] = $type;
}
return $this->sendRequest('DescribeDomainRecords', $params);
}
public function describeRecordInfo($recordId) {
$params = [
'RecordId' => $recordId
];
return $this->sendRequest('DescribeRecordInfo', $params);
}
}
?>
+59
查看文件
@@ -0,0 +1,59 @@
<?php
/**
* 随机 Token 生成工具
*/
class TokenHelper
{
/**
* 生成随机字符串(大小写字母+数字)
*/
public static function generate($length = 32)
{
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$token = '';
for ($i = 0; $i < $length; $i++) {
$token .= $chars[random_int(0, strlen($chars) - 1)];
}
return $token;
}
/**
* 生成包含特殊字符的随机字符串
*/
public static function generateStrong($length = 32)
{
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=';
$token = '';
for ($i = 0; $i < $length; $i++) {
$token .= $chars[random_int(0, strlen($chars) - 1)];
}
return $token;
}
/**
* 生成 Base64 编码的随机字符串
*/
public static function generateBase64($length = 32)
{
return base64_encode(random_bytes($length));
}
/**
* 生成十六进制随机字符串
*/
public static function generateHex($length = 32)
{
return bin2hex(random_bytes($length / 2));
}
/**
* 生成 UUID v4
*/
public static function generateUUID()
{
$data = random_bytes(16);
$data[6] = chr(ord($data[6]) & 0x0f | 0x40);
$data[8] = chr(ord($data[8]) & 0x3f | 0x80);
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
}