| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- <?php
- namespace common\components\payment;
- use common\models\common\PaymentRefund;
- use common\models\common\PaymentTransfer;
- use common\traits\ErrorTrait;
- use services\common\UserWalletService;
- use common\models\common\Addons;
- use common\enums\AddonsEnum;
- use common\models\common\PaymentTrade;
- use common\models\mall\MallAddons;
- use addons\CardCoupons\common\models\CardCouponsScoreGive;
- /**
- * 余额支付类
- * Class BalancePay
- * @Author: hua
- * @DateTime: 2021/12/16 9:21
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @package common\components\payment
- */
- class BalancePay
- {
- use ErrorTrait;
- /**
- * 实例化类
- *
- * @param $type
- * @return \Omnipay\WechatPay\AppGateway
- */
- private function create($type)
- {
- }
- /**
- * 余额退款
- * @Author:hua
- * @Date:2024-03-08 09:15
- * @Copyright:copyright(c)2024 广东七件事集团
- * @param PaymentRefund $payment_refund
- * @param $source_table
- * @param $source_table_id
- * @param string $desc
- * @param string $from_type
- * @param string $capital_type
- * @return bool
- */
- public function refund( PaymentRefund $payment_refund,$source_table,$source_table_id,$desc='',$from_type='',$capital_type='')
- {
- $t = \Yii::$app->db->beginTransaction();
- try {
- $user_id = $payment_refund->user_id;
- $money = $payment_refund->amount;
- $mall_id = $payment_refund->mall_id;
- // $order_id = $order->id;
- //使用该方法余额退款,退款金额需传入payment_trade表的pay_fee字段,而不是直接传订单支付金额,避免使用卡券抵扣产生重复退款问题
- if (MallAddons::isInstall($mall_id, AddonsEnum::ADDONS_NAME_CARD_COUPONS)) {
- $payment = PaymentTrade::findOne(['out_trade_no'=>$payment_refund->out_trade_no]);
- $card_refund_price = CardCouponsScoreGive::setOrderRefundAll([
- 'trade_id' => $payment->id ?? 0,
- 'refund_id' => $payment_refund->id,
- ]);
- // if($card_refund_price) $money -= $card_refund_price;
- // if($money < 0) $money = 0;
- }
- $insert_wallet [] = ['mall_id' => $mall_id, 'user_id' => $user_id,
- 'is_frozen' => false, 'wallet_type' => UserWalletService::WALLET_TYPE_BALANCE, 'money' => $money,
- 'desc' => $desc,
- 'source_table' => $source_table,
- 'source_table_id' => $source_table_id,
- 'from_type' => $from_type,
- 'capital_type' => $capital_type,
- ];
- $res = UserWalletService::batchHandleByQueue($insert_wallet);
- if ($res == false) throw new \Exception(UserWalletService::getStaticError());
- $payment_refund->is_pay = 1;
- $res = $payment_refund->save();
- if ($res == false) throw new \Exception('生成余额退款记录失败');
- $t->commit();
- return true;
- } catch (\Exception $e) {
- $t->rollBack();
- self::setStaticError($e->getMessage());
- return false;
- }
- }
- }
|