✏️ 正在编辑: Api.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/library/Core/Banco/Service/Master/Api.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php use Modules\SimulacaoAberta\Service\SimulacaoAbertaService; class Core_Banco_Service_Master_Api extends Core_Banco_Service_Autocontratacao_Inss { private $_indiceUsuario = 0; private $_dadosUsuarios; private $_usuarioId; private $_usuario; private $_senha; private $_idCanalVenda; private $_cpfDigitador; private $_authorization; private $_url = "https://api-parceiro.bancomaster.com.br"; private $_bancoId = null; private $_urlFormalizacao = null; private $_origemConsulta; function __construct() { $this->_bancoId = Model_Banco::bancoPorNome('BANCO MASTER'); if (empty($this->_bancoId)) { throw new Core_Exception("Banco Master não está cadastrado."); } $enable = service('config')->get()->bancos->banco_master->api ?? null; if (!$enable) { $msgErro = 'API do Banco Master não está configurada.'; throw new Core_Exception($msgErro); } $this->_dadosUsuarios = Model_UsuariosApi::getByApi('BANCO MASTER', 'autocontratacao'); if (count($this->_dadosUsuarios) == 0) { $msgErro = 'Nenhum usuário cadastrado.'; throw new Yuppie_Exception($msgErro); } $options = [ 'id' => $this->_dadosUsuarios[$this->_indiceUsuario]['id'], 'usuario' => $this->_dadosUsuarios[$this->_indiceUsuario]['usuario'], 'senha' => $this->_dadosUsuarios[$this->_indiceUsuario]['senha'], 'id_canal_venda' => $this->_dadosUsuarios[$this->_indiceUsuario]['canal_venda'], 'cpf_digitador' => $this->_dadosUsuarios[$this->_indiceUsuario]['login_certificado'], ]; $this->_origemConsulta = 'Banco Master'; $this->setOptions($options); } public function setOptions(array $options) { $this->_usuarioId = $options['id']; $this->_usuario = $options['usuario']; $this->_senha = $options['senha']; $this->_idCanalVenda = $options['id_canal_venda']; $this->_cpfDigitador = String_Refatorar::formatarCpf($options['cpf_digitador']); 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 = '/token'; $curl = curl_init(); $body = json_encode([ 'usuario' => $this->getUsuario(), 'senha' => $this->getSenha(), ]); curl_setopt_array($curl, [ CURLOPT_URL => $this->_url . $endPoint, CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_HTTPHEADER => [ "Content-Type: application/json", "User-Agent: Yuppie" ], CURLOPT_POSTFIELDS => $body, ]); $response = curl_exec($curl); curl_close($curl); $token = json_decode($response); if (empty($token->accessToken)) { Yuppie_Log::write("Consulta Banco Master geração de newToken: " . print_r($response, 1), $this); if (!$this->setProximoUsuario(true)) { throw new Core_Exception($token->message); } return $this->newToken(); } $this->_authorization = $token->accessToken; $expiraEm = Zend_Date::now(); $expiraEm->addSecond($token->expiresIn); (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'], 'id_canal_venda' => $this->_dadosUsuarios[$this->_indiceUsuario]['canal_venda'], 'cpf_digitador' => $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}", "Content-Type: application/json", "User-Agent: Yuppie" ], ]; if ($method == "GET") { $url .= '?' . http_build_query($params); $options[CURLOPT_CUSTOMREQUEST] = "GET"; } elseif ($method == "POST") { $options[CURLOPT_CUSTOMREQUEST] = "POST"; $options[CURLOPT_POSTFIELDS] = json_encode($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 Banco Master parâmetros enviados para url {$url}:" . print_r($params, true), $this); Yuppie_Log::write("Retorno do getResponse Service Banco Master:" . print_r($response, true), $this); $response = json_decode($response); if ($info['http_code'] == 401) { $this->newToken(); return $this->getResponse($endPoint, $params, $method, $header); } if ($info['http_code'] != 200 && $info['http_code'] != 204) { $retorno = new stdClass(); if (is_string($response)) { $retorno->message = $response; } elseif (is_object($response) && (!empty($response->message) || !empty($response->Mensagem))) { $retorno->message = $response->message ?? $response->Mensagem; } else { $retorno->message = "Falha de comunicação com o Banco Master"; } return $retorno; } return $response; } public function listaConvenios() { if (empty($this->_authorization)) { $this->getTokenApi(); } $endPoint = "/consignado/v1/cliente/convenio-permitido"; $response = $this->getResponse($endPoint, []); if (!empty($response->message) && stristr($response->message, "Unauthorized")) { $this->newToken(); return $this->listaConvenios(); } return $response; } public function tratarMensagemErro(int $clienteId, $retorno) { if (empty($retorno->message) && empty($retorno->condicoes_credito[0]->message)) { return null; } $mensagem = $retorno->condicoes_credito[0]->message ?? $retorno->message; $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' => "Banco Master" ]); throw new Core_Exception($mensagemRetorno['message'], $mensagemRetorno['code']); } } protected function enviarLink($numeroContrato, $cpf, $celular, $tipoEnvio) { } public function enviarLinkFormalizacao($numeroContrato, $cpf, $celular) { } public function enviarLinkWhatsapp($numeroContrato, $cpf, $celular) { } protected function _getLogo($convenio) { $logo = (new Model_DbTable_CredcestaLogo())->fetchRow(["convenio_id = ?" => $convenio]); if (empty($logo)) { return; } return $logo->logo; } protected function _getFatorConvenio($convenioId, $idade) { $multiplicadores = new Model_DbTable_CredcestaMultiplicador(); $multiplicador = $multiplicadores->fetchRow([ "convenio_id = ?" => $convenioId, "ativo = ?" => 1, "(idade_minima <= ? AND idade_maxima >= ?) OR (idade_minima IS NULL AND idade_maxima IS NULL)" => $idade, ], "prazo DESC"); if (empty($multiplicador)) { throw new Core_Exception("Nenhum multiplicador encontrado para o convênio e idade informados"); } return $multiplicador; } protected function _calcularLimite($convenioId, $renda, $idade) { $vlLimite = 0; $fator = $this->_getFatorConvenio($convenioId, $idade); $vlMargemTotal = ($renda*$fator['margem']/100); $vlMargemSaque = ($vlMargemTotal*$fator['percentual_saque']/100); $vlLimite = ($fator['multiplicador'] * $vlMargemSaque); return [ 'limite' => $vlLimite, 'prazo' => $fator['prazo'], 'fator' => $fator['multiplicador'], 'margem_total' => $vlMargemTotal, 'margem_saque' => $vlMargemSaque, 'percentual_saque' => $fator['percentual_saque'], ]; } protected function _calcularMargemLimiteSaque($convenio, $renda, $dataNascimento) { $idade = Core_Util::calcularIdade($dataNascimento, true); $limite = $this->_calcularLimite($convenio, $renda, $idade); $limite['margem'] = $limite['margem_saque']; $limite['margem_total'] = $limite['margem_total']; return $limite; } protected function _cadastrarCliente($params) { if (empty($this->_authorization)) { $this->getTokenApi(); } try { $dataNascimento = new Zend_Date($params['data_nascimento']); if ($params['data_nascimento'] == ($params['data_nascimento']*1)) { $dataNascimento = new Zend_Date($params['data_nascimento'], "ddMMyyyy"); } } catch (Zend_Date_Exception $e) { throw new Core_Exception("Data de nascimento ({$params['data_nascimento']}) é inválida."); } try { $dataEmissaoRg = new Zend_Date($params['data_emissao_documento']); if ($params['data_emissao_documento'] == ($params['data_emissao_documento']*1)) { $dataEmissaoRg = new Zend_Date($params['data_emissao_documento'], "ddMMyyyy"); } } catch (Zend_Date_Exception $e) { throw new Core_Exception("Data do documento ({$params['data_emissao_documento']}) é inválida."); } $dados = [ 'cpf' => String_Refatorar::formatarCpf($params['cpf']) ?? "", 'idConvenio' => $params['convenio_id'] ?? 0, 'gestor' => '1', 'orgao' => $params['orgao_id'] ?? "", 'dataNascimento' => $dataNascimento->get('yyyy-MM-dd') ?? "", 'matricula' => $params['numero_beneficio'] ?? "", 'matriculaAverbacao' => $params['numero_beneficio'] ?? "", 'cdLogo' => $this->_getLogo($params['convenio_id']) ?? "", 'beneficiario' => "0", 'nome' => $params['nome'] ?? "", 'nomeResumido' => "", 'flSexo' => $params['sexo'] ?? "", 'nomePai' => $params['nome_pai'] ?? "", 'nomeMmae' => $params['nome_mae'] ?? "", 'estadoCivil' => ucfirst(strtolower($params['estado_civil'])) ?? "", 'cdRg' => $params['rg'] ?? "", 'ufEmissorRg' => $params['uf_emissao_documento'] ?? "", 'emissorRg' => $params['orgao_emissor'] ?? "", 'dataExpedicaoRg' => $dataEmissaoRg->get('yyyy-MM-dd') ?? "", 'naturalidade' => strtolower($params['naturalidade']) ?? "", 'nacionalidade' => "brasileira", 'profissao' => "", 'enderecoRes' => $params['endereco'] ?? "", 'numeroRes' => $params['numero'] ?? "", 'complementoRes' => $params['complemento'] ?? "", 'bairroRes' => $params['bairro'] ?? "", 'cidadeRes' => $params['cidade'] ?? "", 'ufRes' => $params['uf'] ?? "", 'cdCepRes' => $params['cep'] ?? "", 'enderecoCom' => "", 'numeroCom' => "", 'complementoCom' => "", 'bairroCom' => "", 'cidadeCom' => "", 'ufCom' => "", 'cdCepCom' => "", 'foneResidencial' => String_Refatorar::formatarTelefone($params['fone']) ?? "", 'foneComercial' => "", 'celular' => String_Refatorar::formatarTelefone($params['fone']) ?? "", 'categoria' => "", 'codigoSituacao' => "", 'estabelecimento' => "", 'email' => "", 'departamento' => "", 'cargo' => "", 'cdBanco' => $params['numero_banco'] ?? "", 'cdAgencia' => $params['numero_agencia'] ?? "", 'cdConta' => $params['numero_conta'] ?? "", 'tipoConta' => 1, 'observacao' => "", 'situacaoServidor' => "", 'dtInicioAdmissao' => Zend_Date::now()->subYear(1)->get('yyyy-MM-ddTHH:mm:ss.S') . "Z", 'dtFinalAdmissao' => Zend_Date::now()->subYear(1)->get('yyyy-MM-ddTHH:mm:ss.S') . "Z", 'vlRenda' => String_Refatorar::parseStringToFloat($params['renda_valor']), 'dsMotivo' => "", 'salarioLiquido' => String_Refatorar::parseStringToFloat($params['renda_valor']), "possuiRepresentanteLegal" => false, "cpfRepresentanteLegal" => "", "nomeRepresentanteLegal" => "", "flPagamentoContaRepresentanteLegal" => false, "tipoConta" => 1, "dadosBeneficio" => [ "ufBeneficio" => $params['estado_beneficio'], "tipoBeneficio" => [ "numero" => $params['especie'], "nome" => "" ], "formaRecebimento" => "contaCorrente" ] ]; $endPoint = "/consignado/v2/cliente/incluir-novo"; $response = $this->getResponse($endPoint, $dados, "POST"); if (!empty($response->message) && stristr($response->message, "Unauthorized")) { $this->newToken(); return $this->_cadastrarCliente($dados); } if (!empty($response->message)) { if (!stristr($response->message, "já cadastrado")) { throw new Core_Exception("Banco Master: " . $response->message); } return true; } if (empty($response->idCliente)) { throw new Core_Exception("Cliente não cadastrado"); } return $response; } public function consultarLimiteCliente($params) { if (empty($this->_authorization)) { $this->getTokenApi(); } $cpf = String_Refatorar::formatarCpf($params['cpf']); $endPoint = "/consignado/v2/limite/consultar/{$cpf}/{$params['convenio_id']}"; $response = $this->getResponse($endPoint, [], "GET"); if (!empty($response->message) && stristr($response->message, "Unauthorized")) { $this->newToken(); return $this->consultarLimiteCliente($params); } if (empty($response->limiteDisponivel)) { throw new Core_Exception("Limite não disponível"); } return $response; } protected function _incluirLimite($params) { try { $dataNascimento = new Zend_Date($params['data_nascimento']); if ($params['data_nascimento'] == ($params['data_nascimento']*1)) { $dataNascimento = new Zend_Date($params['data_nascimento'], "ddMMyyyy"); } } catch (Zend_Date_Exception $e) { throw new Core_Exception("Data de nascimento ({$params['data_nascimento']}) é inválida."); } $margemLimite = $this->_calcularMargemLimiteSaque($params['convenio_id'], String_Refatorar::parseStringToFloat($params['renda_valor']), $dataNascimento->get('yyyy-MM-dd')); $dados = [ 'cpf' => String_Refatorar::formatarCpf($params['cpf']) ?? "", 'idConvenio' => $params['convenio_id'] ?? "", // "dsMatricula15" => $params['numero_beneficio'] ?? "", // "dsMotivo" => "0", // "vlLimiteSaqueTotal" => $margemLimite['limite'] ?? 0, // "vlLimiteParcela" => 0, // "vlMultiploSaque" => $margemLimite['fator'] ?? 0, // "vlLimiteCompraTotal" => 0, // "vlMultiploCompra" => $margemLimite['fator'] ?? 0, "vlMargem" => $margemLimite['margem_total'] ?? 0, // "vlMargemFinalCompra" => 0, // "vlMargemFinalSaque" => $margemLimite['margem'] ?? 0, // "cdLegado" => 0, // "txCompra" => 0, // "txSaque" => 0, // "vlFaixaConsumo" => 0 ]; $endPoint = "/consignado/v2/limite/incluir"; $response = $this->getResponse($endPoint, $dados, "POST"); if (!empty($response->message) && stristr($response->message, "Unauthorized")) { $this->newToken(); return $this->_incluirLimite($params); } if (empty($response->idCliente)) { throw new Core_Exception("Limite não cadastrado"); } return $response; } protected function _getCondicoesCredito($params) { $cpf = String_Refatorar::formatarCpf($params['cpf']); $endPoint = "/consignado/v2/limite/consultar/{$cpf}/{$params['convenio_id']}"; $response = $this->getResponse($endPoint, [], "GET"); if (!empty($response->message)) { if (stristr($response->message, "Unauthorized")) { $this->newToken(); return $this->_getCondicoesCredito($params); } throw new Core_Exception("Banco Master: " . $response); } $condicoesCredito = new stdClass(); $prazo = 96; foreach ($response->opcoes as $condicao) { if ($params['prazo'] == $prazo) { if ($prazo == $condicao->qtdParcelas) { $condicoesCredito->valor_liquido = $condicao->vlLimite; $condicoesCredito->valor_financiado = $condicao->vlLimite; break; } continue; } if ($params['prazo'] == $condicao->qtdParcelas) { $prazo = $condicao->qtdParcelas; $condicoesCredito->valor_liquido = $condicao->vlLimite; $condicoesCredito->valor_financiado = $condicao->vlLimite; break; } } if (empty($condicoesCredito->valor_liquido)) { throw new Core_Exception("Não foi possível encontrar limite. Tente modificar a quantidade de parcelas para encontrar uma operação viável."); } $condicoesCredito->cpf = String_Refatorar::formatarCpf($params['cpf']); $condicoesCredito->convenio_id = $params['convenio_id']; $condicoesCredito->codigo_produto = $params['convenio_id']; $condicoesCredito->descricao_produto = $params['codigo_orgao']; $condicoesCredito->codigo_tabela_financiamento = $params['orgao_id'] ?? $params['convenio_id']; $condicoesCredito->descricao_tabela_financiamento = $params['orgao_especifico'] ?? $params['codigo_orgao']; $condicoesCredito->tipo_operacao = $params['tipo_operacao']; $condicoesCredito->valor_solicitado = String_Refatorar::parseStringToFloat($params['valor_solicitado']); $condicoesCredito->prazo = $prazo; return $condicoesCredito; } protected function _simular($dados, $condicoesCredito) { $params = [ 'cpf' => $condicoesCredito['cpf'] ?? "", 'idConvenio' => $condicoesCredito['convenio_id'] ?? "", 'valor' => String_Refatorar::parseStringToFloat($dados['valor_solicitado']) ?? 0, 'parcelas' => $dados['prazo'] ?? 0, // 'valorMaximo' => $condicoesCredito['valor_financiado'] ?? 0, 'contratos' => "", // "clienteNovo" => false ]; $endPoint = "/consignado/v2/simulacao"; $response = $this->getResponse($endPoint, $params, "POST"); if (!empty($response->message)) { if (stristr($response->message, "Unauthorized")) { $this->newToken(); return $this->_simular($dados, $condicoesCredito); } throw new Core_Exception("Banco Master: " . $response->message); } if (empty($response->nsu)) { throw new Core_Exception("NSU não retornado pelo Banco Master"); } $condicoesCredito['simulacao_id'] = $response->nsu; $condicoesCredito['dataBase'] = $response->dataBase; $condicoesCredito['valorParcela'] = $response->valorParcela; $condicoesCredito['valorBruto'] = $response->valorBruto; $condicoesCredito['valorPrincipal'] = $response->valorPrincipal; $condicoesCredito['valorIOC'] = $response->valorIOC; $condicoesCredito['taxaCliente'] = $response->taxaCliente; $condicoesCredito['taxaClienteAno'] = $response->taxaClienteAno; $condicoesCredito['taxaAP'] = $response->taxaAP; $condicoesCredito['taxaCET'] = $response->taxaCET; $condicoesCredito['taxaNominal'] = $response->taxaNominal; $condicoesCredito['data1Vcto'] = $response->data1Vcto; $condicoesCredito['dataUltVcto'] = $response->dataUltVcto; $condicoesCredito['taxaCETMes'] = $response->taxaCETMes; $condicoesCredito['auditoriaDigital'] = false; return $condicoesCredito; } protected function convenioPermiteNovoCliente($convenios, $convenioSelecionado) { $permitido = false; foreach ($convenios as $convenio) { if ($convenio->idConvenio == $convenioSelecionado) { $permitido = $convenio->permiteNovoCliente ? true : false; break; } } return $permitido; } public function consultaConsignado($dados) { $retorno = new stdClass(); $retorno->origem_consulta = $this->getOrigemConsulta(); $dados['convenio_id'] = $this->consultarConvenioPorCpf($dados); $cadastroCliente = $this->consultarLimiteCliente($dados); $cadastroCliente->opcoes = $this->filtrarOpcoesCliente($dados, $cadastroCliente->opcoes); $condicoesCredito = new stdClass(); $condicoesCredito->cpf = String_Refatorar::formatarCpf($dados['cpf']); $condicoesCredito->convenio_id = $dados['convenio_id']; $condicoesCredito->codigo_produto = $dados['convenio_id']; $condicoesCredito->descricao_produto = $dados['codigo_orgao']; $condicoesCredito->codigo_tabela_financiamento = $dados['convenio_id']; $condicoesCredito->descricao_tabela_financiamento = $dados['codigo_orgao']; $condicoesCredito->tipo_operacao = $dados['tipo_operacao']; $condicoesCredito->cliente = $cadastroCliente; $retorno->condicoes_credito[0] = $condicoesCredito; return $retorno; } public function consultarConvenioPorCpf($params) { if (empty($this->_authorization)) { $this->getTokenApi(); } $cpf = String_Refatorar::formatarCpf($params['cpf']); $endPoint = "/consignado/v1/cliente/consulta-cpf?cpfRequest={$cpf}"; $response = $this->getResponse($endPoint, [], "GET"); if (!empty($response->message) && stristr($response->message, "Unauthorized")) { $this->newToken(); return $this->consultarConvenioPorCpf($params); } if (empty($response)) { throw new Core_Exception("Não encontramos nenhum benefício para o CPF informado, mas não se preocupe! Em breve entraremos em contato!"); } return current($response)->idConvenio; } public function filtrarOpcoesCliente($dadosCliente, $opcoesCliente) { foreach ($opcoesCliente as $key => $opcao) { if (empty($opcao->vlLimite)) { unset($opcoesCliente[$key]); } } if (count($opcoesCliente) <= 3) { $arrayOpcoes = []; $count = 1; foreach ($opcoesCliente as $opcao) { $arrayOpcoes[$count] = $this->montarOpcoesContratacao($dadosCliente, $opcao, $count, $count == 1 ? true : false); $count++; } $opcoesCliente = $arrayOpcoes; return $opcoesCliente; } reset($opcoesCliente); $keyOpcao3 = intval(count($opcoesCliente) / 2); $opcao2 = $this->montarOpcoesContratacao($dadosCliente, current($opcoesCliente), 2, true); $opcao1 = $this->montarOpcoesContratacao($dadosCliente, end($opcoesCliente), 1); $opcao3 = $this->montarOpcoesContratacao($dadosCliente, $opcoesCliente[$keyOpcao3], 3); $opcoesCliente = [$opcao1, $opcao2, $opcao3]; return $opcoesCliente; } public function montarOpcoesContratacao($dadosCliente, $opcao, $numOpcao, $melhorOpcao = false) { $simulacao = $this->_simularOpcoes($dadosCliente, $opcao); return [ 'numero_opcao' => $numOpcao, 'prazo' => $simulacao ? $simulacao->numeroParcelas : null, 'valor_total' => $simulacao ? $simulacao->valorLiquido : null, 'valor_parcela' => $simulacao ? $simulacao->valorParcela : null, 'melhor_opcao' => $simulacao ? $melhorOpcao : false, ]; } protected function _simularOpcoes($dados, $opcao) { $params = [ 'cpf' => $dados['cpf'], 'idConvenio' => $dados['convenio_id'] ?? "", 'valor' => $opcao->vlLimite, 'parcelas' => $opcao->qtdParcelas ]; $endPoint = "/consignado/v2/simulacao"; $response = $this->getResponse($endPoint, $params, "POST"); if (!empty($response->message)) { if (stristr($response->message, "Unauthorized")) { $this->newToken(); return $this->_simularOpcoes($dados, $opcao); } return null; } if (empty($response->nsu)) { return null; } return $response; } public function montarParamsConsignadoInclusao($dados, $condicoesCredito): array { $simulacao = $this->_simular($dados, $condicoesCredito); $params = [ 'cpf' => $condicoesCredito['cpf'] ?? "", 'nsu' => $simulacao['simulacao_id'] ?? 0, 'nome' => $dados['nome'] ?? "", 'valor' => $simulacao['valorPrincipal'] ?? 0, 'tipoSaque' => "TED", 'embossoCartao' => false, 'clienteConfirmaEnderecoEmbosso' => false, 'preVenda' => true, 'idConvenio' => $condicoesCredito['convenio_id'] ?? "", 'parcelas' => $condicoesCredito['prazo'] ?? 0, 'valorSaque' => $simulacao['valorPrincipal'] ?? 0, 'valorParcela' => $simulacao['valorParcela'] ?? 0, 'matricula' => $dados['numero_beneficio'] ?? "", 'contratos' => "0", 'alterarDadosBancarios' => false, 'taxaMes' => $simulacao['taxaCliente'] ?? 0, 'taxaAno' => $simulacao['taxaClienteAno'] ?? 0, 'taxaCetMes' => $simulacao['taxaCETMes'] ?? 0, 'taxaCetAno' => $simulacao['taxaCET'] ?? 0, 'telefone' => String_Refatorar::formatarTelefone($dados['fone']) ?? "", 'celular' => String_Refatorar::formatarTelefone($dados['fone']) ?? "", 'email' => "", 'idAverbacao' => $dados['numero_beneficio'] ?? "", 'tipoConta' => "1", 'banco' => $dados['numero_banco'] ?? "", 'agencia' => $dados['numero_agencia'] ?? "", 'conta' => $dados['numero_conta'] ?? "", 'digito' => $dados['digito_conta'] ?? "", 'idCanalVenda' => $this->_idCanalVenda, 'cpfDigitador' => $this->_cpfDigitador, 'aceitaPctVantagens' => true, 'designarBeneficiarioCredcesta' => false, 'cpfBeneficiarioCredcesta' => "", 'nomeBeneficiarioCredcesta' => "", 'parentescoBeneficiarioCredcesta' => "", 'dataNascimentoBeneficiarioCredcesta' => "", 'salarioliquido' => String_Refatorar::parseStringToFloat($dados['renda_valor']), ]; return $params; } public function inclusaoConsignado($dados, $condicoesCredito) { if (empty($this->_authorization)) { $this->getTokenApi(); } $params = $this->montarParamsConsignadoInclusao($dados, $condicoesCredito); $endPoint = "/consignado/v2/efetivar"; $response = $this->getResponse($endPoint, $params, "POST"); if (!empty($response->message)) { if (stristr($response->message, "Unauthorized")) { $this->newToken(); return $this->inclusaoConsignado($dados, $condicoesCredito); } throw new Core_Exception("Banco Master: " . $response); } $retorno = []; $retorno[0] = new stdClass(); $retorno[0]->numero_proposta = $condicoesCredito['simulacao_id']; $retorno[0]->numero_ade = $condicoesCredito['simulacao_id']; $retorno[0]->url_formalizacao = ""; return $retorno; } public function consultaIn100($dados) { $corretorId = Yuppie_Auth::getIdentity()->grupo == "Corretor" ? Yuppie_Auth::getIdentity()->id : Yuppie_Auth::getIdentity()->corretor_id; $consultaPermitida = true; if ($corretorId > 0) { $consultaPermitida = (new Model_Corretor())->temCreditoConsultas($corretorId); } if (!$consultaPermitida) { throw new Core_Exception("Não há saldos para consulta"); } if (empty($this->_authorization)) { $this->getTokenApi(); } $params = [ "cpf" => String_Refatorar::formatarCpf($dados['cpf_cliente']), "matricula" => String_Refatorar::soNumeros($dados['beneficio']), "celular" => "0", "cdAutorizacao" => "0", 'cpfRepresentanteLegal' => $dados['cpf_representante_legal'] ? String_Refatorar::formatarCpf($dados['cpf_representante_legal']) : "" ]; $endPoint = "/consignado/v3/in100-online"; $response = $this->getResponse($endPoint, $params, "POST"); if (!empty($response->message)) { if (stristr($response->message, "Unauthorized")) { $this->newToken(); return $this->consultaIn100($dados); } throw new Core_Exception("Banco Master: " . $response->message); } return $response; } public function consultaFgts($cpf, $qtdParcelas) { if (empty($this->_authorization)) { $this->getTokenApi(); } $params = [ 'cpf' => String_Refatorar::formatarCpf($cpf), 'dataNascimento' => Zend_Date::now()->subYear(30)->get('yyyy-MM-dd'), //data de aniversário do cliente 'quantidadePeriodos' => $qtdParcelas ?? 0, 'valorAdiantamentoSolicitado' => 0.00, 'simulaSeguro' => false, 'idCanalVenda' => $this->_idCanalVenda, 'usuario' => $this->_usuario, ]; $endPoint = "/fgts/v1/simulacao"; $response = $this->getResponse($endPoint, $params, "POST"); if (!empty($response->message) && stristr($response->message, "Unauthorized")) { $this->newToken(); return $this->consultaFgts($cpf, $qtdParcelas); } if (!empty($response->message)) { throw new Core_Exception("Banco Master: " . $response->message); } return $this->respostaConsultaFgts($response); } protected function respostaConsultaFgts($response) { $condicoesCredito = new stdClass(); $condicoesCredito = $response->condicoesCredito; $simulacao = current($condicoesCredito->listaCondicaoCredito); $parcelas = current($condicoesCredito->listaCondicaoCredito)->parcelas->listaParcela; $data = new stdClass(); $data->condicoes_credito = []; $data->condicoes_credito[0] = new stdClass(); $data->condicoes_credito[0]->parcelas = []; $data->condicoes_credito[0]->valor_liberado = $simulacao->valorCliente; $data->condicoes_credito[0]->valor_liquido = $simulacao->valorCliente; $data->condicoes_credito[0]->valor_financiado = $simulacao->valorBruto; $data->condicoes_credito[0]->saldo_total = $simulacao->valorCliente; $data->condicoes_credito[0]->taxa_referencia_mensal = $simulacao->taxaAPAM; $data->condicoes_credito[0]->codigo_produto = $simulacao->produto->codigoProduto; $data->condicoes_credito[0]->descricao_produto = $simulacao->produto->descricaoProduto; $data->condicoes_credito[0]->descricao_tabela_financiamento = $simulacao->produto->descricaoProduto; $data->condicoes_credito[0]->prazo = $simulacao->quantidadeParcelas; $data->condicoes_credito[0]->condicoesSimuladas = $condicoesCredito; foreach ($parcelas as $key => $parcela) { $dt = new Zend_Date(); $data->condicoes_credito[0]->parcelas[] = [ "num_parcela" => ($key + 1), "valor_parcela" => $parcela->valorParcela, "data_vencimento" => $dt->set($parcela->dataVencimento)->toString('dd/MM/yyyy'), ]; } $data->origem_consulta = $this->getOrigemConsulta(); return $data; } public function inclusaoFgts($dados, $condicoesCredito, $propostaId) { if (empty($this->_authorization)) { $this->getTokenApi(); } $params = $this->montarParamsFgtsInclusao($dados, $condicoesCredito); $endPoint = "/fgts/v1/proposta"; $response = $this->getResponse($endPoint, $params, "POST"); if (!empty($response->message)) { if (stristr($response->message, "Unauthorized")) { $this->newToken(); return $this->inclusaoFgts($dados, $condicoesCredito, $propostaId); } throw new Core_Exception("Banco Master: " . $response); } $numeroProposta = $response->numeroProposta; if (!empty($numeroProposta)) { $retorno = new stdClass(); $retorno->numero_proposta = $numeroProposta; return [$retorno]; } return $response; } public function montarParamsFgtsInclusao($dados, $condicoesCredito): array { $fone = trim(String_Refatorar::soNumeros($dados['fone'])); 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."); } $dataNow = new Zend_Date(); $params = [ "cpf" => trim(String_Refatorar::soNumeros($dados['cpf'])), "idCanal" => $this->_idCanalVenda, "cliente" => [ "nome" => trim($dados['nome']), "celular" => $fone, "cdCepRes" => $dados['cep'], "enderecoRes" => $dados['endereco'], "complementoRes" => $dados['complemento'], "numeroRes" => $dados['numero'], "bairroRes" => $dados['bairro'], "cidadeRes" => $dados['cidade'], "ufRes" => $dados['uf'], "cpf" => trim(String_Refatorar::soNumeros($dados['cpf'])), "nomeMae" => trim($dados['nome_mae']), 'cdBanco' => $dados['numero_banco'] ?? "", 'cdAgencia' => $dados['numero_agencia'] ?? "", 'cdConta' => $dados['numero_conta'] ?? "", 'tipoConta' => $dados['cod_oper_cef'] == '013' ? 13 : 1, 'cdOperacao' => $dados['cod_oper_cef'] == '013' ? 1288 : '001', 'digitoConta' => $dados['digito_conta'], 'flSexo' => $dados['sexo'], 'estadoCivil' => ucwords(strtolower($dados['estado_civil'])), 'cdRg' => $dados['rg'], 'ufEmissorRg' => $dados['uf_emissao_documento'], 'emissorRg' => $dados['orgao_emissor'], 'dataExpedicaoRg' => $dataExpedicao->get('yyyy-MM-dd') . 'T03:00:00.000Z', 'naturalidade' => $dados['cidade'], 'nacionalidade' => "brasileira", 'email' => null, 'valorRenda' => $dados['renda_valor'], "dataNascimento" => $dataNascimento->get('yyyy-MM-dd') . 'T03:00:00.000Z', "dtInicioAdmissao" => $dataNow->get('yyyy-MM-dd') . 'T03:00:00.000Z', ], "quantidadePeriodos" => $condicoesCredito['prazo'], "valorAdiantamentoSolicitado" => $condicoesCredito['valor_liquido'], "condicoesSimuladas" => $condicoesCredito['condicoesSimuladas'], "usuario" => $this->_usuario, ]; return $params; } }
💾 保存文件
← 返回文件管理器