BalancePay.php 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. namespace common\components\payment;
  3. use common\models\common\PaymentRefund;
  4. use common\models\common\PaymentTransfer;
  5. use common\traits\ErrorTrait;
  6. use services\common\UserWalletService;
  7. use common\models\common\Addons;
  8. use common\enums\AddonsEnum;
  9. use common\models\common\PaymentTrade;
  10. use common\models\mall\MallAddons;
  11. use addons\CardCoupons\common\models\CardCouponsScoreGive;
  12. /**
  13. * 余额支付类
  14. * Class BalancePay
  15. * @Author: hua
  16. * @DateTime: 2021/12/16 9:21
  17. * @Copyright: copyright (c) 2021 广东七件事集团
  18. * @package common\components\payment
  19. */
  20. class BalancePay
  21. {
  22. use ErrorTrait;
  23. /**
  24. * 实例化类
  25. *
  26. * @param $type
  27. * @return \Omnipay\WechatPay\AppGateway
  28. */
  29. private function create($type)
  30. {
  31. }
  32. /**
  33. * 余额退款
  34. * @Author:hua
  35. * @Date:2024-03-08 09:15
  36. * @Copyright:copyright(c)2024 广东七件事集团
  37. * @param PaymentRefund $payment_refund
  38. * @param $source_table
  39. * @param $source_table_id
  40. * @param string $desc
  41. * @param string $from_type
  42. * @param string $capital_type
  43. * @return bool
  44. */
  45. public function refund( PaymentRefund $payment_refund,$source_table,$source_table_id,$desc='',$from_type='',$capital_type='')
  46. {
  47. $t = \Yii::$app->db->beginTransaction();
  48. try {
  49. $user_id = $payment_refund->user_id;
  50. $money = $payment_refund->amount;
  51. $mall_id = $payment_refund->mall_id;
  52. // $order_id = $order->id;
  53. //使用该方法余额退款,退款金额需传入payment_trade表的pay_fee字段,而不是直接传订单支付金额,避免使用卡券抵扣产生重复退款问题
  54. if (MallAddons::isInstall($mall_id, AddonsEnum::ADDONS_NAME_CARD_COUPONS)) {
  55. $payment = PaymentTrade::findOne(['out_trade_no'=>$payment_refund->out_trade_no]);
  56. $card_refund_price = CardCouponsScoreGive::setOrderRefundAll([
  57. 'trade_id' => $payment->id ?? 0,
  58. 'refund_id' => $payment_refund->id,
  59. ]);
  60. // if($card_refund_price) $money -= $card_refund_price;
  61. // if($money < 0) $money = 0;
  62. }
  63. $insert_wallet [] = ['mall_id' => $mall_id, 'user_id' => $user_id,
  64. 'is_frozen' => false, 'wallet_type' => UserWalletService::WALLET_TYPE_BALANCE, 'money' => $money,
  65. 'desc' => $desc,
  66. 'source_table' => $source_table,
  67. 'source_table_id' => $source_table_id,
  68. 'from_type' => $from_type,
  69. 'capital_type' => $capital_type,
  70. ];
  71. $res = UserWalletService::batchHandleByQueue($insert_wallet);
  72. if ($res == false) throw new \Exception(UserWalletService::getStaticError());
  73. $payment_refund->is_pay = 1;
  74. $res = $payment_refund->save();
  75. if ($res == false) throw new \Exception('生成余额退款记录失败');
  76. $t->commit();
  77. return true;
  78. } catch (\Exception $e) {
  79. $t->rollBack();
  80. self::setStaticError($e->getMessage());
  81. return false;
  82. }
  83. }
  84. }