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';
}
}

View File

@@ -4,8 +4,10 @@ declare(strict_types=1);
namespace App\Controller\Test;
use App\Service\Test\Proxy\AopService;
use App\Service\Test\Proxy\BasicSubjectService;
use App\Service\Test\Proxy\DynamicProxyService;
use App\Service\Test\Proxy\Payment\PaymentService;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\RequestMapping;
use Psr\Container\ContainerExceptionInterface;
@@ -33,4 +35,13 @@ class ProxyController
{
return (new DynamicProxyService)->handle();
}
/**
* @return array
*/
#[RequestMapping(path: 'payment', methods: 'GET')]
public function payment(): array
{
return (new AopService)->handle();
}
}

View File

@@ -0,0 +1,13 @@
<?php
namespace App\Interface\Test\Proxy;
interface PaymentInterface
{
/**
* 代理支付接口
* @param float $amount
* @return array
*/
public function pay(float $amount) : array;
}