- Lịch sử thanh toán hoá đơn trả thêm `method` (tự động gia hạn / số dư / admin / chuyển khoản / hoàn tiền), bỏ đuôi `(method)` khỏi ghi chú - `DnsServer::panelUrl()` = https://<domain>/ dùng cho email cấp hosting và nút Plesk của khách - Order item trả thêm `uuid`/`type` của dịch vụ để FE dẫn tới trang quản lý - Yêu cầu huỷ dịch vụ, chứng chỉ SSL, lịch sử gia hạn, đổi mật khẩu hosting cho khách Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
26 lines
664 B
PHP
26 lines
664 B
PHP
<?php
|
|
|
|
namespace App\Support;
|
|
|
|
use RuntimeException;
|
|
|
|
class ResponseCipher
|
|
{
|
|
public static function encrypt(?string $value): ?string
|
|
{
|
|
if ($value === null || $value === '') {
|
|
return $value;
|
|
}
|
|
|
|
$key = (string) config('services.client_api.response_key');
|
|
if (!preg_match('/^[a-fA-F0-9]{64}$/', $key)) {
|
|
throw new RuntimeException('CLIENT_RESPONSE_KEY must be a 64-character hex string');
|
|
}
|
|
|
|
$iv = random_bytes(12);
|
|
$ciphertext = openssl_encrypt($value, 'aes-256-gcm', hex2bin($key), OPENSSL_RAW_DATA, $iv, $tag);
|
|
|
|
return base64_encode($iv . $ciphertext . $tag);
|
|
}
|
|
}
|