feat(hook): add order.create.after, order.open.before, order.open.after, and protocol.servers.filtered hooks

This commit is contained in:
xboard
2025-07-17 12:34:31 +08:00
parent 10ff5d7b27
commit e2d7b6a5e0
2 changed files with 10 additions and 5 deletions
+7 -2
View File
@@ -53,6 +53,7 @@ class OrderService
$planService = new PlanService($plan); $planService = new PlanService($plan);
$planService->validatePurchase($user, $period); $planService->validatePurchase($user, $period);
HookManager::call('order.create.before', [$user, $plan, $period, $couponCode]);
return DB::transaction(function () use ($user, $plan, $period, $couponCode, $userService) { return DB::transaction(function () use ($user, $plan, $period, $couponCode, $userService) {
$newPeriod = PlanService::getPeriodKey($period); $newPeriod = PlanService::getPeriodKey($period);
@@ -82,6 +83,9 @@ class OrderService
if (!$order->save()) { if (!$order->save()) {
throw new ApiException(__('Failed to create order')); throw new ApiException(__('Failed to create order'));
} }
HookManager::call('order.create.after', $order);
// 兼容旧钩子
HookManager::call('order.after_create', $order); HookManager::call('order.after_create', $order);
return $order; return $order;
@@ -94,7 +98,8 @@ class OrderService
$this->user = User::find($order->user_id); $this->user = User::find($order->user_id);
$plan = Plan::find($order->plan_id); $plan = Plan::find($order->plan_id);
HookManager::call('order.before_open', $order); HookManager::call('order.open.before', $order);
DB::transaction(function () use ($order, $plan) { DB::transaction(function () use ($order, $plan) {
if ($order->refund_amount) { if ($order->refund_amount) {
@@ -136,7 +141,7 @@ class OrderService
$this->openEvent($eventId); $this->openEvent($eventId);
} }
HookManager::call('order.after_open', $order); HookManager::call('order.open.after', $order);
} }
+3 -3
View File
@@ -2,6 +2,8 @@
namespace App\Support; namespace App\Support;
use App\Services\Plugin\HookManager;
abstract class AbstractProtocol abstract class AbstractProtocol
{ {
/** /**
@@ -48,9 +50,7 @@ abstract class AbstractProtocol
$this->servers = $servers; $this->servers = $servers;
$this->clientName = $clientName; $this->clientName = $clientName;
$this->clientVersion = $clientVersion; $this->clientVersion = $clientVersion;
$this->servers = HookManager::filter('protocol.servers.filtered', $this->filterServersByVersion());
// 服务器过滤逻辑
$this->servers = $this->filterServersByVersion();
} }
/** /**