shish пре 5 година
родитељ
комит
473c6dbb4d
2 измењених фајлова са 49 додато и 28 уклоњено
  1. 11 11
      app-ghs/controllers/OrderController.php
  2. 38 17
      biz-ghs/order/services/OrderService.php

+ 11 - 11
app-ghs/controllers/OrderController.php

@@ -489,7 +489,7 @@ class OrderController extends BaseController
             util::fail("订单完成了才能发起退款");
         }
         if ($order['refund'] == 2) {
-            //util::fail("已经退过了");
+            util::fail("已经退过了");
         }
 
         //根据退款类型:1退货并退款(需要减库存) 2:仅退款(不用减库存,不用传花材)
@@ -507,7 +507,6 @@ class OrderController extends BaseController
             foreach ($infoProduct as $v) {
                 $orderProductMap[$v['productId']] = $v;
             }
-
             //[{productId:0,bigNum:1,smallNum:0}]
             $productJson = $post['product'] ?? '';
             if (empty($productJson)) {
@@ -550,9 +549,9 @@ class OrderController extends BaseController
             util::fail("退款金额不能大于实际支付金额");
         }
 
-//        $connection = Yii::$app->db;
-//        $transaction = $connection->beginTransaction();
-//        try {
+        $connection = Yii::$app->db;
+        $transaction = $connection->beginTransaction();
+        try {
             $post['shopId'] = $this->shopId;
             $post['sjId'] = $this->sjId;
             $post['shopAdminId'] = $this->shopAdminId;
@@ -560,12 +559,13 @@ class OrderController extends BaseController
             $adminName = $shopAdmin['name'] ?? '';
             $post['shopAdminName'] = $adminName;
             OrderService::refund($order, $post);
-            //$transaction->commit();
-//        } catch (\Exception $exception) {
-//            $transaction->rollBack();
-//            Yii::info("退款操作报错:" . $exception->getMessage());
-//            util::fail('操作失败');
-//        }
+            $transaction->commit();
+        } catch (\Exception $exception) {
+            $transaction->rollBack();
+            Yii::info("退款操作报错:" . $exception->getMessage());
+            util::fail('操作失败');
+        }
         util::complete();
     }
+
 }

+ 38 - 17
biz-ghs/order/services/OrderService.php

@@ -570,16 +570,13 @@ class OrderService extends BaseService
     //退款订单
     public static function refund($order, $post)
     {
-
-        //订单状态变更  refund = 2
         $orderId = $order['id'];
-
         $order = OrderClass::getLockById($orderId);
         if (empty($order)) {
             util::fail('没有找到订单');
         }
-//        $order->refund = 2;
-//        $order->save();
+        $order->refund = 2;
+        $order->save();
 
         $purchaseId = $order->purchaseId;
         $cg = PurchaseClass::getLockById($purchaseId);
@@ -595,20 +592,20 @@ class OrderService extends BaseService
         $post['relateOrderSn'] = $order->orderSn;
         $refundOrder = RefundOrderClass::addOrder($post);
 
-        //退钱(根据订单的支付类型 payWay)
         $payWay = $order['payWay'];
+        //微信退钱
         if ($payWay == dict::getDict('payWay', 'wxPay')) {
-            //微信
 
             ini_set('date.timezone', 'Asia/Shanghai');
-            error_reporting(E_ERROR);
             $wx = Yii::getAlias("@vendor/wxPayApi_v3.0.10");
             require_once($wx . '/lib/WxPay.Api.php');
             require_once($wx . '/example/WxPay.Config.php');
 
-
-            $total_fee = $cg->realPrice * 100;
-            $refund_fee = 1;
+            $totalFee = $cg->realPrice * 100;
+            $refundFee = $refundOrder['refundPrice'] ?? 0;
+            if (is_numeric($refundFee) == false || $refundFee <= 0) {
+                util::fail('退款金额有问题');
+            }
 
             $refundOrderSn = $refundOrder['orderSn'];
 
@@ -617,12 +614,10 @@ class OrderService extends BaseService
             $appId = $merchantExt['miniAppId'] ?? '';
             $key = $merchantExt['wxPayKey'] ?? '';
 
-            Yii::info($mid . ' ' . $appId . ' 88888 ');
-
             $input = new \WxPayRefund();
             $input->SetTransaction_id($transaction_id);
-            $input->SetTotal_fee($total_fee);
-            $input->SetRefund_fee($refund_fee);
+            $input->SetTotal_fee($totalFee);
+            $input->SetRefund_fee($refundFee);
 
             $config = new \WxPayConfig();
             $config->SetAppId($appId);
@@ -631,8 +626,34 @@ class OrderService extends BaseService
 
             $input->SetOut_refund_no($refundOrderSn);
             $input->SetOp_user_id($mid);
-            print_r(\WxPayApi::refund($config, $input));
-
+            $return = \WxPayApi::refund($config, $input);
+
+            /**
+            Array
+            (
+            [appid] => wxe4675bab299a52f7
+            [cash_fee] => 30
+            [cash_refund_fee] => 1
+            [coupon_refund_count] => 0
+            [coupon_refund_fee] => 0
+            [mch_id] => 1606749059
+            [nonce_str] => H8c0xDd05StJKsZH
+            [out_refund_no] => TK_CS26316910
+            [out_trade_no] => CG_CS26317630
+            [refund_channel] => Array
+            (
+            )
+
+            [refund_fee] => 1
+            [refund_id] => 50300908732021062810180131041
+            [result_code] => SUCCESS
+            [return_code] => SUCCESS
+            [return_msg] => OK
+            [sign] => 5E84E0B143AE773269836C1F5C760EBE98CCD8A8A874A70F07DC6268DC81EDE7
+            [total_fee] => 30
+            [transaction_id] => 4200001128202106287303173532
+            )
+            */
 
         }