0) { if ($order['refund_money'] < $order['balance']) { if ($order['refund_money'] + $money > $order['balance']) { $balance = round($order['balance'] - $order['refund_money'], 2);//余额退款金额 $money = round($money - $balance, 2); $this->balance($order, $balance); } else { $pay_type = 10; } } } if ($money <= 0) { return true; } // 1.微信支付退款 if ($pay_type == OrderPayTypeEnum::WECHAT) { //先获取商户是否单独收款 $is_independent = SupplierModel::getIndependentOpen($order['shop_supplier_id']); if(!empty($is_independent)){ //分每个商户有单独的付呗支付信息 $AppConfig = AppPayModel::detail($order['shop_supplier_id']);; // 2024.8.7 更新 }else{ $AppConfig = AppModel::getAppCache($order['app_id']); // 2022.12.13 更新 } if ($AppConfig["apitype"]) { //付呗支付 return $this->fbpay($order, $money); } else { return $this->wxpay($order, $money); } } // 2.余额支付退款 if ($pay_type == OrderPayTypeEnum::BALANCE) { return $this->balance($order, $money); } // 3.支付宝退款 if ($pay_type == OrderPayTypeEnum::ALIPAY) { return $this->alipay($order, $money, $out_refund_no); } return false; } /** * 余额支付退款 */ private function balance(&$order, $money) { // 回退用户余额 //判断是否商户独立收款 by yj 2024.3.14 if(!empty($order['is_independent']) && $order['is_independent'] == 1){ $shop_supplier_id = $order['shop_supplier_id']; $where =[ "shop_supplier_id"=> $order['shop_supplier_id'], "user_id"=> $order['user_id'] ]; $supplier_balance = SupplierBalanceModel::detail($where); $supplier_balance->where('user_id', '=', $order['user_id'])->where('shop_supplier_id', '=', $order['shop_supplier_id'])->inc('balance', $money)->update(); }else{ $shop_supplier_id = 0; $user = UserModel::detail($order['user_id']); $user->where('user_id', '=', $order['user_id'])->inc('balance', $money)->update(); } log_write('-------------余额退款'); // 记录余额明细 $money > 0 && BalanceLogModel::add(BalanceLogSceneEnum::REFUND, [ 'user_id' => $user['user_id'], 'money' => $money, 'shop_supplier_id' => $shop_supplier_id, 'app_id' => $order['app_id'], ], ['order_no' => $order['order_no']]); return true; } /** * 微信支付退款 */ private function wxpay(&$order, $money) { $app = null; if ($order['pay_source'] == 'mp' || $order['pay_source'] == 'h5') { $app = AppMp::getWxPayApp($order['app_id']); }else if($order['pay_source'] == 'wx'){ $app = AppWx::getWxPayApp($order['app_id']); } else if ($order['pay_source'] == 'android' || $order['pay_source'] == 'ios') { $app = AppOpen::getWxPayApp($order['app_id']); } $pay_price = $order['online_money']; if (!isset($order['main_order_no'])) {//不是定金订单 //查询是否合并支付 $tradeOrderInfo = OrderTradeModel::where('order_id', '=', $order['order_id']) ->where('pay_status', '=', 20) ->find(); if ($tradeOrderInfo) { $pay_price = $tradeOrderInfo['online_money']; } } $WxPay = new WxPay($app); return $WxPay->refund($order['transaction_id'], $pay_price, $money); } /** * 支付宝退款 */ private function alipay(&$order, $money, $out_refund_no) { $AliPay = new AliPay(); return $AliPay->refund($order['transaction_id'], $order['trade_no'], $money, $out_refund_no); } /** * 付呗退款 */ private function fbpay(&$order, $money) { $app = FbPay::getFbPayApp($order['app_id'], $order['shop_supplier_id']); $FbPay = new FbPay($app); return $FbPay->refund($order['transaction_id'], $order['trade_no'], $money); } }