Przeglądaj źródła

feat(lakala): 新增拉卡拉订单信息处理功能

- 添加 OrderHook 类处理拉卡拉订单详情
- 在订单详情响应事件中集成微信订单状态查询
- 更新 PaymentRecordService 中的订单状态处理逻辑
- 注册 OrderHook 到扩展配置中
- 触发 OrderDetailResponseEvent 以应用订单钩子
runphp 4 miesięcy temu
rodzic
commit
7e9f603bc1
3 zmienionych plików z 50 dodań i 5 usunięć
  1. 2 0
      src/Extension.php
  2. 44 0
      src/Hook/OrderHook.php
  3. 4 5
      src/Service/PaymentRecordService.php

+ 2 - 0
src/Extension.php

@@ -6,6 +6,7 @@ namespace SixShop\Lakala;
 use SixShop\Core\ExtensionAbstract;
 use SixShop\Lakala\Cron\WechatOrderCron;
 use SixShop\Lakala\Hook\LakalaHook;
+use SixShop\Lakala\Hook\OrderHook;
 use SixShop\Payment\Contracts\PaymentExtensionInterface;
 use SixShop\Payment\Contracts\PaymentProviderInterface;
 
@@ -30,6 +31,7 @@ class Extension extends ExtensionAbstract implements PaymentExtensionInterface
     {
         return [
             LakalaHook::class,
+            OrderHook::class,
         ];
     }
 

+ 44 - 0
src/Hook/OrderHook.php

@@ -0,0 +1,44 @@
+<?php
+declare(strict_types=1);
+
+namespace SixShop\Lakala\Hook;
+
+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;
+
+class OrderHook
+{
+    public function __construct(private ExpressService $expressService)
+    {
+    }
+
+    /**
+     * 拉卡拉订单信息
+     */
+    #[Hook(OrderDetailResponseEvent::class)]
+    public function orderInfo(OrderDetailResponseEvent $event): void
+    {
+        $order = $event->getOrderModel();
+        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']);
+                $order->setAttr('lakala', [
+                    'wechat_transaction_id' => $wechatTransactionID,
+                    'wechat_order_state' => $orderState,
+                    'openid' => $payment['payment_result']['acc_resp_fields']['user_id'],
+                ]);
+            }
+        }
+    }
+}

+ 4 - 5
src/Service/PaymentRecordService.php

@@ -96,12 +96,12 @@ class PaymentRecordService
         } catch (LogicException $e) {
             return;
         }
-        $wechatState = WechatOrderStateEnum::from($result['order_state']);
-        if ($wechatState != $wechatPayment->order_state) {
-            $wechatPayment->order_state = $wechatState;
+        $orderState = WechatOrderStateEnum::from($result['order_state']);
+        if ($orderState != $wechatPayment->order_state) {
+            $wechatPayment->order_state = $orderState;
             $wechatPayment->save();
         }
-        if ($wechatState === WechatOrderStateEnum::PENDING_SHIPMENT) {
+        if ($orderState === WechatOrderStateEnum::PENDING_SHIPMENT) {
             $payment = ExtensionPaymentModel::find($paymentID);
             $goods = OrderGoods::where(['order_id' => $payment['order_id']])->find();
             $order = Order::find($payment['order_id']);
@@ -132,6 +132,5 @@ class PaymentRecordService
                 return;
             }
         }
-
     }
 }