| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\utils;
- use app\models\Order;
- use app\models\OrderUnion;
- use app\models\PtActivityOrder;
- use app\utils\Alipay\Alipay;
- use app\utils\Alipay\AlipayProfit;
- use app\utils\Wechat\WechatNewPay;
- use app\utils\Wechat\WechatPay;
- use app\utils\Adapay\Adapay;
- use app\utils\Allinpay\Allinpay;
- use app\models\UserPayMonth;
- use app\models\Store;
- use app\models\AccountLog;
- use app\utils\yunst\src\OrderYunst;
- class Refund
- {
- /**
- * @param $order Order|IntegralOrder|MsOrder|OrderUnion|PtOrder|YyOrder 订单
- * @param $order_type string
- * @param $refundFee integer 退款金额
- * @param $orderRefundNo string 退款单号
- * @return array|bool|\Yansongda\Supports\Collection
- */
- public static function refund_old($order, $order_type, $orderRefundNo, $refundFee)
- {
- $user = $order->user;
- if ($user->platform == 0 || $user->platform == 2) {
- $res = WechatPay::orderRefund($order, $order_type, $refundFee, $orderRefundNo);
- if (!$res || $res['code'] == 1) {
- return $res;
- }
- return true;
- } else if ($user->platform == 1) {
- $res = Alipay::refund($order, $refundFee);
- if (!$res || $res['code'] == 1) {
- return $res;
- }
- return true;
- } else {
- return [
- 'code' => 1,
- 'msg' => '退款失败'
- ];
- }
- }
- /**
- * @param $order Order | PtActivityOrder
- * @param $order_type string
- * @param $refundFee integer 退款金额
- * @param $orderRefundNo string 退款单号
- * @return array|bool|\Yansongda\Supports\Collection
- */
- public static function refund($order, $order_type, $orderRefundNo, $refundFee)
- {
- if(isset($order['order_type']) && $order['order_type'] == Order::ORDER_TYPE_GIVING_GIFTS && $refundFee && $order['giving_gifts_received_user_id']){
- AccountLog::saveLog($order['giving_gifts_received_user_id'], $refundFee, AccountLog::TYPE_BALANCE, AccountLog::LOG_TYPE_INCOME, AccountLog::TYPE_PLATFORM_REFUND_ORDER, $order->id, "送礼订单退款至余额:退款订单号:{$orderRefundNo}");
- return true;
- }
- if ($order->pay_type == Order::PAY_TYPE_YUNST_WECHAT_PAY && $order->transaction_id) {
- debug_log('我是退款111');
- $orderYunst = new OrderYunst();
- $store = Store::findOne($order->store_id);
- $data["cusid"] = $store->cusid;//商户号
- // $data["trxamt"] = $refundFee *100;//退款金额
- $data["trxamt"] = 1;//退款金额
- $data["reqsn"] = $order->order_no .time();//商户退款订单号
- $data["oldreqsn"] = $order->order_no;//原交易订单号
- $data["oldtrxid"] = $order->transaction_id;//原交易流水
- // $data["oldtrxid"] = '240124119500033224';//原交易流水
- $res_info = $orderYunst->YunstRefund($data);
- debug_log($data);
- debug_log('走到通联退款');
- debug_log($res_info);
- if ($res_info['subCode'] != 'SUCCESS' || $res_info['data']['trxstatus'] != '0000') {
- $res = [
- 'code' => 1,
- 'msg' => '订单取消失败,退款失败,' . $res_info['data']['errmsg'],
- 'res' => $res_info,
- ];
- }else{
- $res = [
- 'code' => 0,
- 'msg' => 'success',
- 'data' => true
- ];
- return true;
- }
- return $res;
- debug_log($res_info);
-
- }
- if ($order->pay_type == 1 && $order->transaction_id) {
- $self_mini = intval(\app\models\Option::get('self_mini', $order->store_id, 'store', 0)['value']);
- if (\Yii::$app->prod_is_dandianpu() && (!Store::hasIncoming($order->store_id) && !$self_mini)) {
- $res = WechatPay::orderRefund($order, $order_type, $refundFee, $orderRefundNo);
- } else {
- if (is_profit_pay()) {
- $res = WechatNewPay::orderRefund($order, $order_type, $refundFee, $orderRefundNo);
- } else {
- $res = WechatPay::orderRefund($order, $order_type, $refundFee, $orderRefundNo);
- }
- }
- if (!$res || $res['code'] == 1) {
- return $res;
- }
- return true;
- } else if (in_array($order->pay_type, [Order::PAY_TYPE_WX_B2B]) && $order->transaction_id) {
- $res = Wechat\B2b\B2bPay::orderRefund($order, $order_type, $refundFee, $orderRefundNo);
-
- if (!$res || $res['code']) {
- //处理23.0的支付类型存为b2b的bug,
- if($order->version == 23.0 && $res['res'] && $res['res']['errcode'] == 48001){
- $order->pay_type = 1;
- if(!$order->save()){
- return [
- 'code' => 1,
- 'msg' => $order->getFirstErrors(),
- ];
- }
- return self::refund($order, $order_type, $orderRefundNo, $refundFee);
- }
- return $res;
- }
- return true;
- } else if (in_array($order->pay_type, [Order::PAY_TYPE_ADAPAY_WX, Order::PAY_TYPE_ADAPAY_ALIPAY, Order::PAY_TYPE_ADAPAY_QUICKPAY_FRONTPAY, Order::PAY_TYPE_HUIFU_V2_JSPAY_WX]) && $order->adapay_payment_id) {
- $res = Adapay::orderRefund($order, $order_type, $refundFee, $orderRefundNo);
-
- if (!$res || $res['code']) {
- return $res;
- }
- return true;
- } else if (in_array($order->pay_type, [Order::PAY_TYPE_ALLINPAY_WX]) && $order->allinpay_payment_id) {
- $res = Allinpay::orderRefund($order, $order_type, $refundFee, $orderRefundNo);
-
- if (!$res || $res['code'] == 1) {
- return $res;
- }
- return true;
- }else if ($order->pay_type == 4 && $order->alipay_trade_no) {
- if (is_profit_pay()) {
- $res = AlipayProfit::refund($order, $refundFee);
- } else {
- $res = Alipay::refund($order, $refundFee);
- }
-
- if (!$res || $res['code'] == 1) {
- return $res;
- }
- return true;
- } else if ($order->pay_type == Order::PAY_TYPE_MONTH) {
- $res = UserPayMonth::refund($order->user_id, $order, $refundFee);
-
- if (!$res || $res['code']) {
- return $res;
- }
- return true;
- } else {
- return [
- 'code' => 1,
- 'msg' => '退款失败'
- ];
- }
- }
- }
|