✏️ 正在编辑: Fgts.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/library/Core/Banco/Service/Autocontratacao/Fgts.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Core_Banco_Service_Autocontratacao_Fgts { private $_cpf; private $_qtdParcelas; private $_clienteId; private $_pararConsulta = false; private $_api; private $_countRequest = 1; private $_notifica = true; private $_dadosCliente = []; public function getPararConsulta() { return $this->_pararConsulta; } public function getNotifica() { return $this->_notifica; } public function getApi() { return $this->_api; } public static function getBancoFromClass($banco) { $banco = ucwords(strtolower($banco)); $bancos = [ 'Pan' => 'Core_Banco_Service_Pan', 'C6 Bank' => 'Core_Banco_Service_C6_Fgts', 'Safra' => 'Core_Banco_Service_Safra_Api', 'Facta' => 'Core_Banco_Service_Facta_Digitacao', 'Mercantil' => 'Core_Banco_Service_Mercantil_Api', 'Bmg' => 'Core_Banco_Service_Bmg_Fgts', 'Icred' => 'Core_Banco_Service_Icred_Fgts', 'Banco Master' => 'Core_Banco_Service_Master_Api' ]; return $bancos[$banco] ? new $bancos[$banco](): null; } public static function getBancosHabilitados($habilitadoEm = 'auto-contratacao') { $bancosCadastrados = Model_UsuariosApi::getArrayApisAutoContratacao(); $bancos = []; if (!empty(service('config')->get()->bancos->pan->apikey) && !empty($bancosCadastrados['PAN']['usuario'])) { if (self::checkHabilitado('PAN', $habilitadoEm)) { array_push($bancos, [ 'metodo' => '_consultarPan', 'banco' => 'PAN' ]); } } if (!empty(service('config')->get()->bancos->facta->api) && !empty($bancosCadastrados['FACTA']['login_certificado'])) { if (self::checkHabilitado('Facta', $habilitadoEm)) { array_push($bancos, [ 'metodo' => '_consultarFacta', 'banco' => 'Facta' ]); } } if (!empty(service('config')->get()->bancos->safra->api) && !empty($bancosCadastrados['SAFRA']['login_certificado'])) { if (self::checkHabilitado('Safra', $habilitadoEm)) { array_push($bancos, [ 'metodo' => '_consultarSafra', 'banco' => 'Safra' ]); } } if (!empty(service('config')->get()->bancos->c6bank->api) && !empty($bancosCadastrados['C6 BANK']['codigo_digitador'])) { if (self::checkHabilitado('C6 Bank', $habilitadoEm)) { array_push($bancos, [ 'metodo' => '_consultarC6bank', 'banco' => 'C6 Bank' ]); } } if (!empty(service('config')->get()->bancos->mercantil->client_id) && !empty($bancosCadastrados['MERCANTIL']['usuario'])) { if (self::checkHabilitado('Mercantil', $habilitadoEm)) { array_push($bancos, [ 'metodo' => '_consultarMercantil', 'banco' => 'Mercantil' ]); } } if (!empty($bancosCadastrados['BMG']['codigo_loja'])) { if (self::checkHabilitado('BMG', $habilitadoEm)) { array_push($bancos, [ 'metodo' => '_consultarBmg', 'banco' => 'BMG' ]); } } if (!empty(service('config')->get()->bancos->icred)) { if (self::checkHabilitado('iCred', $habilitadoEm)) { array_push($bancos, [ 'metodo' => '_consultarIcred', 'banco' => 'iCred' ]); } } if (!empty(service('config')->get()->bancos->banco_master->api) && !empty($bancosCadastrados['BANCO MASTER']['canal_venda'])) { if (self::checkHabilitado('Banco Master', $habilitadoEm)) { array_push($bancos, [ 'metodo' => '_consultarMaster', 'banco' => 'Banco Master' ]); } } if (empty($bancos)) { throw new Core_Exception("Desculpe! Esse sistema ainda não possui nenhuma configuração de banco habilitada.", 0); } return $bancos; } public static function checkHabilitado($banco, $para) { $bancoId = Model_Banco::bancoPorNome($banco); $modelBanco = new Model_Banco(); $banco = $modelBanco->exibir($bancoId); if ($para == 'auto-contratacao') { return $banco->exibir_autocontratacao; } if ($para == 'auto-higienizacao') { return $banco->permitir_higienizar_fgts; } return false; } public function consultar($cpf, $clienteId, $metodo, $qtdParcelas = 0) { if (!method_exists($this, $metodo)) { throw new Core_Exception("Método de consulta não implementado!", 0); } $this->_cpf = \String_Refatorar::formatarCpf($cpf); $this->_qtdParcelas = $qtdParcelas; $this->_clienteId = $clienteId; $response = $this->$metodo(); if (empty($response)) { throw new Core_Exception("Nenhuma informação foi retornada pelo banco selecionado.", 0); } unset($dados['consulta_banco']); if (!empty($response->error)) { throw new Core_Exception($response->message, $response->code); } return $response; } private function _consultarPan() { try { $service = self::getBancoFromClass("PAN"); $retorno = $service->consultaFgts($this->_cpf, $this->_qtdParcelas); $this->_api = $service; $service->tratarMensagemErro($this->_clienteId, $retorno); if (!empty(current(current($retorno)->condicoes_credito))) { current(current($retorno)->condicoes_credito)->login_certificado = $service->getUsuario(); current(current($retorno)->condicoes_credito)->saldo_total = current(current($retorno)->condicoes_credito)->valor_cliente; } } catch (\Core_Exception $e) { $this->_pararConsulta = $service ? $service->getPararConsulta() : false; $this->_notifica = $service ? $service->getNotifica() : false; return (object)['error' => true, 'message' => $e->getMessage(), 'code' => $e->getCode()]; } catch (\Exception $e) { return (object)['error' => true, 'message' => "Um erro aconteceu durante a consulta no banco", 'code' => 0]; } return current($retorno); } private function _consultarC6bank() { try { $service = self::getBancoFromClass("C6 Bank"); $retorno = $service->consultaFgts($this->_cpf, $this->_qtdParcelas); $this->_api = $service; $service->tratarMensagemErro($this->_clienteId, $retorno); } catch (\Core_Exception $e) { $this->_pararConsulta = $service ? $service->getPararConsulta() : false; $this->_notifica = $service ? $service->getNotifica() : false; return (object)['error' => true, 'message' => $e->getMessage(), 'code' => $e->getCode()]; } catch (\Exception $e) { return (object)['error' => true, 'message' => "Um erro aconteceu durante a consulta no banco", 'code' => 0]; } return $retorno; } private function _consultarSafra() { try { $service = self::getBancoFromClass("Safra"); $retorno = $service->consultaFgts($this->_cpf, $this->_qtdParcelas); $this->_api = $service; $service->tratarMensagemErro($this->_clienteId, $retorno); } catch (\Core_Exception $e) { $this->_pararConsulta = $service ? $service->getPararConsulta() : false; $this->_notifica = $service ? $service->getNotifica() : false; return (object)['error' => true, 'message' => $e->getMessage(), 'code' => $e->getCode()]; } catch (\Exception $e) { return (object)['error' => true, 'message' => "Um erro aconteceu durante a consulta no banco", 'code' => 0]; } return $retorno; } private function _consultarFacta() { try { $service = self::getBancoFromClass("Facta"); $retorno = $service->consultaFgts($this->_cpf, $this->_qtdParcelas); $this->_api = $service; $service->tratarMensagemErro($this->_clienteId, $retorno); } catch (\Core_Exception $e) { $this->_pararConsulta = $service ? $service->getPararConsulta() : false; $this->_notifica = $service ? $service->getNotifica() : false; return (object)['error' => true, 'message' => $e->getMessage(), 'code' => $e->getCode()]; } catch (\Exception $e) { return (object)['error' => true, 'message' => "Um erro aconteceu durante a consulta no banco", 'code' => 0]; } return $retorno; } private function _consultarMercantil() { try { $service = self::getBancoFromClass("Mercantil"); $retorno = $service->consultaFgts($this->_cpf, $this->_qtdParcelas); $this->_api = $service; $service->tratarMensagemErro($this->_clienteId, $retorno); } catch (\Core_Exception $e) { $this->_pararConsulta = $service ? $service->getPararConsulta() : false; $this->_notifica = $service ? $service->getNotifica() : false; return (object)['error' => true, 'message' => $e->getMessage(), 'code' => $e->getCode()]; } catch (\Exception $e) { return (object)['error' => true, 'message' => "Um erro aconteceu durante a consulta no banco", 'code' => 0]; } return $retorno; } private function _consultarBmg() { try { $service = self::getBancoFromClass("BMG"); $retorno = $service->consultaFgts($this->_cpf, $this->_qtdParcelas); $this->_api = $service; $service->tratarMensagemErro($this->_clienteId, $retorno); } catch (\Core_Exception $e) { $this->_pararConsulta = $service ? $service->getPararConsulta() : false; $this->_notifica = $service ? $service->getNotifica() : false; return (object)['error' => true, 'message' => $e->getMessage(), 'code' => $e->getCode()]; } catch (\Exception $e) { return (object)['error' => true, 'message' => "Um erro aconteceu durante a consulta no banco", 'code' => 0]; } return $retorno; } private function _consultarIcred() { try { $service = self::getBancoFromClass("iCred"); $retorno = $service->consultaFgts($this->_cpf, $this->_clienteId, $this->_qtdParcelas); $this->_api = $service; $service->tratarMensagemErro($this->_clienteId, $retorno); } catch (\Core_Exception $e) { $this->_pararConsulta = $service ? $service->getPararConsulta() : false; $this->_notifica = $service ? $service->getNotifica() : false; return (object)['error' => true, 'message' => $e->getMessage(), 'code' => $e->getCode()]; } catch (\Exception $e) { Yuppie_Log::write($e->getMessage() . "\n" . $e->getTraceAsString(), $this); return (object)['error' => true, 'message' => "Um erro aconteceu durante a consulta no banco", 'code' => 0]; } return $retorno; } private function _consultarMaster() { try { $service = self::getBancoFromClass("Banco Master"); $retorno = $service->consultaFgts($this->_cpf, $this->_qtdParcelas); $this->_api = $service; $service->tratarMensagemErro($this->_clienteId, $retorno); } catch (\Core_Exception $e) { $this->_pararConsulta = $service ? $service->getPararConsulta() : false; $this->_notifica = $service ? $service->getNotifica() : false; return (object)['error' => true, 'message' => $e->getMessage(), 'code' => $e->getCode()]; } catch (\Exception $e) { return (object)['error' => true, 'message' => "Um erro aconteceu durante a consulta no banco", 'code' => 0]; } return $retorno; } protected function _erroMessageTreatment($mensagem) { $mensagemLimpa = String_Refatorar::removerAcentuacao($mensagem); $mensagemRetorno = ["code" => 0, "message" => "", "stop" => false]; switch ($mensagem) { case !empty(stristr($mensagemLimpa, 'nao possui adesao')): case !empty(stristr($mensagemLimpa, 'nao aderiu ao saque')): case !empty(stristr($mensagemLimpa, 'inexistent anniversary')): $mensagemRetorno = [ 'code' => 1, 'message' => 'Você precisa aderir a modalidade Saque Aniversário. Acesse o aplicativo do FGTS e faça o procedimento.', ]; $this->_pararConsulta = true; break; case !empty(stristr($mensagemLimpa, 'nao possui conta')): $mensagemRetorno = [ 'code' => 0, 'message' => 'O CPF informado não possui conta de FGTS.', ]; $this->_pararConsulta = true; $this->_notifica = false; break; case !empty(stristr($mensagemLimpa, 'Instituicao Fiduciaria nao possui autorizacao do Trabalhador para Operacao Fiduciaria')): case !empty(stristr($mensagemLimpa, 'nao autorizou a instituicao')): case !empty(stristr($mensagemLimpa, 'unauthorized')): $bancosHabilitados = implode(", ", array_map(function ($item) { return $item['banco']; }, self::getBancosHabilitados())); $liberar = count(self::getBancosHabilitados()) > 1 ? "os bancos {$bancosHabilitados}" : "o banco {$bancosHabilitados}"; $mensagemRetorno = [ 'code' => 2, // 'message' => "Você precisa liberar um dos bancos parceiros ({$bancosHabilitados}) para realizar a consulta ao seu FGTS. Acesse o aplicativo do FGTS e faça o procedimento." 'message' => "Para uma melhor análise, libere {$liberar}. Acesse o aplicativo do FGTS e faça o procedimento." ]; break; case !empty(stristr($mensagemLimpa, 'NAO possui saldo disponivel')): case !empty(stristr($mensagemLimpa, "O valor de antecipacao da parcela")): case !empty(stristr($mensagemLimpa, "Saldo nao encontrado")): case !empty(stristr($mensagemLimpa, "Numero da parcela invalido")): case !empty(stristr($mensagemLimpa, "As parcelas selecionadas nao estao de acordo com a politica de credito")): case !empty(stristr($mensagemLimpa, "O total de emprestimo deve ser maior")): case !empty(stristr($mensagemLimpa, "Valor da Operacao nao pode ser menor que o valor minimo cadastrado")): case !empty(stristr($mensagemLimpa, "Valor liberado nao pode ser menor ou igual a zero")): case !empty(stristr($mensagemLimpa, "O cpf informado nao possui Saque aniversario disponivel")): case !empty(stristr($mensagemLimpa, "Nao foi possivel encontrar saldos disponiveis")): case !empty(stristr($mensagemLimpa, "As parcelas selecionadas nao estao de acordo com a politica de credito")): case !empty(stristr($mensagemLimpa, "Valor da parcela deve ser maior")): case !empty(stristr($mensagemLimpa, "Valor Solicitado nao pode ser menor que o valor minimo cadastrada no produto")): case !empty(stristr($mensagemLimpa, "VALOR DO EMPRESTIMO MENOR QUE MINIMO")): case !empty(stristr($mensagemLimpa, "Valor nao suficiente para realizar uma simulacao")): case !empty(stristr($mensagemLimpa, "QUANTIDADE DE PARCELAS NAO INFORMADA")): case !empty(stristr($mensagemLimpa, "esta abaixo do valor minimo parametrizado")): $mensagemRetorno = [ 'code' => 3, 'message' => 'Infelizmente você não possui saldo disponível que permita a antecipação.', ]; $this->_notifica = false; break; case !empty(stristr($mensagemLimpa, 'novamente mais tarde')): case !empty(stristr($mensagemLimpa, 'Falha de comunicacao com a API da CAIXA')): case !empty(stristr($mensagemLimpa, 'An internal error has occurred')): case !empty(stristr($mensagemLimpa, 'Ocorreu um erro inesperado')): case !empty(stristr($mensagemLimpa, 'Erro ao realizar a consulta')): $mensagemRetorno = [ 'code' => 0, 'message' => 'Comunicação com o sistema da Caixa Econômica Federal indisponível. ' . 'Tente novamente mais tarde!' ]; break; case !empty(stristr($mensagemLimpa, "Horario para acesso nao permitido")): $mensagemRetorno = [ 'code' => 0, 'message' => 'Existe uma restrição de horário no Banco PAN que não permitiu ' . 'a consulta dos seus dados. Por favor, tente novamente mais tarde ou aguarde o contato da nossa equipe!' ]; break; case !empty(stristr($mensagemLimpa, "Not allowed to perform this operation")): $mensagemRetorno = [ 'code' => 0, 'message' => 'Falha de comunicação com o C6 Bank. Tente novamente mais tarde ou habilite outro banco.' ]; break; case !empty(stristr($mensagemLimpa, "Operacao nao permitida antes")): $mensagemRetorno = [ 'code' => 4, 'message' => 'Operação não permitida próximo ao seu aniversário. Faremos contato posteriormente!' ]; $this->_pararConsulta = true; $this->_notifica = false; break; case !empty(stristr($mensagemLimpa, "Nao foi possivel acessar o backend")): case !empty(stristr($mensagemLimpa, "Invalid credentials")): case !empty(stristr($mensagemLimpa, "Falha na execucao do comando")): $mensagemRetorno = [ 'code' => 0, 'message' => 'Falha de comunicação com o sistema do banco. Tente novamente mais tarde!' ]; $this->_notifica = false; break; case !empty(stristr($mensagemLimpa, "Rate limit")): $mensagemRetorno = [ 'code' => 0, 'message' => 'Falha de comunicação com o banco PAN. Tente novamente mais tarde ou habilite outro banco.' ]; $this->_notifica = false; break; case !empty(stristr($mensagemLimpa, "An internal error has occurred")): case !empty(stristr($mensagemLimpa, "Ocorreu um erro ao validar o acesso")): $mensagemRetorno = [ 'code' => 0, 'message' => 'Falha de comunicação com o banco selecionado. Tente novamente mais tarde ou habilite outro banco.' ]; $this->_notifica = false; break; case !empty(stristr($mensagemLimpa, "Existe uma Operacao Fiduciaria em andamento")): $mensagemRetorno = [ 'code' => 0, 'message' => 'Você já possui um contrato em andamento.' ]; $this->_notifica = false; break; case !empty(stristr($mensagemLimpa, "Webservice exige cadastramento")): $mensagemRetorno = [ 'code' => 0, 'message' => 'Serviço não liberado. Favor entrar em contato com a equipe de suporte para liberação.' ]; $this->_notifica = false; break; case !empty(stristr($mensagemLimpa, " O horario de utilizacao da forma Digital e de Segunda a Sabado")): $mensagemRetorno = [ 'code' => 0, 'message' => 'Sistema do BMG inoperante nesse horário. Libere um dos outros bancos homologados para continuar.' ]; $this->_notifica = false; break; case !empty(stristr($mensagemLimpa, "Este banco possui restricao para liberacao de recurso")): $mensagemRetorno = [ 'code' => 0, 'message' => 'O banco informado para o crédito não é permitido pelo Banco Mercantil. Informe uma conta bancária em outro banco.' ]; $this->_notifica = false; break; case !empty(stristr($mensagemLimpa, "Nao foi possivel realizar comunicacao com a CEF devido a quantidade de requisicoes")): $mensagemRetorno = [ 'code' => 0, 'message' => 'Este banco está com dificuldades de comunicação com a Caixa Econômica. Libere outro banco ou tente novamente mais tarde.' ]; $this->_notifica = false; break; case !empty(stristr($mensagemLimpa, "on-queue")): $mensagemRetorno = [ 'code' => 0, 'message' => 'Consulta na fila. Favor aguardar alguns instantes e tentar novamente para ver se já temos retorno.' ]; $this->_notifica = false; break; default: $mensagemRetorno = [ 'code' => 0, 'message' => $mensagem ]; break; } $mensagemRetorno['message'] = $this->getOrigemConsulta() . ": " . $mensagemRetorno['message']; return $mensagemRetorno; } }
💾 保存文件
← 返回文件管理器