|
|
@@ -3,12 +3,14 @@ declare(strict_types=1);
|
|
|
|
|
|
namespace SixShop\Lakala\Hook;
|
|
|
|
|
|
+use app\event\BeforeOrderConfirmEvent;
|
|
|
use app\event\OrderDetailResponseEvent;
|
|
|
use app\model\Order;
|
|
|
use SixShop\Core\Attribute\Hook;
|
|
|
use SixShop\Lakala\Enum\WechatOrderStateEnum;
|
|
|
use SixShop\Payment\Model\ExtensionPaymentModel;
|
|
|
use SixShop\Wechat\Service\ExpressService;
|
|
|
+use function SixShop\Core\throw_logic_exception;
|
|
|
|
|
|
class OrderHook
|
|
|
{
|
|
|
@@ -53,4 +55,25 @@ class OrderHook
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ #[Hook(BeforeOrderConfirmEvent::class)]
|
|
|
+ public function onBeforeConfirmOrder(BeforeOrderConfirmEvent $event): void
|
|
|
+ {
|
|
|
+ $order = $event->orderModel;
|
|
|
+ if ($order->payment_method == 'lakala' && $order->shipping_status == 1) {
|
|
|
+ $payment = ExtensionPaymentModel::where([
|
|
|
+ 'order_id' => $order->id,
|
|
|
+ 'biz_type' => 1,
|
|
|
+ 'pay_type' => 'lakala'
|
|
|
+ ])->findOrEmpty();
|
|
|
+ if (!$payment->isEmpty()) {
|
|
|
+ $wechatTransactionID = $payment['payment_result']['acc_trade_no'];
|
|
|
+ $orderInfo = $this->expressService->queryOrder($wechatTransactionID);
|
|
|
+ $orderState = WechatOrderStateEnum::from($orderInfo['order_state']);
|
|
|
+ if ($orderState == WechatOrderStateEnum::PENDING_SHIPMENT || $orderState == WechatOrderStateEnum::SHIPPED) {
|
|
|
+ throw_logic_exception('订单正在处理中,请稍后再试');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|