diff --git a/app/Endpoint/Api/Http/Controllers/Order/OrderController.php b/app/Endpoint/Api/Http/Controllers/Order/OrderController.php index 2b86c985..4669388f 100644 --- a/app/Endpoint/Api/Http/Controllers/Order/OrderController.php +++ b/app/Endpoint/Api/Http/Controllers/Order/OrderController.php @@ -6,6 +6,7 @@ use App\Endpoint\Api\Http\Controllers\Controller; use App\Endpoint\Api\Http\Resources\OrderPackageResource; use App\Endpoint\Api\Http\Resources\OrderResource; use App\Endpoint\Api\Http\Resources\OrderResourceCollection; +use App\Events\OrderPaid; use App\Exceptions\BizException; use App\Helpers\Paginator as PaginatorHelper; use App\Models\KuaidiLog; @@ -102,6 +103,8 @@ class OrderController extends Controller throw $e; } + OrderPaid::dispatchIf($order->isPaid(), $order); + return OrderResource::make($order); } diff --git a/app/Endpoint/Callback/Http/Controllers/WeChatPayController.php b/app/Endpoint/Callback/Http/Controllers/WeChatPayController.php index c903169b..6d7791c9 100644 --- a/app/Endpoint/Callback/Http/Controllers/WeChatPayController.php +++ b/app/Endpoint/Callback/Http/Controllers/WeChatPayController.php @@ -2,6 +2,7 @@ namespace App\Endpoint\Callback\Http\Controllers; +use App\Events\OrderPaid; use App\Exceptions\BizException; use App\Models\Order; use App\Models\OrderRefundTask; @@ -34,13 +35,15 @@ class WeChatPayController extends Controller } try { - DB::transaction(function () use ($message) { - (new OrderService())->paySuccess($message['out_trade_no'], [ + $order = DB::transaction(function () use ($message) { + return (new OrderService())->paySuccess($message['out_trade_no'], [ 'pay_sn' => $message['transaction_id'], 'pay_way' => Order::PAY_WAY_WXPAY, 'pay_at' => Carbon::parse($message['time_end']), ]); }); + + OrderPaid::dispatchIf($order->isPaid(), $order); } catch (ModelNotFoundException | BizException $e) { } catch (Throwable $e) { throw $e; diff --git a/app/Events/OrderPaid.php b/app/Events/OrderPaid.php new file mode 100644 index 00000000..38117e79 --- /dev/null +++ b/app/Events/OrderPaid.php @@ -0,0 +1,21 @@ +order); + } catch (Throwable $e) { + report($e); + } + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 95870462..bc2c05a2 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -16,6 +16,9 @@ class EventServiceProvider extends ServiceProvider \App\Events\ProductSku\Viewed::class => [ \App\Listeners\CreateProductViewLog::class, ], + \App\Events\OrderPaid::class => [ + \App\Listeners\OrderPaidNotify::class, + ], ]; /** diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index d28086bd..c2ac0df2 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -725,9 +725,9 @@ class OrderService * * @param string $sn * @param array $params - * @return void + * @return \App\Models\Order */ - public function paySuccess(string $sn, array $params = []): void + public function paySuccess(string $sn, array $params = []): Order { $order = Order::where('sn', $sn)->firstOrFail(); @@ -743,6 +743,8 @@ class OrderService ]); // todo 处理预收益 + + return $order; } /**