This commit is contained in:
87
README
Normal file
87
README
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
## 仓库
|
||||||
|
|
||||||
|
- [hhl_hyperf_service](https://codeup.aliyun.com/67039465d8d1ada68263f984/hhl/rewrite/hyperf_service.git) - git远程仓库地址
|
||||||
|
|
||||||
|
## 特性
|
||||||
|
|
||||||
|
- **最新技术栈**:使用 PHP8.3/hyperf3.1/swoole5.1.4 等后端前沿技术开发
|
||||||
|
|
||||||
|
## 文档
|
||||||
|
|
||||||
|
[文档地址 Github](https://hyperf.wiki/3.1/)
|
||||||
|
|
||||||
|
## 前序准备
|
||||||
|
|
||||||
|
- [php8.3](https://www.php.net/) 和 [git](https://git-scm.com/) - 项目开发环境
|
||||||
|
- [swoole](https://www.swoole.com/) - 熟悉 swoole 特性
|
||||||
|
- [php8.3](https://www.php.net/) - 熟悉 php 基础语法
|
||||||
|
- [hyperf](https://hyperf.wiki/3.1/) - 熟悉 `hyperf` 基本语法
|
||||||
|
|
||||||
|
## 安装和使用
|
||||||
|
|
||||||
|
- 安装 swoole 和 xlswriter 扩展
|
||||||
|
|
||||||
|
```
|
||||||
|
自行搜索安装教程
|
||||||
|
```
|
||||||
|
|
||||||
|
- 获取代码
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://git.ctexthuang.com/ctexthuang/hyperf_test.git
|
||||||
|
|
||||||
|
mkdir uploads
|
||||||
|
```
|
||||||
|
|
||||||
|
- vendor
|
||||||
|
|
||||||
|
```bash
|
||||||
|
composer install
|
||||||
|
```
|
||||||
|
|
||||||
|
- 运行
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp .env.example .env
|
||||||
|
|
||||||
|
vim .env
|
||||||
|
|
||||||
|
php bin/hyperf.php start
|
||||||
|
```
|
||||||
|
|
||||||
|
- command 函数
|
||||||
|
```bash
|
||||||
|
#框架自有
|
||||||
|
php bin/hyperf.php gen:controller LoginController
|
||||||
|
php bin/hyperf.php gen:model UserModel
|
||||||
|
php bin/hyperf.php gen:request LoginRequest
|
||||||
|
php bin/hyperf.php gen:command TestCommand
|
||||||
|
php bin/hyperf.php gen:job TestJob
|
||||||
|
php bin/hyperf.php gen:listener TestListener
|
||||||
|
php bin/hyperf.php gen:middleware AuthMiddleware
|
||||||
|
php bin/hyperf.php gen:amqp-consumer DemoConsumer
|
||||||
|
php bin/hyperf.php gen:amqp-producer DemoProducer
|
||||||
|
|
||||||
|
#新增命令
|
||||||
|
php bin/hyperf.php gen:service LoginService
|
||||||
|
php bin/hyperf.php gen:cron OssTask
|
||||||
|
php bin/hyperf.php gen:event TestEvent
|
||||||
|
```
|
||||||
|
|
||||||
|
## Git 贡献提交规范
|
||||||
|
|
||||||
|
- `feat` 新功能
|
||||||
|
- `fix` 修补 bug
|
||||||
|
- `docs` 文档
|
||||||
|
- `style` 格式、样式(不影响代码运行的变动)
|
||||||
|
- `refactor` 重构(即不是新增功能,也不是修改 BUG 的代码)
|
||||||
|
- `perf` 优化相关,比如提升性能、体验
|
||||||
|
- `test` 添加测试
|
||||||
|
- `build` 编译相关的修改,对项目构建或者依赖的改动
|
||||||
|
- `ci` 持续集成修改
|
||||||
|
- `chore` 构建过程或辅助工具的变动
|
||||||
|
- `revert` 回滚到上一个版本
|
||||||
|
- `workflow` 工作流改进
|
||||||
|
- `mod` 不确定分类的修改
|
||||||
|
- `wip` 开发中
|
||||||
|
- `types` 类型
|
||||||
77
app/Aspect/CommonReturnAspect.php
Normal file
77
app/Aspect/CommonReturnAspect.php
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Aspect;
|
||||||
|
|
||||||
|
use App\Lib\Return\AdminReturn;
|
||||||
|
use App\Lib\Return\CommonReturn;
|
||||||
|
use App\Lib\Return\TestReturn;
|
||||||
|
use Hyperf\Context\Context;
|
||||||
|
use Hyperf\Di\Annotation\Aspect;
|
||||||
|
use Hyperf\Di\Aop\AbstractAspect;
|
||||||
|
use Hyperf\Di\Aop\ProceedingJoinPoint;
|
||||||
|
use Hyperf\Di\Exception\Exception;
|
||||||
|
use Hyperf\HttpServer\Contract\RequestInterface;
|
||||||
|
|
||||||
|
#[Aspect]
|
||||||
|
class CommonReturnAspect extends AbstractAspect
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 需要切入的类
|
||||||
|
* @var array|string[]
|
||||||
|
*/
|
||||||
|
public array $classes = [
|
||||||
|
AdminReturn::class,
|
||||||
|
TestReturn::class,
|
||||||
|
// CommonReturn::class,
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 需要切入的注解
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public array $annotations = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 依赖注入容器
|
||||||
|
* @param RequestInterface $request
|
||||||
|
* @param int $userId
|
||||||
|
*/
|
||||||
|
public function __construct(
|
||||||
|
private readonly RequestInterface $request,
|
||||||
|
private int $userId = 0
|
||||||
|
) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 切面逻辑
|
||||||
|
* @param ProceedingJoinPoint $proceedingJoinPoint
|
||||||
|
* @return mixed
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public function process(ProceedingJoinPoint $proceedingJoinPoint): mixed
|
||||||
|
{
|
||||||
|
echo 1;
|
||||||
|
var_dump(1);
|
||||||
|
// 在调用前进行处理
|
||||||
|
$result = $proceedingJoinPoint->process();
|
||||||
|
// 在调用后进行处理
|
||||||
|
|
||||||
|
// 未登录返回 0
|
||||||
|
$this->userId = Context::get('user_id',0);
|
||||||
|
|
||||||
|
$this->writeResponseLog(json_encode($result));
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 写入请求日志
|
||||||
|
* @param string $content
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
private function writeResponseLog(string $content): void
|
||||||
|
{
|
||||||
|
echo json_encode($this->request->all());
|
||||||
|
echo $this->userId;
|
||||||
|
echo json_encode($content);
|
||||||
|
}
|
||||||
|
}
|
||||||
49
app/Command/ServiceCommand.php
Normal file
49
app/Command/ServiceCommand.php
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Command;
|
||||||
|
|
||||||
|
use Hyperf\Command\Annotation\Command;
|
||||||
|
use Hyperf\Devtool\Generator\GeneratorCommand;
|
||||||
|
use Psr\Container\ContainerInterface;
|
||||||
|
|
||||||
|
#[Command]
|
||||||
|
class ServiceCommand extends GeneratorCommand
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 构造函数 生成指令
|
||||||
|
* @param ContainerInterface $container
|
||||||
|
*/
|
||||||
|
public function __construct(protected ContainerInterface $container)
|
||||||
|
{
|
||||||
|
parent::__construct('gen:service');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取 stub 文件
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function getStub(): string
|
||||||
|
{
|
||||||
|
return __DIR__ . '/stubs/service.stub';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取默认命名空间
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function getDefaultNamespace(): string
|
||||||
|
{
|
||||||
|
return 'App\\Service';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成逻辑
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function configure(): void
|
||||||
|
{
|
||||||
|
$this->setDescription('Create a new service class');
|
||||||
|
|
||||||
|
parent::configure();
|
||||||
|
}
|
||||||
|
}
|
||||||
20
app/Command/stubs/service.stub
Normal file
20
app/Command/stubs/service.stub
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This service file is part of item.
|
||||||
|
*
|
||||||
|
* @author ctexthuang
|
||||||
|
* @contact ctexthuang@qq.com
|
||||||
|
* @web_site https://ctexthuang.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace %NAMESPACE%;
|
||||||
|
|
||||||
|
class %CLASS% extends
|
||||||
|
{
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
//todo Write logic
|
||||||
|
}
|
||||||
|
}
|
||||||
30
app/Constants/ReturnCode.php
Normal file
30
app/Constants/ReturnCode.php
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Constants;
|
||||||
|
|
||||||
|
use Hyperf\Constants\Annotation\Constants;
|
||||||
|
use Hyperf\Constants\Annotation\Message;
|
||||||
|
use Hyperf\Constants\EnumConstantsTrait;
|
||||||
|
|
||||||
|
#[Constants]
|
||||||
|
enum ReturnCode: int
|
||||||
|
{
|
||||||
|
use EnumConstantsTrait;
|
||||||
|
|
||||||
|
#[Message("Server Error!")]
|
||||||
|
case SERVER_ERROR = 500;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回成功
|
||||||
|
*/
|
||||||
|
#[Message('return success')]
|
||||||
|
case SUCCESS = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 返回失败
|
||||||
|
*/
|
||||||
|
#[Message('return fail')]
|
||||||
|
case ERROR = 1;
|
||||||
|
}
|
||||||
25
app/Controller/Test/AdapterTestController.php
Normal file
25
app/Controller/Test/AdapterTestController.php
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Controller\Test;
|
||||||
|
|
||||||
|
use App\Service\Test\Adapter\PayService;
|
||||||
|
use App\Service\Test\AdapterTestService;
|
||||||
|
use Hyperf\HttpServer\Annotation\Controller;
|
||||||
|
use Hyperf\HttpServer\Annotation\RequestMapping;
|
||||||
|
|
||||||
|
#[Controller(prefix: 'adapter/test')]
|
||||||
|
class AdapterTestController
|
||||||
|
{
|
||||||
|
#[RequestMapping(path: 'pay', methods: 'GET')]
|
||||||
|
public function pay()
|
||||||
|
{
|
||||||
|
return (new PayService)->handle();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function cache()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
8
app/Interface/Test/Adapter/PaymentGateway.php
Normal file
8
app/Interface/Test/Adapter/PaymentGateway.php
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Interface\Test\Adapter;
|
||||||
|
|
||||||
|
interface PaymentGateway
|
||||||
|
{
|
||||||
|
public function pay(float $amount): array;
|
||||||
|
}
|
||||||
15
app/Lib/Return/AdminReturn.php
Normal file
15
app/Lib/Return/AdminReturn.php
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Lib\Return;
|
||||||
|
|
||||||
|
class AdminReturn extends CommonReturn
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param array $res
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function afterSuccess(array $res): array
|
||||||
|
{
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
}
|
||||||
53
app/Lib/Return/CommonReturn.php
Normal file
53
app/Lib/Return/CommonReturn.php
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Lib\Return;
|
||||||
|
|
||||||
|
use App\Constants\ReturnCode;
|
||||||
|
|
||||||
|
abstract class CommonReturn
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 通用 success 返回
|
||||||
|
* @param string $msg
|
||||||
|
* @param array $data
|
||||||
|
* @param ReturnCode $code
|
||||||
|
* @param array $debug
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
final public function success(string $msg = 'success', array $data = [], ReturnCode $code = ReturnCode::SUCCESS, array $debug = []): array
|
||||||
|
{
|
||||||
|
$res = [
|
||||||
|
'code' => $code,
|
||||||
|
'message' => $msg,
|
||||||
|
'data' => $data
|
||||||
|
];
|
||||||
|
|
||||||
|
return $this->afterSuccess(array_merge($res, $debug));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通用 fail 返回
|
||||||
|
* @param string $msg
|
||||||
|
* @param array $data
|
||||||
|
* @param ReturnCode $code
|
||||||
|
* @param array $debug
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
final public function error(string $msg = 'error', ReturnCode $code = ReturnCode::ERROR, array $data = [], array $debug = []): array
|
||||||
|
{
|
||||||
|
$res = [
|
||||||
|
'code' => $code,
|
||||||
|
'message' => $msg,
|
||||||
|
'data' => $data
|
||||||
|
];
|
||||||
|
|
||||||
|
return $this->afterSuccess(array_merge($res, $debug));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通用类调子类返回方便切面类识别
|
||||||
|
* @param array $res
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
abstract protected function afterSuccess(array $res): array;
|
||||||
|
}
|
||||||
15
app/Lib/Return/TestReturn.php
Normal file
15
app/Lib/Return/TestReturn.php
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Lib\Return;
|
||||||
|
|
||||||
|
class TestReturn extends CommonReturn
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param array $res
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function afterSuccess(array $res): array
|
||||||
|
{
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
}
|
||||||
23
app/Middleware/CoreMiddleware.php
Normal file
23
app/Middleware/CoreMiddleware.php
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Middleware;
|
||||||
|
|
||||||
|
use Psr\Container\ContainerInterface;
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use Psr\Http\Server\MiddlewareInterface;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Psr\Http\Server\RequestHandlerInterface;
|
||||||
|
|
||||||
|
class CoreMiddleware implements MiddlewareInterface
|
||||||
|
{
|
||||||
|
public function __construct(protected ContainerInterface $container)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
|
||||||
|
{
|
||||||
|
return $handler->handle($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
23
app/Middleware/CorsMiddleware.php
Normal file
23
app/Middleware/CorsMiddleware.php
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Middleware;
|
||||||
|
|
||||||
|
use Psr\Container\ContainerInterface;
|
||||||
|
use Psr\Http\Message\ResponseInterface;
|
||||||
|
use Psr\Http\Server\MiddlewareInterface;
|
||||||
|
use Psr\Http\Message\ServerRequestInterface;
|
||||||
|
use Psr\Http\Server\RequestHandlerInterface;
|
||||||
|
|
||||||
|
class CorsMiddleware implements MiddlewareInterface
|
||||||
|
{
|
||||||
|
public function __construct(protected ContainerInterface $container)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
|
||||||
|
{
|
||||||
|
return $handler->handle($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
20
app/Service/BaseService.php
Normal file
20
app/Service/BaseService.php
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This service file is part of item.
|
||||||
|
*
|
||||||
|
* @author ctexthuang
|
||||||
|
* @contact ctexthuang@qq.com
|
||||||
|
* @web_site https://ctexthuang.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Service;
|
||||||
|
|
||||||
|
abstract class BaseService
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 主体函数抽象类
|
||||||
|
*/
|
||||||
|
abstract public function handle();
|
||||||
|
}
|
||||||
22
app/Service/Test/Adapter/CacheService.php
Normal file
22
app/Service/Test/Adapter/CacheService.php
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This service file is part of item.
|
||||||
|
*
|
||||||
|
* @author ctexthuang
|
||||||
|
* @contact ctexthuang@qq.com
|
||||||
|
* @web_site https://ctexthuang.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Service\Test\Adapter;
|
||||||
|
|
||||||
|
use App\Service\Test\TestBaseService;
|
||||||
|
|
||||||
|
class CacheService extends TestBaseService
|
||||||
|
{
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
//todo Write logic
|
||||||
|
}
|
||||||
|
}
|
||||||
36
app/Service/Test/Adapter/Pay/AlipayAdapter.php
Normal file
36
app/Service/Test/Adapter/Pay/AlipayAdapter.php
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This service file is part of item.
|
||||||
|
*
|
||||||
|
* @author ctexthuang
|
||||||
|
* @contact ctexthuang@qq.com
|
||||||
|
* @web_site https://ctexthuang.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Service\Test\Adapter\Pay;
|
||||||
|
|
||||||
|
use App\Interface\Test\Adapter\PaymentGateway;
|
||||||
|
|
||||||
|
class AlipayAdapter implements PaymentGateway
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var AlipayService
|
||||||
|
*/
|
||||||
|
private AlipayService $alipay;
|
||||||
|
|
||||||
|
public function __construct(AlipayService $alipay)
|
||||||
|
{
|
||||||
|
$this->alipay = $alipay;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param float $amount
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function pay(float $amount): array
|
||||||
|
{
|
||||||
|
return $this->alipay->sendPayment($amount);
|
||||||
|
}
|
||||||
|
}
|
||||||
27
app/Service/Test/Adapter/Pay/AlipayService.php
Normal file
27
app/Service/Test/Adapter/Pay/AlipayService.php
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This service file is part of item.
|
||||||
|
*
|
||||||
|
* @author ctexthuang
|
||||||
|
* @contact ctexthuang@qq.com
|
||||||
|
* @web_site https://ctexthuang.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Service\Test\Adapter\Pay;
|
||||||
|
|
||||||
|
class AlipayService
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param float $amount
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function sendPayment(float $amount): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'code' => 'success',
|
||||||
|
'amount' => $amount,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
36
app/Service/Test/Adapter/Pay/WechatPayAdapter.php
Normal file
36
app/Service/Test/Adapter/Pay/WechatPayAdapter.php
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This service file is part of item.
|
||||||
|
*
|
||||||
|
* @author ctexthuang
|
||||||
|
* @contact ctexthuang@qq.com
|
||||||
|
* @web_site https://ctexthuang.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Service\Test\Adapter\Pay;
|
||||||
|
|
||||||
|
use App\Interface\Test\Adapter\PaymentGateway;
|
||||||
|
|
||||||
|
class WechatPayAdapter implements PaymentGateway
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var WechatPayService
|
||||||
|
*/
|
||||||
|
private WechatPayService $wechatPay;
|
||||||
|
|
||||||
|
public function __construct(WechatPayService $wechatPay)
|
||||||
|
{
|
||||||
|
$this->wechatPay = $wechatPay;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param float $amount
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function pay(float $amount): array
|
||||||
|
{
|
||||||
|
return $this->wechatPay->makePayment($amount);
|
||||||
|
}
|
||||||
|
}
|
||||||
28
app/Service/Test/Adapter/Pay/WechatPayService.php
Normal file
28
app/Service/Test/Adapter/Pay/WechatPayService.php
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This service file is part of item.
|
||||||
|
*
|
||||||
|
* @author ctexthuang
|
||||||
|
* @contact ctexthuang@qq.com
|
||||||
|
* @web_site https://ctexthuang.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Service\Test\Adapter\Pay;
|
||||||
|
|
||||||
|
class WechatPayService
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param float $amount
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function makePayment(float $amount): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'code' => 'error',
|
||||||
|
'status' => 'fail',
|
||||||
|
'amount' => $amount,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
39
app/Service/Test/Adapter/PayService.php
Normal file
39
app/Service/Test/Adapter/PayService.php
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This service file is part of item.
|
||||||
|
*
|
||||||
|
* @author ctexthuang
|
||||||
|
* @contact ctexthuang@qq.com
|
||||||
|
* @web_site https://ctexthuang.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Service\Test\Adapter;
|
||||||
|
|
||||||
|
use App\Service\Test\Adapter\Pay\AlipayAdapter;
|
||||||
|
use App\Service\Test\Adapter\Pay\AlipayService;
|
||||||
|
use App\Service\Test\Adapter\Pay\WechatPayAdapter;
|
||||||
|
use App\Service\Test\Adapter\Pay\WechatPayService;
|
||||||
|
use App\Service\Test\TestBaseService;
|
||||||
|
|
||||||
|
class PayService extends TestBaseService
|
||||||
|
{
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
|
||||||
|
$alipayRes = (new AlipayAdapter(new AlipayService))->pay(100.00);
|
||||||
|
echo 'alipayRes:'. json_encode($alipayRes).PHP_EOL;
|
||||||
|
|
||||||
|
$wechatPay = new WechatPayService();
|
||||||
|
$wechatPayAdapter = new WechatPayAdapter($wechatPay);
|
||||||
|
$wechatPayRes = $wechatPayAdapter->pay(100.00);
|
||||||
|
|
||||||
|
echo 'wechatPayRes:'. json_encode($wechatPayRes).PHP_EOL;
|
||||||
|
|
||||||
|
return $this->return->success('success',[
|
||||||
|
'alipayRes' => $alipayRes,
|
||||||
|
'wechatPayRes' => $wechatPayRes,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
22
app/Service/Test/AdapterTestService.php
Normal file
22
app/Service/Test/AdapterTestService.php
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This service file is part of item.
|
||||||
|
*
|
||||||
|
* @author ctexthuang
|
||||||
|
* @contact ctexthuang@qq.com
|
||||||
|
* @web_site https://ctexthuang.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Service\Test;
|
||||||
|
|
||||||
|
use App\Service\BaseService;
|
||||||
|
|
||||||
|
class AdapterTestService extends TestBaseService
|
||||||
|
{
|
||||||
|
public function handle(): array
|
||||||
|
{
|
||||||
|
return $this->return->success();
|
||||||
|
}
|
||||||
|
}
|
||||||
18
app/Service/Test/TestBaseService.php
Normal file
18
app/Service/Test/TestBaseService.php
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Service\Test;
|
||||||
|
|
||||||
|
use App\Lib\Return\TestReturn;
|
||||||
|
use App\Service\BaseService;
|
||||||
|
use Hyperf\Di\Annotation\Inject;
|
||||||
|
|
||||||
|
abstract class TestBaseService extends BaseService
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var TestReturn
|
||||||
|
*/
|
||||||
|
#[Inject]
|
||||||
|
protected TestReturn $return;
|
||||||
|
|
||||||
|
abstract public function handle();
|
||||||
|
}
|
||||||
@@ -22,7 +22,7 @@ return [
|
|||||||
'log_level' => [
|
'log_level' => [
|
||||||
LogLevel::ALERT,
|
LogLevel::ALERT,
|
||||||
LogLevel::CRITICAL,
|
LogLevel::CRITICAL,
|
||||||
LogLevel::DEBUG,
|
// LogLevel::DEBUG,
|
||||||
LogLevel::EMERGENCY,
|
LogLevel::EMERGENCY,
|
||||||
LogLevel::ERROR,
|
LogLevel::ERROR,
|
||||||
LogLevel::INFO,
|
LogLevel::INFO,
|
||||||
|
|||||||
11
request/http-client.env.json
Normal file
11
request/http-client.env.json
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"dev": {
|
||||||
|
"host": "https://test.ctexthuang.com"
|
||||||
|
},
|
||||||
|
"local": {
|
||||||
|
"host": "http://127.0.0.1:9501"
|
||||||
|
},
|
||||||
|
"prod": {
|
||||||
|
"host": "https://prod.ctexthuang.com"
|
||||||
|
}
|
||||||
|
}
|
||||||
9
request/test.http
Normal file
9
request/test.http
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
### Adapte pay test
|
||||||
|
GET {{host}}/adapter/test/pay
|
||||||
|
Content-Type: application/x-www-form-urlencoded
|
||||||
|
|
||||||
|
account=13632877014&password=123456
|
||||||
|
|
||||||
|
> {%
|
||||||
|
client.global.set("admin_token", response.body.data.token);
|
||||||
|
%}
|
||||||
Reference in New Issue
Block a user