refactor: flatten src/AKSRT → src (drop theme-identifier dir)

Move all domain folders from src/AKSRT/{Domain} to src/{Domain}; remap
Composer PSR-4 "AKSRT\\": "src/"; update audit script + README + ADR
paths; remove dead tools/build-psr4-map.php (scanned deleted inc/classes).
This commit is contained in:
2026-08-02 22:06:06 +08:00
parent 56f1a8175f
commit 8c5b1555c9
285 changed files with 26 additions and 3600 deletions
+84
View File
@@ -0,0 +1,84 @@
<?php
/**
* @package AKSRT
*/
namespace AKSRT\Sms;
defined('ABSPATH') || exit;
class SMSSignatureHelper {
/**
* 生成签名并发起请求
*
* @param string $accessKeyId AccessKeyId
* @param string $accessKeySecret AccessKeySecret
* @param string $domain API 域名
* @param array $params API 参数
* @param bool $https 是否使用 HTTPS
* @return array|\WP_Error
*/
public function request(string $accessKeyId, string $accessKeySecret, string $domain, array $params, bool $https = true) {
$apiParams = array_merge([
'SignatureMethod' => 'HMAC-SHA1',
'SignatureNonce' => uniqid((string) mt_rand(0, 0xffff), true),
'SignatureVersion' => '1.0',
'AccessKeyId' => $accessKeyId,
'Timestamp' => gmdate('Y-m-d\TH:i:s\Z'),
'Format' => 'JSON',
], $params);
ksort($apiParams);
$sortedQueryString = '';
foreach ($apiParams as $key => $value) {
$sortedQueryString .= '&' . $this->encode($key) . '=' . $this->encode((string) $value);
}
$stringToSign = 'POST&%2F&' . $this->encode(substr($sortedQueryString, 1));
$sign = base64_encode(hash_hmac('sha1', $stringToSign, $accessKeySecret . '&', true));
$signature = $this->encode($sign);
$url = ($https ? 'https' : 'http') . "://{$domain}/";
$body = "Signature={$signature}{$sortedQueryString}";
return $this->fetchContent($url, $body);
}
/**
* URL 编码(对齐阿里云规范)
*/
private function encode(string $str): string {
$res = rawurlencode($str);
$res = str_replace('+', '%20', $res);
$res = str_replace('*', '%2A', $res);
$res = str_replace('%7E', '~', $res);
return $res;
}
/**
* 发送 HTTP POST 请求
*
* @return array|\WP_Error
*/
private function fetchContent(string $url, string $body) {
$response = wp_remote_post($url, [
'timeout' => 10,
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
'x-sdk-client' => 'php/2.0.0',
],
'body' => $body,
]);
if (is_wp_error($response)) {
return $response;
}
$content = wp_remote_retrieve_body($response);
$decoded = json_decode($content, true);
return is_array($decoded) ? $decoded : ['raw' => $content];
}
}