feat : Proxy payment

This commit is contained in:
2025-09-07 12:17:43 +08:00
parent 14ba4674ee
commit d509459134
5 changed files with 136 additions and 0 deletions

View File

@@ -0,0 +1,54 @@
<?php
namespace App\Aspect\Test\Proxy;
use App\Interface\Test\Decorator\LoggerInterface;
use App\Service\Test\Proxy\Payment\PaymentService;
use Hyperf\Di\Annotation\Aspect;
use Hyperf\Di\Annotation\Inject;
use Hyperf\Di\Aop\AbstractAspect;
use Hyperf\Di\Aop\ProceedingJoinPoint;
use Hyperf\Di\Exception\Exception;
use Throwable;
#[Aspect]
class LoggingAspect extends AbstractAspect
{
/**
* @var LoggerInterface
*/
#[Inject]
protected LoggerInterface $logger;
/**
* @var array|string[]
*/
public array $classes = [
PaymentService::class , '::pay',
];
/**
* @param ProceedingJoinPoint $proceedingJoinPoint
* @return mixed
* @throws Throwable
*/
public function process(ProceedingJoinPoint $proceedingJoinPoint): mixed
{
$amount = $proceedingJoinPoint->arguments['keys']['amount'];
$this->logger->log('Attempting payment of '.$amount.' for '.$proceedingJoinPoint->methodName);
try {
$result = $proceedingJoinPoint->process();
$this->logger->log('Payment of '.$amount.'succeeded');
return $result;
} catch (Throwable $e) {
$this->logger->error('Payment of '.$amount.' failed: '.$e->getMessage());
return false;
}
}
}

View File

@@ -0,0 +1,53 @@
<?php
namespace App\Aspect\Test\Proxy;
use App\Service\Test\Proxy\Payment\PaymentService;
use Hyperf\Di\Annotation\Aspect;
use Hyperf\Di\Annotation\Inject;
use Hyperf\Di\Aop\AbstractAspect;
use Hyperf\Di\Aop\ProceedingJoinPoint;
use Hyperf\Di\Exception\Exception;
use Hyperf\HttpServer\Request;
use RuntimeException;
#[Aspect]
class SecurityAspect extends AbstractAspect
{
/**
* @var Request
*/
#[Inject]
protected Request $request;
/**
* @var array|string[]
*/
public array $classes = [
PaymentService::class , '::pay',
];
/**
* 安全验证切面
* @param ProceedingJoinPoint $proceedingJoinPoint
* @return mixed
* @throws Exception
*/
public function process(ProceedingJoinPoint $proceedingJoinPoint): mixed
{
$token = $this->request->header('Authorization');
if (!$this->validateToken($token)) throw new RuntimeException('Unauthorized');
return $proceedingJoinPoint->process();
}
/**
* @param string|null $token
* @return bool
*/
private function validateToken(?string $token): bool
{
return $token !== 'valid-token';
}
}