✏️ 正在编辑: Digitacao.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/library/Core/Banco/Service/Facta/Digitacao.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php use Modules\SimulacaoAberta\Service\SimulacaoAbertaService; class Core_Banco_Service_Facta_Digitacao extends Core_Banco_Service_Autocontratacao_Fgts { private $_indiceUsuario = 0; private $_dadosUsuarios; private $_usuarioId; private $_usuario; private $_senha; private $_loginCertificado; private $_authorization; // private $_url = "https://webservice-homol.facta.com.br"; private $_url = "https://webservice2.facta.com.br"; private $_bancoId = null; private $_urlFormalizacao = null; private $_origemConsulta; private $_dadosCliente; function __construct() { $this->_bancoId = Model_Banco::bancoPorNome('FACTA'); if (empty($this->_bancoId)) { throw new Yuppie_Exception("O banco Facta não está cadastrado"); } $this->_dadosUsuarios = Model_UsuariosApi::getByApi('FACTA', 'autocontratacao'); if (count($this->_dadosUsuarios) == 0) { $msgErro = 'Nenhum usuário de API cadastrado.'; throw new Yuppie_Exception($msgErro); } $enable = service('config')->get()->bancos->facta->api ?? null; if (!$enable) { $msgErro = 'API da Facta Financeira não está configurada.'; throw new Core_Exception($msgErro); } $options = [ 'id' => $this->_dadosUsuarios[$this->_indiceUsuario]['id'], 'usuario' => $this->_dadosUsuarios[$this->_indiceUsuario]['usuario'], 'senha' => $this->_dadosUsuarios[$this->_indiceUsuario]['senha'], 'login_certificado' => $this->_dadosUsuarios[$this->_indiceUsuario]['login_certificado'] ]; $this->_origemConsulta = 'Facta'; $this->setOptions($options); } public function setOptions(array $options) { $this->_usuarioId = $options['id']; $this->_usuario = $options['usuario']; $this->_senha = $options['senha']; $this->_loginCertificado = $options['login_certificado']; return $this; } public function getUsuario() { return $this->_usuario; } public function getSenha() { return $this->_senha; } public function getUrl() { return $this->_url; } public function getBancoId() { return $this->_bancoId; } public function getOrigemConsulta() { return $this->_origemConsulta; } /** * @throws Exception */ protected function getTokenApi() { //verifica se já tem token gerado $tokenValido = (new Model_DbTable_BancosTokenApi())->checkTokenValido($this->_bancoId, $this->_usuarioId); if ($tokenValido) { $this->_authorization = $tokenValido['token']; return; } $this->newToken(); } protected function newToken() { $endPoint = '/gera-token'; $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => $this->_url . $endPoint, CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => [ "Content-Type: application/json", "Authorization: Basic " . base64_encode($this->getUsuario() . ":" . $this->getSenha()) ], ]); $response = curl_exec($curl); curl_close($curl); $token = json_decode($response); if (empty($token->token)) { Yuppie_Log::write("Consulta Facta geração de newToken: " . print_r($response, 1), $this); if (!$this->setProximoUsuario(true)) { throw new Core_Exception("Facta: " . $token->message); } return $this->newToken(); } $this->_authorization = $token->token; $expiraEm = new Zend_Date($token->expira); (new Model_DbTable_BancosTokenApi())->saveToken($this->_bancoId, $this->_usuarioId, $this->_authorization, $expiraEm->get('yyyy-MM-dd HH:mm:ss')); Model_UsuariosApi::gravarDataUtilizacao($this->_usuarioId); Yuppie_Log::write("Novo token gerado. Expira em: " . $expiraEm->get('yyyy-MM-dd HH:mm:ss'), $this); } protected function setProximoUsuario($erroAutenticacao = false) { if ($erroAutenticacao) { Model_UsuariosApi::desativarUsuario($this->_usuarioId); } $this->_indiceUsuario++; if (!empty($this->_dadosUsuarios[$this->_indiceUsuario]['id'])) { Yuppie_Log::write("Passando para próximo usuário cadastrado.", $this); $options = [ 'id' => $this->_dadosUsuarios[$this->_indiceUsuario]['id'], 'usuario' => $this->_dadosUsuarios[$this->_indiceUsuario]['usuario'], 'senha' => $this->_dadosUsuarios[$this->_indiceUsuario]['senha'], 'login_certificado' => $this->_dadosUsuarios[$this->_indiceUsuario]['login_certificado'] ]; $this->setOptions($options); } else { Yuppie_Log::write("Fim dos usuários.", $this); return false; } return true; } protected function getResponse($endPoint, $params, $method = 'GET', $header = null) { $url = $this->_url . $endPoint; if (isset($params['api'])) { unset($params['api']); } $options = [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "Authorization: Bearer {$this->_authorization}" ], ]; if ($method == "GET") { $url .= '?' . http_build_query($params); $options[CURLOPT_CUSTOMREQUEST] = "GET"; } elseif ($method == "POST") { $options[CURLOPT_CUSTOMREQUEST] = "POST"; $options[CURLOPT_POSTFIELDS] = $params; } if (!empty($header)) { $options[CURLOPT_HTTPHEADER] = array_merge($options[CURLOPT_HTTPHEADER], $header); } $options[CURLOPT_URL] = $url; $curl = curl_init(); curl_setopt_array($curl, $options); $response = curl_exec($curl); $info = curl_getinfo($curl); curl_close($curl); Yuppie_Log::write("getResponse Service Facta parâmetros enviados para url {$url}:" . print_r($params, true), $this); Yuppie_Log::write("Retorno do getResponse Service Facta:" . print_r($response, true), $this); if ($info['http_code'] != 200) { $retorno = new stdClass(); $retorno->msg = "Falha de comunicação com o Banco Facta"; return $retorno; } $response = json_decode($response); if (!empty($response->erro) && stristr($response->mensagem, "Token")) { $this->newToken(); return $this->getResponse($endPoint, $params, $method, $header); } return $response; } public function tratarMensagemErro(int $clienteId, $retorno) { if (empty($retorno->msg) && empty($retorno->condicoes_credito[0]->msg)) { return null; } $mensagem = $retorno->condicoes_credito[0]->msg ?? $retorno->msg; $mensagemRetorno = $this->_erroMessageTreatment($mensagem); if (!empty($mensagemRetorno)) { (new Model_DbTable_CallcenterFgts())->insert([ 'base_id' => $clienteId, 'periodo' => 0, 'data_repasse' => null, 'valor' => 0, 'descricao_erro' => $mensagemRetorno['message'], 'origem_consulta' => "Facta" ]); throw new Core_Exception($mensagemRetorno['message'], $mensagemRetorno['code']); } } public function consultaFgts($cpf, $qtdParcelas) { if (empty($this->_authorization)) { $this->getTokenApi(); } $params = [ 'cpf' => String_Refatorar::formatarCpf($cpf), ]; $endPoint = "/fgts/saldo"; $response = $this->getResponse($endPoint, $params); if (!empty($response->erro) && stristr($response->mensagem, "Authorization")) { $this->newToken(); return $this->consultaFgts($cpf, $qtdParcelas); } return $this->_respostaConsultaFgts($cpf, $response, $qtdParcelas); } protected function _getDadosCliente($cpf) { $config = [ 'id' => $this->_usuarioId, 'usuario' => $this->_usuario, 'senha' => $this->_senha ]; $response = (new Core_Banco_Service_Facta_Rest($config))->getCliente($cpf); if (empty($response->cliente)) { return; } $dadosCliente = current($response->cliente); $this->_dadosCliente = [ 'cpf' => $dadosCliente->CPF, 'rg' => $dadosCliente->CPF, 'orgao_emissor' => $dadosCliente->CPF, 'uf_emissao_documento' => $dadosCliente->CPF, 'data_emissao_documento' => $dadosCliente->CPF, 'nome' => $dadosCliente->DESCRICAO, 'data_nascimento' => $dadosCliente->DATANASCIMENTO, 'sexo' => $dadosCliente->SEXO, 'estado_civil' => $dadosCliente->ESTADOCIVIL, 'endereco' => $dadosCliente->ENDERECO, 'numero' => $dadosCliente->NUMERO, 'complemento' => $dadosCliente->COMPLEMENTO, 'bairro' => $dadosCliente->BAIRRO, 'cidade' => $dadosCliente->CIDADE, 'uf' => $dadosCliente->ESTADO, 'cep' => $dadosCliente->CEP, 'celular' => $dadosCliente->CELULAR, 'email' => $dadosCliente->EMAIL, 'nome_pai' => $dadosCliente->NOMEPAI, 'nome_mae' => $dadosCliente->NOMEMAE, ]; } protected function _respostaConsultaFgts($cpf, $response, $qtdParcelas) { if (empty($response->retorno)) { return $response; } $data = new stdClass(); $retorno = $response->retorno; $data->condicoes_credito = []; $parcelas = []; $valorTotalParcela = 0; $saldoTotal = 0; $indice = 0; foreach($retorno as $key => $r) { if (stristr($key, "dataRepasse")) { $parcelas[$indice]['data_vencimento'] = $r; continue; } if (stristr($key, "valor")) { //tratar valor mínimo do Facta if ($r < 10) { $r = 0; } $parcelas[$indice]['valor_parcela'] = $r; $parcelas[$indice]['num_parcela'] = $indice+1; $indice++; $valorTotalParcela += $r; continue; } if (!stristr($key, "saldo")) { $parcelas[$indice]['num_parcela'] = $indice+1; $indice++; } if (stristr($key, "saldo")) { $saldoTotal = $r; } } //tratar numero de parcelas escolhidas pelo cliente $indice = 0; foreach ($parcelas as $k => $parcela) { if ($qtdParcelas > 0 && $qtdParcelas <= $indice) { $parcelas[$k]['valor_parcela'] = 0; } $indice++; } if ($valorTotalParcela <= 0) { $data->condicoes_credito[0] = new stdClass(); $data->condicoes_credito[0]->msg = "Não possui saldo disponivel"; return $data; } //o prazo do contrato só deve considerar as parcelas que tem valor $prazoContrato = count(array_filter(array_map(function($v){ if ($v['valor_parcela'] > 0) { return $v; } }, $parcelas))); $responseCalculo = (array)$this->_calculo($cpf, $parcelas); $tabela = explode('-', $responseCalculo['tabela']); $responseCalculo['valor_financiado'] = String_Refatorar::parseStringToFloat($responseCalculo['valor_liquido']); $responseCalculo['valor_liquido'] = String_Refatorar::parseStringToFloat($responseCalculo['valor_liquido']); $responseCalculo['taxa_referencia_mensal'] = $responseCalculo['taxa']; $responseCalculo['saldo_total'] = $responseCalculo['valor_liquido']; $responseCalculo['codigo_tabela_financiamento'] = trim($tabela[0]); $responseCalculo['descricao_tabela_financiamento'] = trim($tabela[1]); $responseCalculo['produto'] = 'D'; $responseCalculo['codigo_produto'] = 'D'; $responseCalculo['descricao_produto'] = 'Venda Digital'; $responseCalculo['tipo_operacao'] = '13'; //NOVO DIGITAL $responseCalculo['averbador'] = '20095'; //FGTS $responseCalculo['convenio'] = '3'; //FACTA FINANCEIRA $responseCalculo['login_certificado'] = $this->_loginCertificado; $responseCalculo['prazo'] = $prazoContrato; $responseCalculo['vendedor'] = $this->_usuario != $this->_loginCertificado ? $this->_loginCertificado : null; $data->condicoes_credito[0] = (object)array_merge(['parcelas' => $parcelas], $responseCalculo); $data->origem_consulta = $this->getOrigemConsulta(); $data->dados_cliente = $this->_getDadosCliente($cpf); return $data; } protected function _calculo($cpf, $parcelas) { if (empty($this->_authorization)) { $this->getTokenApi(); } $params = [ 'cpf' => $cpf ]; foreach ($parcelas as $p) { $params['parcelas'][] = [ "dataRepasse_{$p['num_parcela']}" => $p["data_vencimento"], "valor_{$p['num_parcela']}" => $p["valor_parcela"] ]; } $cpf = String_Refatorar::formatarCpf($cpf); $tabelas = (new Model_Tabela())->getTabelaAutocontratacao('FGTS', $this->getBancoId()); $endPoint = "/fgts/calculo"; if ($tabelas->count() == 0) { $tabelas = []; $tabelas[0] = new stdClass(); $tabelas[0]->taxa = 1.80; $tabelas[0]->codigo = 48593; //FGTS SMART LIGHT RB } foreach ($tabelas as $tabela) { $params['taxa'] = $tabela->taxa; $params['tabela'] = $tabela->codigo; $response = $this->getResponse($endPoint, json_encode($params), 'POST', ['Content-Type: application/json']); if (!empty($response->erro) && stristr($response->mensagem, "Authorization")) { $this->newToken(); return $this->_calculo($cpf, $parcelas); } if (!empty($response->permitido) && $response->permitido == "SIM") { break; } } return $response; } protected function _etapa1Simulador($params) { if (empty($this->_authorization)) { $this->getTokenApi(); } $parametros = $params; if ($params['averbador'] == 3) { $parametros = [ 'produto' => $params['produto'], 'tipo_operacao' => $params['tipo_operacao'], 'averbador' => $params['averbador'], 'convenio' => $params['convenio'], 'cpf' => $params['cpf'], 'data_nascimento' => $params['data_nascimento'], 'login_certificado' => $params['login_certificado'], 'codigo_tabela' => $params['codigo_tabela_financiamento'], 'prazo' => $params['prazo'], 'valor_operacao' => $params['valor_operacao'], 'valor_parcela' => $params['valor_parcela'], 'coeficiente' => $params['coeficiente'], 'cpf_representante' => $params['cpf_representante'], 'nome_representante'=> $params['nome_representante'], 'vendedor' => $params['vendedor'], ]; } elseif ($params['averbador'] == 20095) { $parametros = [ 'produto' => $params['produto'], 'tipo_operacao' => $params['tipo_operacao'], 'averbador' => $params['averbador'], 'convenio' => $params['convenio'], 'cpf' => $params['cpf'], 'data_nascimento' => $params['data_nascimento'], 'login_certificado' => $params['login_certificado'], 'simulacao_fgts' => $params['simulacao_fgts'], 'vendedor' => $params['vendedor'], ]; } $endPoint = "/proposta/etapa1-simulador"; $response = $this->getResponse($endPoint, $parametros, 'POST'); if (!empty($response->erro) && stristr($response->mensagem, "Authorization")) { $this->newToken(); return $this->_etapa1Simulador($params); } if (!empty($response->erro)) { throw new Core_Exception("Facta: " . $response->message ?? $response->mensagem); } return $response; } protected function _etapa2Simulador($params) { if (empty($this->_authorization)) { $this->getTokenApi(); } $endPoint = "/proposta/etapa2-dados-pessoais"; $response = $this->getResponse($endPoint, $params, 'POST'); if (!empty($response->erro) && stristr($response->mensagem, "Authorization")) { $this->newToken(); return $this->_etapa2Simulador($params); } if (!empty($response->erro)) { $erro = !empty($response->message) ? $response->message : $response->mensagem; throw new Core_Exception("Facta: " . $erro); } return $response; } protected function _etapa2RepresentanteSimulador($params) { if (empty($this->_authorization)) { $this->getTokenApi(); } $endPoint = "/proposta/etapa2-representante-legal"; $response = $this->getResponse($endPoint, $params, 'POST'); if (!empty($response->erro) && stristr($response->mensagem, "Authorization")) { $this->newToken(); return $this->_etapa2RepresentanteSimulador($params); } if (!empty($response->erro)) { throw new Core_Exception("Facta: " . $response->message ?? $response->mensagem); } return $response; } protected function _etapa3Simulador($params) { if (empty($this->_authorization)) { $this->getTokenApi(); } $endPoint = "/proposta/etapa3-proposta-cadastro"; $response = $this->getResponse($endPoint, $params, 'POST'); if (!empty($response->erro) && stristr($response->mensagem, "Authorization")) { $this->newToken(); return $this->_etapa3Simulador($params); } if (!empty($response->erro)) { throw new Core_Exception($response->message ?? $response->mensagem); } return $response; } protected function _getCidade($uf, $cidade) { $endPoint = "/proposta-combos/cidade"; $params = ["estado"=> $uf, "nome_cidade" => String_Refatorar::removerAcentuacao($cidade)]; $response = $this->getResponse($endPoint, $params); if (!empty($response->erro) && stristr($response->mensagem, "Authorization")) { $this->newToken(); return $this->_getCidade($uf, $cidade); } if (!empty($response->erro)) { throw new Core_Exception("Facta: " . $response->mensagem); } return $response; } public function montarParamsFgtsInclusao($dados, $condicoesCredito): array { $params = (array)$condicoesCredito; try { $dataNascimento = new Zend_Date($dados['data_nascimento']); } catch (Zend_Date_Exception $e) { throw new Core_Exception("Data de nascimento ({$dados['data_nascimento']}) é inválida."); } try { $dataExpedicao = new Zend_Date($dados['data_emissao_documento']); } catch (Zend_Date_Exception $e) { throw new Core_Exception("Data de emissão do documento ({$dados['data_emissao_documento']}) é inválida."); } $params['data_nascimento'] = $dataNascimento->get('dd/MM/yyyy'); //cadastra a simulação $params['cpf'] = String_Refatorar::formatarCpf($dados['cpf']); $responseEtapa1 = $this->_etapa1Simulador($params); $params['id_simulador'] = $responseEtapa1->id_simulador; $params['nome'] = $dados['nome']; $params['sexo'] = $dados['sexo']; $params['estado_civil'] = 4; //$this->_getCodigoEstadoCivil($dados['estado_civil']); $params['rg'] = $dados['rg']; $params['estado_rg'] = $dados['uf_emissao_documento']; $params['orgao_emissor'] = $dados['orgao_emissor']; $params['data_expedicao'] = $dataExpedicao->get('dd/MM/yyyy'); $params['estado_natural'] = $dados['uf']; $cidade = $this->_getCidade($dados['uf'], $dados['cidade']); $params['cidade_natural'] = $cidade->cidade ? key($cidade->cidade) : $dados['cidade']; $params['nacionalidade'] = $dados['nacionalidade'] ? $dados['nacionalidade'] : 1; $params['pais_origem'] = ""; $params['celular'] = String_Refatorar::resetTelefone($dados['fone'], true); $params['renda'] = String_Refatorar::parseStringToFloat($dados['renda_valor']); $params['cep'] = $dados['cep']; $params['endereco'] = $dados['endereco']; $params['numero'] = !is_numeric($dados['numero']) ? 1 : $dados['numero']; $params['bairro'] = $dados['bairro']; $params['cidade'] = $cidade->cidade ? key($cidade->cidade) : $dados['cidade']; $params['estado'] = $dados['uf']; $params['nome_mae'] = $dados['nome_mae'] ? $dados['nome_mae'] : "NAO DECLARADO"; $params['nome_pai'] = $dados['nome_pai'] != '' ? $dados['nome_pai'] : "NAO DECLARADO"; $params['valor_patrimonio'] = $dados['valor_patrimonio'] ?? 2; $params['cliente_iletrado_impossibilitado'] = $dados['cliente_iletrado_impossibilitado'] ?? "N"; $params['banco'] = $dados['numero_banco']; $params['agencia'] = String_Refatorar::resetNumero((int)$dados['numero_agencia'], 4); $params['conta'] = $dados['numero_conta'] . $dados['digito_conta']; $params['tipo_conta'] = in_array($dados['cod_oper_cef'], ['013', '032']) ? "P" : "C"; //cadastra o cliente $responseEtapa2 = $this->_etapa2Simulador($params); //cadastrar proposta $params['codigo_cliente'] = $responseEtapa2->codigo_cliente; $responseEtapa3 = $this->_etapa3Simulador($params); $params['numero_proposta'] = $responseEtapa3->codigo; $params['url_formalizacao'] = $responseEtapa3->url_formalizacao ? "http://" . $responseEtapa3->url_formalizacao : ""; $retorno = []; $retorno[0] = (object)$params; return $retorno; } protected function _getCodigoEstadoCivil(string $estadoCivil) { $estadosCivis = [ "3" => "CASADO", "7" => "DESQUITADO", "2" => "DIVORCIADO", "8" => "NAO CADASTRADO", "9999" => "NAO DEFINIDO", "6" => "OUTROS", "1" => "SEPARADO", "4" => "SOLTEIRO", "9" => "UNIAO ESTAVEL", "5" => "VIUVO", ]; $estadosCivis = array_flip($estadosCivis); return $estadosCivis[$estadoCivil] ?? "9999"; } public function inclusaoFgts($dados, $condicoesCredito) { return $this->montarParamsFgtsInclusao($dados, $condicoesCredito); } protected function enviarLink($numeroContrato, $cpf, $celular, $tipoEnvio) { $endPoint = "/proposta/envio-link"; $params = ["codigo_af"=> $numeroContrato, "tipo_envio" => $tipoEnvio]; $response = $this->getResponse($endPoint, $params, "POST"); if (!empty($response->erro) && stristr($response->mensagem, "Authorization")) { $this->newToken(); return $this->enviarLink($numeroContrato, $cpf, $celular, $tipoEnvio); } return $response; } public function enviarLinkFormalizacao($numeroContrato, $cpf, $celular) { $responseSms = $this->enviarLink($numeroContrato, $cpf, $celular, "sms"); Yuppie_Log::write("Resposta do envio de link via sms para o cliente ({$cpf} | {$celular}): " . print_r($responseSms, true), $this); $this->_urlFormalizacao = $responseSms->url_formalizacao ?? null; $responseW = $this->enviarLink($numeroContrato, $cpf, $celular, "whatsapp"); Yuppie_Log::write("Resposta do envio de link via whatsapp para o cliente ({$cpf} | {$celular}): " . print_r($responseW, true), $this); $this->enviarLinkWhatsapp($numeroContrato, $cpf, $celular); } public function getUrlFormalizacao($numeroContrato, $cpf, $celular) { if (empty($this->_authorization)) { $this->getTokenApi(); } $response = $this->enviarLink($numeroContrato, $cpf, $celular, "sms"); Yuppie_Log::write("Resposta do getUrlFormalizacao: " . print_r($response, true), $this); return $response->url_formalizacao ?? ""; } public function enviarLinkWhatsapp($numeroContrato, $cpf, $celular) { if (empty($this->_urlFormalizacao)) { Yuppie_Log::write("Sem link de formalização para enviar para a proposta {$numeroContrato} do cliente {$cpf}", $this); return; } Yuppie_Log::write("Link enviado pelo whatsapp para o cliente: {$this->_urlFormalizacao} do cliente {$cpf}", $this); (new SimulacaoAbertaService())->notificarLeadLinkFormalizacao($celular, "Facta", $numeroContrato, $this->_urlFormalizacao); } public function consultaConsignado($dados) { if (empty($this->_authorization)) { $this->getTokenApi(); } try { $dataNascimento = new Zend_Date($dados['data_nascimento']); if ($dados['data_nascimento'] == ($dados['data_nascimento']*1)) { $dataNascimento = new Zend_Date($dados['data_nascimento'], "ddMMyyyy"); } } catch (Zend_Date_Exception $e) { throw new Core_Exception("Data de nascimento ({$dados['data_nascimento']}) é inválida."); } $params = [ 'cpf' => String_Refatorar::formatarCpf($dados['cpf']), 'produto' => 'D', 'convenio' => '3', 'averbador' => '3', 'opcao_valor' => '2', 'data_nascimento' => $dataNascimento->get('dd/MM/yyyy'), ]; $parametrosEspecificos = $this->_getParamsByOrgao($dados['codigo_orgao'], $dados); $params = array_merge($params, $parametrosEspecificos); $endPoint = "/proposta/operacoes-disponiveis"; $response = $this->getResponse($endPoint, $params); if (!empty($response->erro) && stristr($response->mensagem, "Authorization")) { $this->newToken(); return $this->consultaConsignado($dados); } if ($response->erro && $response->tabelas) { throw new Core_Exception("Facta: " . $response->tabelas); } $dados = array_merge($dados, $params); return $this->_respostaConsultaConsignado($dados, $response); } protected function _getParamsByOrgao($orgao, $dados) { switch ($orgao) { case 'CARTAO BENEFICIO': $retorno = $this->_getParamsCartaoBeneficio($dados); break; case 'AUXILIO BRASIL': $retorno = $this->_getParamsAuxilio($dados); break; default: $retorno = $this->_getParamsInss($dados); } return $retorno; } protected function _getParamsCartaoBeneficio($dados) { $params = [ 'tipo_operacao' => $dados['possui_representante_legal'] ? '36' : '33', 'opcao_valor' => '1', 'valor' => String_Refatorar::parseStringToFloat($dados['valor_solicitado']), 'valor_renda' => String_Refatorar::parseStringToFloat($dados['renda_valor']), 'cpf_representante ' => $dados['cpf_representante_legal'] ? String_Refatorar::formatarCpf($dados['cpf_representante_legal']) : '', 'nome_representante' => $dados['nome_representante_legal'] ?? '', ]; return $params; } protected function _getParamsAuxilio($dados) { $params = [ 'averbador' => '20124', 'valor_parcela' => (String_Refatorar::parseStringToFloat($dados['valor_solicitado']) * 40 / 100) ]; return $params; } protected function _getParamsInss($dados) { $tipoOperacao = '13'; if ($dados['margem_complementar'] && empty($dados['possui_representante_legal'])) { $tipoOperacao = '27'; } if ($dados['possui_representante_legal'] && empty($dados['margem_complementar'])) { $tipoOperacao = '35'; } if ($dados['possui_representante_legal'] && $dados['margem_complementar']) { $tipoOperacao = '37'; } $params = [ 'tipo_operacao' => $tipoOperacao, 'prazo' => 84, 'valor_parcela' => String_Refatorar::parseStringToFloat($dados['valor_solicitado']) ]; return $params; } protected function _getTabelaFinanciamento($response, $dados) { $modelTabela = new Model_Tabela(); //percorrer tabelas para achar o prazo e valor liberado maiores $retorno = current($response->tabelas); foreach ($response->tabelas as $tab) { if (in_array($dados['especie'], [87, 88]) && stristr($tab->tabela, "GOLD")) { $especie = $dados['especie']; $tabelaLoas = $modelTabela->getTabelaAutocontratacaoInss('INSS', $this->getBancoId(),['%GOLD%', '%LOAS%', "%$especie%"]); if (!empty($tabelaLoas)) { $retorno = $tab->codigoTabela == $tabelaLoas->codigo ? $tab : null; } else { if ($tab->prazo > $retorno->prazo) { $retorno = $tab; } elseif ($tab->prazo == $retorno->prazo && $tab->coeficiente > $retorno->coeficiente) { $retorno = $tab; } } continue; } elseif ($dados['tipo_beneficio'] == "LOAS_BPC" && !stristr($tab->tabela, "LOAS")) { continue; } elseif ($dados['tipo_beneficio'] != "LOAS_BPC" && stristr($tab->tabela, "LOAS")) { continue; } $tabelaNormal = $modelTabela->getTabelaAutocontratacaoInss('INSS', $this->getBancoId(), ['%%'], ['%LOAS%']); if (!empty($tabelaNormal)) { $retorno = $tab->codigoTabela == $tabelaNormal->codigo ? $tab : null; } else { if ($tab->prazo > $retorno->prazo) { $retorno = $tab; } elseif ($tab->prazo == $retorno->prazo && $tab->coeficiente > $retorno->coeficiente) { $retorno = $tab; } } } if (in_array($dados['tipo_operacao'], [33, 36])) { $retorno->contrato = $retorno->valor_maximo_saque; } return $retorno; } protected function _respostaConsultaConsignado($dados, $response) { if (empty($response->tabelas) || !empty($response->erro)) { return $response; } $retorno = $this->_getTabelaFinanciamento($response, $dados); $data = new stdClass(); $data->condicoes_credito = []; $responseCalculo = $dados; $responseCalculo['valor_financiado'] = String_Refatorar::parseStringToFloat($retorno->contrato); $responseCalculo['valor_liquido'] = String_Refatorar::parseStringToFloat($retorno->contrato); $responseCalculo['taxa_referencia_mensal'] = $retorno->taxa; $responseCalculo['login_certificado'] = $this->_loginCertificado; $responseCalculo['vendedor'] = $this->_usuario != $this->_loginCertificado ? $this->_loginCertificado : null; $responseCalculo['prazo'] = $retorno->prazo; $responseCalculo['coeficiente'] = $retorno->coeficiente; $responseCalculo['tabela'] = $retorno->tabela; $responseCalculo['codigo_tabela_financiamento'] = $retorno->codigoTabela; $responseCalculo['descricao_tabela_financiamento'] = $retorno->tabela; $responseCalculo['codigo_produto'] = 'D'; $responseCalculo['tipo_operacao'] = $dados['tipo_operacao']; $responseCalculo['averbador'] = $dados['averbador']; $responseCalculo['convenio'] = $dados['convenio']; $responseCalculo['descricao_produto'] = $retorno->tipoOperacao; $responseCalculo['valor_parcela'] = $retorno->parcela ?? $dados['valor_parcela']; $data->condicoes_credito[0] = (object)$responseCalculo; $data->origem_consulta = $this->getOrigemConsulta(); return $data; } public function montarParamsConsignadoInclusao($dados, $condicoesCredito): array { try { $dataNascimento = new Zend_Date($dados['data_nascimento']); if ($dados['data_nascimento'] == ($dados['data_nascimento']*1)) { $dataNascimento = new Zend_Date($dados['data_nascimento'], "ddMMyyyy"); } } catch (Zend_Date_Exception $e) { throw new Core_Exception("Data de nascimento ({$dados['data_nascimento']}) é inválida."); } try { $dataExpedicao = new Zend_Date($dados['data_emissao_documento']); if ($dados['data_emissao_documento'] == ($dados['data_emissao_documento']*1)) { $dataExpedicao = new Zend_Date($dados['data_emissao_documento'], "ddMMyyyy"); } } catch (Zend_Date_Exception $e) { throw new Core_Exception("Data de emissão do documento ({$dados['data_emissao_documento']}) é inválida."); } $params = [ 'produto' => $condicoesCredito['codigo_produto'], 'tipo_operacao' => $condicoesCredito['tipo_operacao'], 'averbador' => $condicoesCredito['averbador'], 'convenio' => $condicoesCredito['convenio'], 'cpf' => String_Refatorar::formatarCpf($dados['cpf']), 'data_nascimento' => $dataNascimento->get('dd/MM/yyyy'), 'codigo_tabela' => $condicoesCredito['codigo_tabela_financiamento'], 'login_certificado' => $this->_loginCertificado, 'vendedor' => $this->_usuario != $this->_loginCertificado ? $this->_loginCertificado : null, 'prazo' => $condicoesCredito['prazo'], 'valor_operacao' => number_format($condicoesCredito['valor_liquido'], 2, '.', ''), 'valor_parcela' => number_format($condicoesCredito['valor_parcela'], 2, '.', ''), 'coeficiente' => $condicoesCredito['coeficiente'], 'cpf_representante ' => $dados['cpf_representante_legal'] ? String_Refatorar::formatarCpf($dados['cpf_representante_legal']) : '', 'nome_representante' => $dados['nome_representante_legal'] ?? '', ]; //cadastra a simulação $params['valor_renda'] = String_Refatorar::parseStringToFloat($dados['renda_valor']); $responseEtapa1 = $this->_etapa1Simulador($params); $params['id_simulador'] = $responseEtapa1->id_simulador; $params['nome'] = String_Refatorar::removeAspas($dados['nome']); $params['sexo'] = $dados['sexo']; $params['estado_civil'] = 4; //$this->_getCodigoEstadoCivil($dados['estado_civil']); $params['rg'] = $dados['rg']; $params['estado_rg'] = $dados['uf_emissao_documento']; $params['orgao_emissor'] = $dados['orgao_emissor']; $params['data_expedicao'] = $dataExpedicao->get('dd/MM/yyyy'); $params['estado_natural'] = $dados['uf']; $cidade = $this->_getCidade($dados['uf'], $dados['cidade']); $params['cidade_natural'] = $cidade->cidade ? key($cidade->cidade) : $dados['cidade']; $params['nacionalidade'] = $dados['nacionalidade'] ?? 1; $params['pais_origem'] = ""; $params['celular'] = String_Refatorar::resetTelefone($dados['fone'], true); $params['renda'] = !empty($dados['renda_valor']) ? String_Refatorar::parseStringToFloat($dados['renda_valor']) : String_Refatorar::parseStringToFloat($dados['valor_solicitado']); $params['cep'] = $dados['cep']; $params['endereco'] = String_Refatorar::removeAspas($dados['endereco']); $params['numero'] = !is_numeric($dados['numero']) ? 1 : $dados['numero']; $params['bairro'] = String_Refatorar::removeAspas($dados['bairro']); $params['cidade'] = $cidade->cidade ? key($cidade->cidade) : $dados['cidade']; $params['estado'] = $dados['uf']; $params['nome_mae'] = $dados['nome_mae'] ? String_Refatorar::removeAspas($dados['nome_mae']) : "NAO DECLARADO"; $params['nome_pai'] = $dados['nome_pai'] ?? "NAO DECLARADO"; $params['valor_patrimonio'] = $dados['valor_patrimonio'] ?? 2; $params['cliente_iletrado_impossibilitado'] = $dados['escolaridade'] == "SEM_ESCOLARIDADE" ? "S" : "N"; $params['banco'] = $dados['numero_banco']; $params['agencia'] = String_Refatorar::resetNumero((int)$dados['numero_agencia'], 4); $params['conta'] = $dados['numero_conta'] . $dados['digito_conta']; $params['codigo_familiar'] = $dados['numero_beneficio']; $params['matricula'] = $dados['numero_beneficio']; $params['tipo_beneficio'] = $dados['especie']; $params['estado_beneficio'] = $dados['estado_beneficio'] ?? $dados['uf']; $params['tipo_credito_nb'] = 1; // 1=conta corrente 2 = cartão magnético //cadastra o cliente $responseEtapa2 = $this->_etapa2Simulador($params); //cadastra o representante legal if ($dados['possui_representante_legal']) { try { $dataNascimentoRep = new Zend_Date($dados['data_nascimento_representante_legal']); if ($dados['data_nascimento_representante_legal'] == ($dados['data_nascimento_representante_legal']*1)) { $dataNascimentoRep = new Zend_Date($dados['data_nascimento_representante_legal'], "ddMMyyyy"); } } catch (Zend_Date_Exception $e) { throw new Core_Exception("Data de nascimento do representante ({$dados['data_nascimento_representante_legal']}) é inválida."); } try { $dataExpedicaoRep = new Zend_Date($dados['data_emissao_documento_representante_legal']); if ($dados['data_emissao_documento_representante_legal'] == ($dados['data_emissao_documento_representante_legal']*1)) { $dataExpedicaoRep = new Zend_Date($dados['data_emissao_documento_representante_legal'], "ddMMyyyy"); } } catch (Zend_Date_Exception $e) { throw new Core_Exception("Data de emissão do documento do representante ({$dados['data_emissao_documento_representante_legal']}) é inválida."); } $rep_legal = [ 'cpf' => $dados['cpf_representante_legal'], 'nome' => $dados['nome_representante_legal'], 'sexo' => $dados['sexo_representante_legal'], 'estado_civil' => 4, 'data_nascimento' => $dataNascimentoRep->get('dd/MM/yyyy'), 'rg' => $dados['rg_representante_legal'], 'data_expedicao' => $dataExpedicaoRep->get('dd/MM/yyyy'), 'nome_mae' => $dados['nome_mae_representante_legal'], 'nome_pai' => $dados['nome_pai_representnte_legal'], ]; $params['rep_legal'] = array_merge($params, $rep_legal); $this->_etapa2RepresentanteSimulador($params['rep_legal']); } //cadastrar proposta $params['codigo_cliente'] = $responseEtapa2->codigo_cliente; $responseEtapa3 = $this->_etapa3Simulador($params); $params['numero_proposta'] = $responseEtapa3->codigo; $params['url_formalizacao'] = $responseEtapa3->url_formalizacao ? "http://" . $responseEtapa3->url_formalizacao : ""; $retorno = []; $retorno[0] = (object)$params; return $retorno; } public function inclusaoConsignado($dados, $condicoesCredito) { return $this->montarParamsConsignadoInclusao($dados, $condicoesCredito); } }
💾 保存文件
← 返回文件管理器