✏️ 正在编辑: Api.php
路径:
/srv/systems_dir/yuppiecred/library/Core/Banco/Service/Banrisul/Api.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Core_Banco_Service_Banrisul_Api extends Core_Banco_Service_Autocontratacao_Inss { private $_bancoId; private $_usuarioId; private $_usuario; private $_senha; private $_dadosUsuarios; private $_indiceUsuario = 0; private $_cpfAgente; private $_token; private $_clientToken; private $_origemConsulta; private $_url = 'https://api.techbem.com.br/integracao-corban/'; function __construct(array $options = null) { $this->_bancoId = Model_Banco::bancoPorNome('BANRISUL'); if (empty($this->_bancoId)) { throw new Core_Exception("Banco Banrisul não está cadastrado."); } $application = service('config')->get()->bancos->banrisul->api ?? null; if (empty($application)) { $msgErro = 'API do Banrisul não está configurada.'; throw new Core_Exception($msgErro); } if (!$options) { $this->_dadosUsuarios = Model_UsuariosApi::getByApi('BANRISUL', 'autocontratacao'); if (count($this->_dadosUsuarios) == 0) { $msgErro = 'Nenhum usuário de API 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'], 'cpfAgente' => $this->_dadosUsuarios[$this->_indiceUsuario]['cpf_agente'], ]; } $this->_origemConsulta = 'Banrisul'; $this->setOptions($options); } public function setOptions(array $options) { $this->_usuarioId = $options['id']; $this->_usuario = $options['usuario']; $this->_senha = $options['senha']; $this->_cpfAgente = $options['cpfAgente']; return $this; } function getUrl() { return $this->_url; } public function getOrigemConsulta() { return $this->_origemConsulta; } public function autenticacao() { $dados = [ 'usuario' => $this->_usuario, 'senha' => $this->_senha ]; $endPoint = 'Autenticacao/Autenticar'; $retorno = $this->getResponse($endPoint, $dados, true, true); if (empty($retorno['jwtToken']) || empty($retorno['apiKey'])) { if ($this->setProximoUsuario(true)) { return $this->autenticacao(); } } $this->_token = $retorno['jwtToken']; $this->_clientToken = $retorno['apiKey']; Model_UsuariosApi::gravarDataUtilizacao($this->_usuarioId); return true; } 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'], 'cpfAgente' => $this->_dadosUsuarios[$this->_indiceUsuario]['cpf_agente'], ]; $this->setOptions($options); } else { Yuppie_Log::write("Fim dos usuários.", $this); return false; } return true; } public function getResponse($endPoint, $params, $auth = false, $post = false) { $url = $this->_url . $endPoint; $header = [ "Content-Type: application/json" ]; if (!$auth) { $header = [ "Content-Type: application/json", "Authorization: Bearer {$this->_token}", "apiKey: {$this->_clientToken}" ]; } $options = [ CURLOPT_RETURNTRANSFER => true, CURLOPT_MAXREDIRS => 10, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => $post ? 'POST' : 'GET', CURLOPT_HTTPHEADER => $header, ]; if ($post) { $params = json_encode($params); $options[CURLOPT_URL] = $url; $options[CURLOPT_POSTFIELDS] = $params; } else { $url .= $auth ? '': '?' . http_build_query($params); $options[CURLOPT_URL] = $url; } $curl = curl_init(); curl_setopt_array($curl, $options); $json = curl_exec($curl); $response = json_decode($json); curl_close($curl); Yuppie_Log::write("getResponse Service Banrisul parâmetros enviados para url {$url}:" . print_r($params, true), $this); Yuppie_Log::write("Retorno do getResponse Service Banrisul:" . print_r($json, true), $this); if ($auth){ return [ 'apiKey' => $response->retorno->bemWebToken, 'jwtToken' => $response->retorno->jwtToken ]; } return $response; } public function getOrgaosSiape() { if (!$this->autenticacao()) { throw new Core_Exception('Erro na autenticação do Banrisul.'); } $params = [ 'Conveniada' => '002399' ]; $endPoint = 'Consignado/Conveniada/ListarConveniadasOrgaos'; $response = $this->getResponse($endPoint, $params); $orgaos = null; foreach ($response->retorno as $orgao) { $orgaos[$orgao->orgao] = trim($orgao->descricaoOrgao); } asort($orgaos); $return = []; foreach ($orgaos as $codigo => $descricao) { $return[] = [ 'codigo' => $codigo, 'descricao' => $descricao ]; } return $return; } public function consultaConsignado($dados) { if (!$this->autenticacao()) { throw new Core_Exception('Erro na autenticação do Banrisul.'); } $params = $this->montarParamsConsignadoConsulta($dados); $endPoint = 'Consignado/Simulacao/SimularNovo'; $response = $this->getResponse($endPoint, $params, false, true); return $this->respostaConsultaInss($response); } public function montarParamsConsignadoConsulta(array $dados) { $tabela = (new Model_Tabela())->getTabelaAutocontratacao('INSS', $this->_bancoId); 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."); } $params = [ 'conveniada' => '000020', 'valorOperacao' => null, 'prestacao' => String_Refatorar::parseStringToFloat($dados['valor_solicitado']), 'plano' => !empty($tabela[0]->nome) ? $tabela[0]->nome : null, 'prazo' => 84, 'prazos' => [], 'dataNascimento' => $dataNascimento->get('yyyy-MM-dd') . 'T00:00:00', 'proposta' => 0, 'retornarSomenteOperacoesViaveis' => true, ]; return $this->_getParamsConsultaByOrgao($dados['codigo_orgao'], $params); } protected function _getParamsConsultaByOrgao(string $orgao, $params) { switch ($orgao) { case 'SIAPE': return $this->_getParamsConsultaSiape($params); break; default: return $params; } } protected function _getParamsConsultaSiape($params) { $params['conveniada'] = '002399'; $params['valorOperacao'] = $params['prestacao']; $params['prestacao'] = null; $params['prazo'] = 96; return $params; } protected function respostaConsultaInss($response) { if (count($response->erros) > 0) { return $response; } $condicoes = current($response->retorno); $data = new stdClass(); $data->condicoes_credito = []; $data->condicoes_credito[0] = new stdClass(); $data->condicoes_credito[0]->valor_liberado = $condicoes->valorOperacao; $data->condicoes_credito[0]->valor_liquido = $condicoes->valorOperacao; $data->condicoes_credito[0]->valor_financiado = $condicoes->valorFinanciado; $data->condicoes_credito[0]->valor_parcela = $condicoes->prestacao; $data->condicoes_credito[0]->prazo = (int) $condicoes->prazo; $data->condicoes_credito[0]->taxa_referencia_mensal = $condicoes->taxaMes; $data->condicoes_credito[0]->codigo_produto = $condicoes->plano; $data->condicoes_credito[0]->descricao_produto = "Novo"; $data->condicoes_credito[0]->descricao_tabela_financiamento = $condicoes->plano; $data->condicoes_credito[0]->login_certificado = $this->_cpfAgente; $data->origem_consulta = $this->getOrigemConsulta(); return $data; } public function inclusaoConsignado($dados, $condicoesCredito, $numeroExterno) { if (!$this->autenticacao()) { throw new Core_Exception('Erro na autenticação do Banrisul.'); } $params = $this->montarParamsConsignadoInclusao($dados, $condicoesCredito); $endPoint = 'Consignado/Proposta/GravarPropostaNovo'; $response = $this->getResponse($endPoint, $params, false, true); return $this->respostaInclusaoInss($response); } public function montarParamsConsignadoInclusao(array $dados, $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 { $dataDoc = new Zend_Date($dados['data_emissao_documento']); } catch (Zend_Date_Exception $e) { throw new Core_Exception("Data de nascimento ({$dados['data_emissao_documento']}) é inválida."); } $params = [ 'cpfAgente' => $this->_cpfAgente, 'cpf' => String_Refatorar::formatarCpf($dados['cpf']), ]; $params['endereco'] = [ 'cepResidencial' => $dados['cep'], 'enderecoResidencial' => $dados['endereco'], // 'complementoEndereco' => null, 'numeroResidencial' => $dados['numero'] ?: 0, 'bairroResidencial' => $dados['bairro'], 'cidadeResidencial' => $dados['cidade'], 'ufResidencial' => $dados['uf'], // 'codigoLogradouro' => null ]; $fone = trim(String_Refatorar::soNumeros($dados['fone'])); $params['telefones'] = [ 'ddD1' => substr($fone,0,2), 'telefone1' => substr($fone, 2, strlen($fone)), 'ddD2' => null, 'telefone2' => null ]; $params['dadosBasicos'] = [ 'nome' => $dados['nome'], 'nacionalidade' => 'BRASILEIRA', 'dataNascimento' => $dataNascimento->get('yyyy-MM-dd') . 'T00:00:00', // 'ufNascimento' => null, // 'cidadeNascimento' => null, // 'sexo' => $dados['sexo'] == 'M' ? 'Masculino' : 'Feminino', 'nomeMae' => $dados['nome_mae'], // 'nomePai' => null, // 'email' => null, // 'codigoGrauInstrucao' => null, 'deficienteVisual' => false, 'codigoEstadoCivil' => $dados['estado_civil'], // 'codigoRegimeCasamento' => null, // 'nomeConjuge' => null, // 'cpfConjuge' => null, // 'dataNascimentoConjuge' => null, // 'sexoConjuge' => null, 'codigoTipoDocumentoIdentidade' => 'RG', 'numeroDocumentoIdentidade' => $dados['rg'], 'codigoOrgaoEmissor' => 'SSP', 'dataEmissaoDocumentoIdentidade' => $dataDoc->get('yyyy-MM-dd') . 'T00:00:00', // 'ufEmissaoDocumentoIdentidade' => null, // 'naturalidadeEstrangeiro' => null, ]; $tipoConta = in_array($dados['cod_oper_cef'], ["001", "002", "023", "032", "037"]) ? 'N' : 'P'; $params['rendimento'] = [ 'matricula' => $dados['numero_beneficio'], 'ufRendimento' => $dados['uf'], 'banco' => $dados['numero_banco'], 'agencia' => String_Refatorar::resetNumero(ltrim($dados['numero_agencia'],'0'), 4), 'conta' => $dados['numero_conta'], 'tipoConta' => $tipoConta, 'valorRendimento' => String_Refatorar::parseStringToFloat($dados['renda_valor']), // 'dataAdmissao' => null, 'conveniada' => '000020', 'orgao' => '00001', 'especieINSS' => $dados['especie'], // 'funcaoSIAPE' => null, // 'matriculaInstituidorSIAPE' => null, // 'nomeInstituidorSIAPE' => null, 'possuiProcuradorSIAPE' => false ]; $params['operacao'] = [ 'conveniada' => '000020', 'orgao' => '00001', 'plano' => $condicoesCredito['codigo_produto'], 'prazo' => 84, 'valorOperacao' => $condicoesCredito['valor_parcela'] ? null : $condicoesCredito['valor_liquido'], 'prestacao' => $condicoesCredito['valor_parcela'] ?: null, 'tipoFormalizacao' => null, 'possuiAssinaturaEletronica' => false, 'aceitarOperacaoSemComissao' => true ]; $parms['recebimento'] = [ 'matricula' => $dados['numero_beneficio'], 'utilizarDadosRendimento' => true, // 'banco' => null, // 'agencia' => null, // 'conta' => null, // 'tipoConta' => null, // 'formaLiberacao' => null, // 'codigoCorreioAgencia' => null ]; $params['seguro'] = [ 'prazoSeguro' => 0, 'premioSeguro' => 0, 'pessoaPoliticamenteExposta' => false ]; $params['seguro']['beneficiarios'] = []; // $params['seguro']['beneficiarios'][] = [ // 'nome' => null, // 'parentesco' => 0, // 'nomeGrauParentesco' => null, // 'participacao' => 0, // 'dataNascimento' => null, // ]; return $this->_getParamsInclusaoByOrgao($dados['codigo_orgao'], $params, $dados); } protected function _getParamsInclusaoByOrgao(string $orgao, $params, $dados) { switch ($orgao) { case 'SIAPE': return $this->paramsInclusaoSiape($params, $dados); break; default: return $params; } } protected function paramsInclusaoSiape($params, $dados) { $params['rendimento']['conveniada'] = '002399'; $params['rendimento']['orgao'] = $dados['orgao_siape']; $params['rendimento']['especieINSS'] = null; $params['rendimento']['funcaoSIAPE'] = $dados['funcao_siape']; $params['operacao']['conveniada'] = '002399'; $params['operacao']['orgao'] = $dados['orgao_siape']; $params['operacao']['prazo'] = 96; return $params; } public function respostaInclusaoInss($response) { $data = new stdClass(); $data->numero_proposta = $response->retorno->proposta; $data->tipo_operacao = 'MARGEM_LIVRE'; $data->token_proposta = $response->retorno->protocolo; $data->erros[0] = new stdClass(); $data->erros[0] = current($response->erros)->mensagem ? current($response->erros) : null; return $data; } public function tratarMensagemErro(int $clienteId, $retorno, $tipo = 'INSS') { if (empty($retorno)) { throw new Core_Exception('Nenhuma informação retornada pelo Banrisul'); } if (empty($retorno->erros[0])) { return null; } if (!empty($retorno->erros[0])) { $mensagem = current($retorno->erros)->mensagem; } else { $mensagem = $retorno->retorno; } if (empty($mensagem)) { throw new Core_Exception('Erro não informado.'); } $mensagemRetorno = $this->_erroMessageTreatment($mensagem); if (!empty($mensagemRetorno)) { throw new Core_Exception($mensagemRetorno['message'], $mensagemRetorno['code']); } } public function getUrlFormalizacao($numeroContrato) { if (!$this->autenticacao()) { throw new Core_Exception('Erro na autenticação do Banrisul.'); } $params = []; $endPoint = "Consignado/Proposta/{$numeroContrato}/AssinaturaEletronica/ObterDados"; $response = $this->getResponse($endPoint, $params, false, false); Yuppie_Log::write("Resposta do getUrlFormalizacao: " . print_r($response, true), $this); if ($response->retorno->lote->loteAssinado == false) { return $response->retorno->lote->signatarios[0]->linkAssinatura; } } public function enviarLinkFormalizacao($numeroContrato, $cpf, $celular) {} }
💾 保存文件
← 返回文件管理器