6
0
Fork 0

订单支付成功通知

release
李静 2021-12-21 13:41:42 +08:00
parent f45182c1f2
commit b09fc5e01e
6 changed files with 65 additions and 4 deletions

View File

@ -6,6 +6,7 @@ use App\Endpoint\Api\Http\Controllers\Controller;
use App\Endpoint\Api\Http\Resources\OrderPackageResource; use App\Endpoint\Api\Http\Resources\OrderPackageResource;
use App\Endpoint\Api\Http\Resources\OrderResource; use App\Endpoint\Api\Http\Resources\OrderResource;
use App\Endpoint\Api\Http\Resources\OrderResourceCollection; use App\Endpoint\Api\Http\Resources\OrderResourceCollection;
use App\Events\OrderPaid;
use App\Exceptions\BizException; use App\Exceptions\BizException;
use App\Helpers\Paginator as PaginatorHelper; use App\Helpers\Paginator as PaginatorHelper;
use App\Models\KuaidiLog; use App\Models\KuaidiLog;
@ -102,6 +103,8 @@ class OrderController extends Controller
throw $e; throw $e;
} }
OrderPaid::dispatchIf($order->isPaid(), $order);
return OrderResource::make($order); return OrderResource::make($order);
} }

View File

@ -2,6 +2,7 @@
namespace App\Endpoint\Callback\Http\Controllers; namespace App\Endpoint\Callback\Http\Controllers;
use App\Events\OrderPaid;
use App\Exceptions\BizException; use App\Exceptions\BizException;
use App\Models\Order; use App\Models\Order;
use App\Models\OrderRefundTask; use App\Models\OrderRefundTask;
@ -34,13 +35,15 @@ class WeChatPayController extends Controller
} }
try { try {
DB::transaction(function () use ($message) { $order = DB::transaction(function () use ($message) {
(new OrderService())->paySuccess($message['out_trade_no'], [ return (new OrderService())->paySuccess($message['out_trade_no'], [
'pay_sn' => $message['transaction_id'], 'pay_sn' => $message['transaction_id'],
'pay_way' => Order::PAY_WAY_WXPAY, 'pay_way' => Order::PAY_WAY_WXPAY,
'pay_at' => Carbon::parse($message['time_end']), 'pay_at' => Carbon::parse($message['time_end']),
]); ]);
}); });
OrderPaid::dispatchIf($order->isPaid(), $order);
} catch (ModelNotFoundException | BizException $e) { } catch (ModelNotFoundException | BizException $e) {
} catch (Throwable $e) { } catch (Throwable $e) {
throw $e; throw $e;

View File

@ -0,0 +1,21 @@
<?php
namespace App\Events;
use App\Models\Order;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class OrderPaid
{
use Dispatchable;
use SerializesModels;
/**
* @param \App\Models\Order $order
*/
public function __construct(
public Order $order
) {
}
}

View File

@ -0,0 +1,29 @@
<?php
namespace App\Listeners;
use App\Events\OrderPaid;
use App\Models\Message;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Throwable;
class OrderPaidNotify implements ShouldQueue
{
use InteractsWithQueue;
/**
* Handle the event.
*
* @param \App\Events\OrderPaid $event
* @return void
*/
public function handle(OrderPaid $event)
{
try {
Message::createOrderMessage($event->order);
} catch (Throwable $e) {
report($e);
}
}
}

View File

@ -16,6 +16,9 @@ class EventServiceProvider extends ServiceProvider
\App\Events\ProductSku\Viewed::class => [ \App\Events\ProductSku\Viewed::class => [
\App\Listeners\CreateProductViewLog::class, \App\Listeners\CreateProductViewLog::class,
], ],
\App\Events\OrderPaid::class => [
\App\Listeners\OrderPaidNotify::class,
],
]; ];
/** /**

View File

@ -725,9 +725,9 @@ class OrderService
* *
* @param string $sn * @param string $sn
* @param array $params * @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(); $order = Order::where('sn', $sn)->firstOrFail();
@ -743,6 +743,8 @@ class OrderService
]); ]);
// todo 处理预收益 // todo 处理预收益
return $order;
} }
/** /**