Преглед изворни кода

refactor(payment): 优化微信支付退款逻辑避免重复退款

- 引入 ExtensionRefundModel 模型用于退款查询
- 添加订单号和状态条件检查已存在的退款记录
- 避免对同一笔订单进行重复退款操作
- 保持原有事务处理逻辑不变
runphp пре 2 недеља
родитељ
комит
549d50d2f9
1 измењених фајлова са 8 додато и 0 уклоњено
  1. 8 0
      src/PaymentProvider.php

+ 8 - 0
src/PaymentProvider.php

@@ -19,6 +19,7 @@ use SixShop\Payment\Enum\PaymentStatusEnum;
 use SixShop\Payment\Enum\RefundStatusEnum;
 use SixShop\Payment\Event\PaymentSuccessEvent;
 use SixShop\Payment\Event\RefundSuccessEvent;
+use SixShop\Payment\Model\ExtensionRefundModel;
 use SixShop\Wechat\Facade\WechatUser;
 use SixShop\WechatPay\Entity\WechatpayTransferBillEntity;
 use SixShop\WechatPay\Job\QueryRefundJob;
@@ -180,6 +181,13 @@ class PaymentProvider implements PaymentProviderInterface
     public function refund(int $recordID, PaymentRefundRequest $param): PaymentRefundResult
     {
         $payment = $this->extensionPaymentEntity->find($recordID);
+        // todo 订单分多次退款未实现
+        $refund = ExtensionRefundModel::where(
+            ['order_sn' => $payment->out_trade_no, 'status' =>RefundStatusEnum::SUCCESS]
+        )->findOrEmpty();
+        if (!$refund->isEmpty()) {
+            return new PaymentRefundResult($refund);
+        }
         $refund = Db::transaction(function () use ($param, $payment) {
             $refund = $this->extensionRefundEntity->create([
                 'payment_id' => $payment->id,