✏️ 正在编辑: Fgts.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/library/Core/Banco/Service/Bmg/Fgts.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php use Modules\SimulacaoAberta\Service\SimulacaoAbertaService; class Core_Banco_Service_Bmg_Fgts extends Core_Banco_Service_Autocontratacao_Fgts { private $_indiceUsuario = 0; private $_dadosUsuarios; private $_usuarioId; private $_usuario; private $_senha; private $_origemConsulta; private $_url = "https://api-bmg.bancobmg.com.br/consig/v1/"; private $_bancoId = null; private $_servico = '135'; private $_codigoEntidade = 4262; private $_codigoProduto = '9665'; private $_codigoLoja = null; private $_appToken = null; private $_usuarioConsig = null; private $_senhaConsig = null; function __construct() { $this->_bancoId = Model_Banco::bancoPorNome('BMG'); if(empty($this->_bancoId)){ throw new Yuppie_Exception("O banco BMG não está cadastrado."); } $application = service('config')->get()->bancos->bmgws ?? null; if (empty($application)) { $msgErro = 'API do BMG não está configurada.'; throw new Core_Exception($msgErro); } $this->_dadosUsuarios = Model_UsuariosApi::getByApi('BMG', 'autocontratacao'); if (count($this->_dadosUsuarios) == 0) { $msgErro = 'Nenhum usuário cadastrado.'; throw new Yuppie_Exception($msgErro); } $this->_appToken = $application->app_token; $options = [ 'id' => $this->_dadosUsuarios[$this->_indiceUsuario]['id'], 'usuario' => $this->_dadosUsuarios[$this->_indiceUsuario]['usuario'], 'senha' => $this->_dadosUsuarios[$this->_indiceUsuario]['senha'], 'cod_loja' => $this->_dadosUsuarios[$this->_indiceUsuario]['codigo_loja'], 'usuario_consig' => $this->_dadosUsuarios[$this->_indiceUsuario]['usuario_consig'], 'senha_consig' => $this->_dadosUsuarios[$this->_indiceUsuario]['senha_consig'], ]; $this->_origemConsulta = 'BMG'; $this->setOptions($options); } public function setOptions(array $options) { $this->_usuarioId = $options['id']; $this->_usuario = $options['usuario']; $this->_senha = $options['senha']; $this->_codigoLoja = $options['cod_loja']; $this->_usuarioConsig = $options['usuario_consig']; $this->_senhaConsig = $options['senha_consig']; 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; } public function consultaFgts($cpf, $qtdParcelas) { $dataNascimento = new Zend_Date(Zend_Date::now()); $params = [ 'login' => $this->_usuario, 'senha' => $this->_senha, 'cpfCliente' => String_Refatorar::formatarCpf($cpf), 'dataNascimento' => $dataNascimento->subYear(30)->get('yyyy-MM-dd') . "T06:00:00", 'entidade' => $this->_codigoEntidade, 'loginConsig' => '', 'loja' => $this->_codigoLoja, 'produto' => $this->_codigoProduto, 'qtdParcelas' => $qtdParcelas ?? '', 'senhaConsig' => '', 'sequencialOrgao' => '', 'servico' => $this->_servico, 'valorSolicitado' => '' ]; $endPoint = "simularsaqueaniversariofgts"; $response = json_decode($this->getResponse($endPoint, $params, "POST")); Model_UsuariosApi::gravarDataUtilizacao($this->_usuarioId); if (!empty($response->simularSaqueAniversarioFgtsResponse->error->message) && stristr($response->simularSaqueAniversarioFgtsResponse->error->message, "com.bmg.econsig.common.exception.ServiceException: Ocorreu um erro ao validar o acesso do usuário")) { if (!$this->setProximoUsuario(true)) { return $response; } return $this->consultaFgts($cpf, $qtdParcelas); } $this->_countRequest++; return $this->respostaConsultaFgts($response); } protected function getResponse($endPoint, $params, $method = 'GET') { $url = $this->_url . $endPoint; $options = [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "app-token: {$this->_appToken}", 'Content-Type: application/json' ], ]; if ($method == "GET") { $url .= '?' . http_build_query($params); $options[CURLOPT_CUSTOMREQUEST] = "GET"; } elseif ($method == "POST") { $params = json_encode($params); $options[CURLOPT_CUSTOMREQUEST] = "POST"; $options[CURLOPT_POSTFIELDS] = $params; } $options[CURLOPT_URL] = $url; $curl = curl_init(); curl_setopt_array($curl, $options); $response = curl_exec($curl); curl_close($curl); Yuppie_Log::write("getResponse Service BMG parâmetros enviados para url {$url}:" . print_r($params, true), $this); Yuppie_Log::write("Retorno do getResponse Service BMG:" . print_r($response, true), $this); return $response; } protected function respostaConsultaFgts($response) { $simulacao = new Zend_Session_Namespace('simularSaqueAniversarioFgtsResponse'); $simulacao->simularSaqueAniversarioFgtsResponse = $response->simularSaqueAniversarioFgtsResponse; $retorno = current($response)->simularSaqueAniversarioFgtsReturn; $data = new stdClass(); if (!empty($response->simularSaqueAniversarioFgtsResponse->error->message) && stristr($response->simularSaqueAniversarioFgtsResponse->error->message, "com.bmg.consig.common.exception.ImpedidoOperarException:")) { $mensagemErro = str_replace('com.bmg.consig.common.exception.ImpedidoOperarException: ', '', $response->simularSaqueAniversarioFgtsResponse->error->message); $data->simularSaqueAniversarioFgtsResponse->error->message = $mensagemErro; $data->origem_consulta = $this->getOrigemConsulta(); return $data; } $data->condicoes_credito = []; $data->condicoes_credito[0] = new stdClass(); $data->condicoes_credito[0]->parcelas = []; $data->condicoes_credito[0]->valor_liberado = $retorno->valorLiberado; $data->condicoes_credito[0]->valor_liquido = $retorno->valorLiberado; $data->condicoes_credito[0]->valor_financiado = $retorno->valorOriginal; $data->condicoes_credito[0]->valor_bruto = $retorno->valorOriginal; $data->condicoes_credito[0]->saldo_total = $retorno->valorOriginal; $data->condicoes_credito[0]->taxa_referencia_mensal = $retorno->taxaContratoAM; $data->condicoes_credito[0]->codigo_produto = "9665"; $data->condicoes_credito[0]->descricao_produto = "9665 - SAQUE FGTS NORMAL"; $data->condicoes_credito[0]->descricao_tabela_financiamento = "9665 - SAQUE FGTS NORMAL"; $data->condicoes_credito[0]->prazo = count($retorno->parcelas); foreach ($retorno->parcelas as $parcelas) { $data->condicoes_credito[0]->parcelas[] = [ "num_parcela" => $parcelas->numeroParcela, "valor_parcela" => $parcelas->parcelaOriginal, "data_vencimento" => $parcelas->dataVencimento, ]; } $data->origem_consulta = $this->getOrigemConsulta(); return $data; } public function inclusaoFgts($dados, $condicoesCredito, $propostaId) { $params = $this->montarParamsFgtsInclusao($dados, $condicoesCredito); $endPoint = "gravapropostaantecipasaquefgts"; $response = json_decode($this->getResponse($endPoint, $params, "POST")); $numeroProposta = !empty($response->gravaPropostaAntecipaSaqueFgtsResponse->gravaPropostaAntecipaSaqueFgtsReturn->numeroPropostaGerada) ? $response->gravaPropostaAntecipaSaqueFgtsResponse->gravaPropostaAntecipaSaqueFgtsReturn->numeroPropostaGerada : null; if (!empty($numeroProposta)) { $data = new stdClass(); $data->retorno->numero_proposta = $numeroProposta; $data->retorno->numero_ade = $numeroProposta; return $data; } return $response; } public function montarParamsFgtsInclusao($dados, $condicoesCredito): array { $finalidadeCredito = in_array($dados['cod_oper_cef'], ["001", "002"]) ? 1 : 2; $formaCredito = '2'; if ($dados['numero_banco'] == 318) { $finalidadeCredito = '3'; $formaCredito = '18'; } $params = [ 'login' => $this->_usuario, 'senha' => $this->_senha, 'bancoOrdemPagamento' => '0', 'codEnt' => $this->_codigoEntidade, 'codigoEntidade' => $this->_codigoEntidade . "-", 'codigoFormaEnvioTermo' => '15', 'codigoLoja' => $this->_codigoLoja, 'codigoServico' => "135", 'cpf' => $dados['cpf'], 'finalidadeCredito' => $finalidadeCredito, 'formaCredito' => $formaCredito, 'loginConsig' => $this->_usuarioConsig, 'matricula' => $dados['cpf'], 'produto' => '9665', 'senhaConsig' => $this->_senhaConsig, 'tipoDomicilioBancario' => '1', 'token' => '', 'valorRenda' => String_Refatorar::parseStringToFloat($dados['renda_valor']), 'valorSolicitado' => $condicoesCredito['valor_liberado'], 'valorSolicitadoAntecipar' => '0', ]; 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 { $dataEmissaoDoc = 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['cliente'] = [ 'cpf' => $dados['cpf'], 'cidadeNascimento' => addslashes($dados['cidade']), 'dataNascimento' => $dataNascimento->get('yyyy-MM-dd') . "T06:00:00", 'email' => '', 'estadoCivil' => 'S', 'grauInstrucao' => $dados['alfabetizado'] ? 5 : 1, 'nacionalidade' => 'Brasileira', 'nome' => substr(addslashes($dados['nome']), 0, 34), 'nomeConjuge' => '', 'nomeMae' => addslashes($dados['nome_mae']), 'nomePai' => addslashes($dados['nome_pai']), 'pessoaPoliticamenteExposta' => 'false', 'sexo' => $dados['sexo'], 'ufNascimento' => $dados['uf'], ]; $params['cliente']['identidade'] = [ 'dataEmissao' => $dataEmissaoDoc->get('yyyy-MM-dd') . "T06:00:00", 'emissor' => $dados['orgao_emissor'], 'numero' => $dados['rg'], 'tipo' => 'RG', 'uf' => $dados['uf_emissao_documento'], ]; $params['cliente']['endereco'] = [ 'bairro' => addslashes($dados['bairro']), 'cep' => $dados['cep'], 'cidade' => addslashes($dados['cidade']), 'complemento' => addslashes($dados['complemento']), 'logradouro' => substr(addslashes($dados['endereco']), 0, 35), 'numero' => $dados['numero'], 'uf' => $dados['uf'], ]; $fone = trim(String_Refatorar::soNumeros($dados['fone'])); $params['cliente']['telefone'] = [ 'ddd' => substr($fone,0,2), 'numero' => substr($fone,2, strlen($fone)) ]; $params['cliente']['celular1'] = [ 'ddd' => substr($fone,0,2), 'numero' => substr($fone,2, strlen($fone)) ]; $params['banco'] = [ 'numero' => $dados['numero_banco'] ]; $params['agencia'] = [ 'numero' => $dados['numero_agencia'], 'digitoVerificador' => $dados['digito_agencia'] ]; $params['conta'] = [ 'digitoVerificador' => $dados['digito_conta'], 'numero' => $dados['numero_conta'], 'tipoConta' => '1' ]; $simulacao = new Zend_Session_Namespace('simularSaqueAniversarioFgtsResponse'); $params['simularSaqueAniversarioFgtsResponse'] = $simulacao->simularSaqueAniversarioFgtsResponse; return ['parameters' => $params]; } /** * @param int $clienteId * @param $retorno * @return bool * @throws Exception */ public function tratarMensagemErro(int $clienteId, $retorno) { if (empty(current($retorno)->mensagemDeErro) && empty(current($retorno)->gravaPropostaAntecipaSaqueFgtsReturn->mensagemDeErro) && empty($retorno->simularSaqueAniversarioFgtsResponse->error)) { return null; } $mensagem = current($retorno)->mensagemDeErro ?? current($retorno)->gravaPropostaAntecipaSaqueFgtsReturn->mensagemDeErro; if (!empty($retorno->simularSaqueAniversarioFgtsResponse->error->message)) { $mensagem = $retorno->simularSaqueAniversarioFgtsResponse->error->message; } if (empty($mensagem)) { throw new Core_Exception('Erro não informado.'); } $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' => "BMG" ]); throw new Core_Exception($mensagemRetorno['message'], $mensagemRetorno['code']); } } public function enviarLinkFormalizacao($numeroContrato, $cpf, $celular) { } public function enviarLinkWhatsapp($promotora, $cpf, $numeroContrato, $celular) { } 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'], 'cod_loja' => $this->_dadosUsuarios[$this->_indiceUsuario]['codigo_loja'], 'usuario_consig' => $this->_dadosUsuarios[$this->_indiceUsuario]['usuario_consig'], 'senha_consig' => $this->_dadosUsuarios[$this->_indiceUsuario]['senha_consig'], ]; $this->setOptions($options); } else { Yuppie_Log::write("Fim dos usuários.", $this); return false; } return true; } }
💾 保存文件
← 返回文件管理器