Explorar el Código

fix(wechatpay): 优化退款,修复特殊订单报备未执行

runphp hace 6 meses
padre
commit
34169362f4
Se han modificado 3 ficheros con 8 adiciones y 2 borrados
  1. 2 0
      src/Extension.php
  2. 2 1
      src/Hook/SpecialOrderHook.php
  3. 4 1
      src/PaymentProvider.php

+ 2 - 0
src/Extension.php

@@ -6,6 +6,7 @@ namespace SixShop\WechatPay;
 use SixShop\Core\ExtensionAbstract;
 use SixShop\Payment\Contracts\PaymentExtensionInterface;
 use SixShop\Payment\Contracts\PaymentProviderInterface;
+use SixShop\WechatPay\Hook\SpecialOrderHook;
 use SixShop\WechatPay\Hook\WechatpayHook;
 
 class Extension extends ExtensionAbstract implements PaymentExtensionInterface
@@ -18,6 +19,7 @@ class Extension extends ExtensionAbstract implements PaymentExtensionInterface
     public function getHooks(): array
     {
         return [
+            SpecialOrderHook::class,
             WechatpayHook::class,
         ];
     }

+ 2 - 1
src/Hook/SpecialOrderHook.php

@@ -3,6 +3,7 @@ declare(strict_types=1);
 
 namespace SixShop\WechatPay\Hook;
 
+use SixShop\Core\Attribute\Hook;
 use SixShop\Payment\Event\PaymentSuccessEvent;
 use SixShop\WechatPay\Config;
 use SixShop\WechatPay\Trait\MiniAppTrait;
@@ -27,7 +28,7 @@ class SpecialOrderHook
                 $this->opSpecialOrder($event->orderNo, 2);
                 Log::info('特殊订单报备成功{order_no}', ['order_no' => $event->orderNo]);
             } catch (\Exception $e) {
-                Log::error('特殊订单报备失败{order_no}', ['order_no' => $event->orderNo, 'msg' => $e->getMessage()]);
+                Log::error('特殊订单报备失败{order_no}--{code}--{msg}', ['order_no' => $event->orderNo, 'code' => $e->getCode(), 'msg' => $e->getMessage()]);
             }
         }
     }

+ 4 - 1
src/PaymentProvider.php

@@ -149,7 +149,7 @@ class PaymentProvider implements PaymentProviderInterface
             $refund->refund_result = $result;
             $refund->save();
             if ($result->status === 'SUCCESS' || $result->status === 'PROCESSING') {
-                QueryRefundJob::dispatch($refund->id)->delay(10);
+                QueryRefundJob::dispatch($refund->id)->delay(20);
             } else {
                 throw new \RuntimeException(match ($result->status) {
                     'CLOSED' => '退款关闭',
@@ -170,12 +170,15 @@ class PaymentProvider implements PaymentProviderInterface
             $refund->refund_result = $result;
             if ($result->status === 'SUCCESS') {
                 $refund->status = RefundStatusEnum::SUCCESS;
+                $refund->status_desc = '成功退款到'.$result->user_received_account;
                 $refund->success_time = strtotime($result->success_time);
                 Event::trigger(new RefundSuccessEvent(
                         $refund->model(),
                         $refund->payment,
                         new PaymentRefundRequest($refund->amount,$refund->reason, $refund->refund_param))
                 );
+            } else if ($result->status === 'PROCESSING') {
+                QueryRefundJob::dispatch($refund->id)->delay(10);
             }
             $refund->save();
         }