function getProviderTransfer($userInfo, $bankInfo = null, $accountNo = null, $options = []) { if(!empty($accountNo) && preg_match('/^(M999)/', $accountNo, $matches) && $bankInfo->code == Bank::BANK_CODE_TECHCOMBANK){ return UserTransaction::PROVIDER_TRANSFER_TECHCOMBANK; } if (!empty($accountNo) && preg_match('/^(966699)/', $accountNo, $matches) && $bankInfo->code == Bank::BANK_CODE_MSB) { return UserTransaction::PROVIDER_TRANSFER_VPBANK; } if (!empty($options['amount']) && is_numeric($options['amount']) && $options['amount'] < 2000) { if ($bankInfo->code == Bank::BANK_CODE_TECHCOMBANK && !Bank::isAccountNoTCB($accountNo)) { return UserTransaction::PROVIDER_TRANSFER_VIETINBANK; } if (in_array($bankInfo->code, [ UserTransaction::PROVIDER_TRANSFER_TPBANK, UserTransaction::PROVIDER_TRANSFER_TECHCOMBANK, UserTransaction::PROVIDER_TRANSFER_VIETINBANK, UserTransaction::PROVIDER_TRANSFER_MBBANK, UserTransaction::PROVIDER_TRANSFER_VPBANK])) { return $bankInfo->code; } return UserTransaction::PROVIDER_TRANSFER_VIETINBANK; } $appSetting = AppSetting::get()->pluck('content','key')->toArray(); $providerDefault = data_get($appSetting, 'PAYOUT_PROVIDER_DEFAULT', UserTransaction::PROVIDER_TRANSFER_VPBANK); if (!empty($userInfo->payout_provider_code)) { $accountName = !empty($options['account_name']) ? $options['account_name'] : ''; if ($userInfo->payout_provider_code == UserTransaction::PROVIDER_TRANSFER_TECHCOMBANK && !Bank::isValidAccountNameByFirstName($accountName)) { return $providerDefault; } if ($userInfo->payout_provider_code == UserTransaction::PROVIDER_TRANSFER_TECHCOMBANK && $bankInfo->code == Bank::BANK_CODE_TECHCOMBANK && !Bank::isAccountNoTCB($accountNo)) { return $providerDefault; } if ($userInfo->payout_provider_code == UserTransaction::PROVIDER_TRANSFER_TECHCOMBANK && !empty($accountNo) && (Bank::checkTypeCard($accountNo) || Bank::hasSpecialCharacter($accountNo) || Phone::isValid($accountNo))){ return $providerDefault; } if ($userInfo->payout_provider_code == UserTransaction::PROVIDER_TRANSFER_TPBANK && !empty($accountNo) && (Bank::checkTypeCard($accountNo) || Bank::hasSpecialCharacter($accountNo) || !is_numeric($accountNo) || Phone::isValid($accountNo))) { return $providerDefault; } $payoutProviderSetting = !empty($userInfo->payout_provider_settings) ? explode(',', $userInfo->payout_provider_settings) : []; if ($payoutProviderSetting && is_array($payoutProviderSetting) && in_array($bankInfo->code, $payoutProviderSetting)) { return $bankInfo->code; } return strtoupper($userInfo->payout_provider_code); } if (!empty($options['amount']) && $options['amount'] >= config('setting.min_citad_amount') && in_array($userInfo->name, config('setting.merchant_citad'))) { return UserTransaction::PROVIDER_TRANSFER_TECHCOMBANK; } if(!is_numeric($accountNo) && !in_array($bankInfo->code, config('bank.bank_is_support_inick'))){ return $providerDefault; } if (!empty($accountNo) && Bank::checkTypeCard($accountNo) && !in_array($bankInfo->code, config('bank.bank_is_support_card'))){ $bankTransferAtm=data_get($appSetting, 'PAYOUT_PROVIDER_ATM', $providerDefault); if($bankTransferAtm==UserTransaction::PROVIDER_TRANSFER_BIDV && $bankInfo->code==Bank::BANK_CODE_MSB) { return $providerDefault; } return $bankTransferAtm; } if (!empty($accountNo) && Phone::isValid($accountNo) && !in_array($bankInfo->code, config('bank.bank_is_support_phone_number'))){ return $providerDefault; } if (!empty($accountNo) && Bank::hasSpecialCharacter($accountNo)) { return $providerDefault; } $transferBankSetting = TransferBankPartner::query() ->where('bank_code', $bankInfo->code) ->first(); if (!$transferBankSetting instanceof TransferBankPartner) { return $providerDefault; } if(in_array($transferBankSetting->provider,[UserTransaction::PROVIDER_TRANSFER_TPBANK,UserTransaction::PROVIDER_TRANSFER_BIDV]) && in_array(Carbon::now()->hour,[23,0])){ return $providerDefault; } if ($transferBankSetting->provider == UserTransaction::PROVIDER_TRANSFER_TECHCOMBANK && $bankInfo->code == Bank::BANK_CODE_TECHCOMBANK && !Bank::isAccountNoTCB($accountNo)) { return $providerDefault; } if ($transferBankSetting->provider == UserTransaction::PROVIDER_TRANSFER_TECHCOMBANK && !empty($accountNo) && (Bank::checkTypeCard($accountNo) || !is_numeric($accountNo) || Phone::isValid($accountNo))) { return $providerDefault; } if ($transferBankSetting->provider == UserTransaction::PROVIDER_TRANSFER_TPBANK && !empty($accountNo) && (Bank::checkTypeCard($accountNo) || !is_numeric($accountNo) || Phone::isValid($accountNo))) { return $providerDefault; } if ($transferBankSetting->provider == UserTransaction::PROVIDER_TRANSFER_MBBANK && !empty($options['amount']) && $options['amount'] > 4000000000) { return $providerDefault; } return $transferBankSetting->provider; }