✏️ 正在编辑: ViperRest.php
路径:
/srv/systems_dir/yuppiecred-bkp/library/Core/Service/ViperRest.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Core_Service_ViperRest extends Core_Service_ConsultaConsignado { private $_usuario = null; private $_url = 'https://vc002.vipersolucoes.com.br/ws/'; function __construct(array $options = null) { if( !$this->_verificaPermissoes() ){ $msgErro = 'Você não possui créditos para realizar consultas.'; throw new Core_Exception($msgErro); } if( !$options ){ $options = $this->getConfigData(); } $this->setOptions($options); } protected function getConfigData() { $options = array(); if( !$options ){ $config = new Zend_Config_Ini( CLIENT_PATH . '/configs/application.ini', APPLICATION_ENV); if($config->viper){ $options = $config->viper->toArray(); } else { $msgErro = 'Viper não está configurado.'; throw new Core_Exception($msgErro); } } return $options; } public function setOptions(array $options) { $this->_usuario = $options['key']; return $this; } protected function getUrl() { return $this->_url; } /** * Retorna um array com informações do cliente e do(s) empréstimo(s) * * @param int $nBeneficio * @return array */ public function getConsignadoPorBeneficio($nb, $recursion = false) { $url = $this->_url."inss/nb/".$nb; $header = ["Authorization: Basic {$this->_usuario}"]; try{ $json = $this->getResponse($url, $header); }catch(Exception $e){ return; } if( isset($json->mensagem)){ //status = 5, msg = Sem retorno das informações on-line. if($json->mensagem == 'Sem retorno das informações on-line.' && $recursion == false){ return $this->getConsignadoPorBeneficio($nb, true); }elseif($json->status == "0" && $json->mensagem == "Limite de consultas diarias atingida"){ //limite de consultas diárias atingido $this->_indiceKey++; $options = $this->getConfigData(); $this->setOptions($options); $this->getConsignadoPorBeneficio($nb, $recursion); } } $result = $this->extractDados(current($json)); return $result; } protected function extractDados($json) { $dados = []; if( count($json) > 0 ){ $informacoesBeneficio = $json->dadosPessoais; $beneficio = $this->filter($informacoesBeneficio->nb); $informacoesConta = current($json->dadosContaCorrente); $informacoesEndereco = current($json->dadosContatos->enderecos); $informacoesContato = current($json->dadosContatos->telefones); $dados['situacao'] = $informacoesBeneficio->situacao; $dados['cpf'] = $informacoesBeneficio->cpf; $dados['dib'] = !empty($informacoesBeneficio->dib) ? $informacoesBeneficio->dib : null; $dados['data_nascimento'] = !empty($informacoesBeneficio->datanascimento) ? $informacoesBeneficio->datanascimento : null; $dados['cidade'] = !empty($informacoesBeneficio->cidade) ? $informacoesBeneficio->cidade : null; $dados['uf'] = !empty($informacoesBeneficio->uf) ? $informacoesBeneficio->uf: null; $dados['matricula'] = null; $dados['beneficio'] = $beneficio; $dados['nome'] = $informacoesBeneficio->nome; $dados['mae'] = ""; $dados['nascto'] = !empty($informacoesBeneficio->datanascimento) ? $informacoesBeneficio->datanascimento : false; $dados['banco_pagto'] = $informacoesConta->banco; $dados['agencia_pagto'] = $informacoesConta->agencia; $dados['conta_pagto'] = $informacoesConta->conta; $dados['orgao_pagador'] = $informacoesConta->nomebanco; $dados['tipo_pagto'] = $informacoesConta->meio_pagto; $dados['itens']['enderecos'][] = [ 'logradouro' => $informacoesEndereco->endereco, 'numero' => '', 'complemento' => '', 'bairro' => $informacoesEndereco->bairro, 'cep' => $informacoesEndereco->cep, 'cidade' => $informacoesEndereco->cidade, 'uf' => $informacoesEndereco->uf ]; $dados['especie'] = substr($informacoesBeneficio->especie, 0, 2); $dados['especie_descricao'] = substr($informacoesBeneficio->especie, 3, strlen($informacoesBeneficio->especie)); $dados['tipo'] = $dados['especie']; $dados['competencia'] = $json->competencia; $dados['itens']['telefones'] = []; $telefones = !empty($informacoesContato->telefone) ? $informacoesContato->ddd.$informacoesContato->telefone : null; if( $telefones ){ array_push($dados['itens']['telefones'], $telefones); } $dados['rg'] = null; $dados['nit'] = null; $dados['emails'] = []; $dados['itens']['emprestimos'] = []; $consignacoes = $json->dadosEmprestimos; $totalParcelas = 0; foreach ( $consignacoes->emprestimosAtivos as $registro ) { $valorParcela = $registro->vlParcela; $dados['itens']['emprestimos'][] = [ 'situacao' => null, 'tipo' => 'EMPRESTIMO', 'banco' => substr($registro->banco, 0, 3), 'contrato' => $registro->contrato, 'vlremprestimo' => $registro->vlEmprestimo, 'inicio_contrato' => $registro->primDesc, 'fim_contrato' => $registro->ultDesc, 'prazo' => strlen($registro->pagas_total) < 5 ? substr($registro->pagas_total, 2, strlen($registro->pagas_total)) : substr($registro->pagas_total, 3, strlen($registro->pagas_total)), 'qtypagas' => strlen($registro->pagas_total) < 5 ? substr($registro->pagas_total, 0, 1) : substr($registro->pagas_total, 0, 2), 'valor_parcela' => $valorParcela, 'quitacao' => $registro->saldo, ]; $totalParcelas += $valorParcela; } $totalCartao = 0; if( isset($json->dadosReserva) ){ foreach ( $json->dadosReserva as $registro ) { $valorReservado = $registro->vlReservado; $dados['itens']['reserva_cartao'][] = [ 'situacao' => null, 'tipo' => 'RESERVA CARTAO', 'banco' => substr($registro->banco, 0, 3), 'contrato' => $registro->contrato, 'nome_banco' => substr($registro->banco, 4, strlen($registro->banco)), 'limite_cartao' => $registro->limiteCartao, 'data_inclusao' => $registro->dataInclusao, 'valor_reservado' => $valorReservado, ]; $totalCartao += $valorReservado; } } $dados['margem'] = $json->margem->margem_emprest; $dados['margem_cartao'] = $json->margem->margem_cartao; $dados['margem_cartao_rmc'] = null; try{ $extrato = $this->getDetalhamentoDataprev($beneficio); $dados['detalhamento'] = base64_decode($extrato->extrato); } catch (Exception $e){ $dados['detalhamento'] = $e->getMessage(); } $dados['complemento_acompanhamento'] = 0; $dados['imposto_renda_retido'] = 0; $dados['contribuicao_contag'] = 0; $dados['mr'] = str_replace(array( '.', ',' ), array( '', '.' ),$json->salarioBruto); $dados['obito'] = null; $dados['descontos'] = null; $dados['rep_legal'] = null; $dados['margem_rmc'] = 0; $dados['total_consignado'] = $totalParcelas; $dados['total_cartao'] = $totalCartao; $dados['origem'] = 'Viper'; $dados['orgao_consulta'] = 'INSS'; } return $dados; } /** * Retorna um array com informações do cliente e do(s) empréstimo(s) * * @param string $cpf * @return array */ public function getConsignadoPorCpf($cpf, $recursion = false) { if( !$cpf ) return; $this->setCpf($this->formatarCpf($cpf)); $url = $this->_url."inss/cpf/".$this->getCpf(); $header = ["Authorization: Basic {$this->_usuario}"]; try{ $json = $this->getResponse($url, $header); }catch(Exception $e){ return; } if( isset($json->mensagem)){ //status = 5, msg = Sem retorno das informações on-line. if($json->mensagem == 'Sem retorno das informações on-line.' && $recursion == false){ return $this->getConsignadoPorCpf($cpf, true); }elseif($json->status == "0" && $json->mensagem == "Limite de consultas diarias atingida"){ //limite de consultas diárias atingido $this->_indiceKey++; $options = $this->getConfigData(); $this->setOptions($options); $this->getConsignadoPorCpf($cpf, $recursion); } } return $this->extractBeneficios($json); } /** * @todo Ajustar para o layout do retorno do método ConsultaCpf do WS * @param string $xml * @return array */ protected function extractBeneficios($json) { $dados = []; if( count($json) > 1 ){ foreach ( $json as $registro ){ $beneficio = $this->filter($registro->nb); $dados[] = [ 'cpf' => $this->getCpf(), 'beneficio' => $beneficio, 'nome' => $registro->nome, 'data_nascimento' => null, 'especie' => $registro->especie, 'dib' => $registro->dib, 'cidade' => null, 'uf' => null, ]; } }elseif( !empty($json->dadosPessoais->situacao) ){ $beneficio = $this->filter($json->dadosPessoais->nb); $dados[] = [ 'cpf' => $this->getCpf(), 'beneficio' => $beneficio, 'nome' => $json->dadosPessoais->nome, 'data_nascimento' => $json->dadosPessoais->datanascimento, 'especie' => $json->dadosPessoais->especie, 'dib' => $json->dadosPessoais->dib, 'cidade' => null, 'uf' => null, ]; } elseif( isset($json->erro) ){ throw new Core_Exception("VIPER: " . $json->erro); } return $dados; } public function getSiape($matricula, $cpf) { if(!empty($matricula)) { $url = $this->_url . "siape/matricula/" . $matricula; }else{ $url = $this->_url . "siape/cpf/" . $this->filter($cpf); } $header = ["Authorization: Basic {$this->_usuario}"]; try{ $json = $this->getResponse($url, $header); }catch(Exception $e){ return; } $json = !empty($matricula) ? current($json) : $json; return $this->extractSiape($json); } protected function extractSiape($json) { if( isset($json->erro) ){ throw new Core_Exception("VIPER: " . $json->erro); } $dados = []; if( count($json) > 0 ){ $informacoes = $json->dadosPessoais; $informacoesConta = current($json->dadosContaCorrente); $dadosEndereco = current($json->dadosContatos->enderecos); $dadosContato = current($json->dadosContatos->telefones); $dados['beneficio'] = NULL; $dados['matricula'] = $informacoes->matricula; $dados['tipo'] = $informacoes->matricula; $dados['nome'] = $informacoes->nome; $dados['cpf'] = $informacoes->cpf; $dados['nascto'] = $informacoes->datanascimento; $dados['itens']['enderecos'][] = [ 'logradouro' => $dadosEndereco->endereco, 'numero' => '', 'complemento' => '', 'bairro' => $dadosEndereco->bairro, 'cep' => $dadosEndereco->cep, 'cidade' => $dadosEndereco->cidade, 'uf' => $dadosEndereco->uf ]; $dados['itens']['telefones'][] = !empty($dadosContato) ? $dadosContato->ddd.$dadosContato->telefone : null; $dados['emails'] = null; $dados['rg'] = null; $dados['orgao_pagador'] = $informacoesConta->banco . " - " . $informacoesConta->nomebanco; $dados['mae'] = $informacoes->nome_mae; $dados['data_inicio_pensao'] = $informacoes->data_ini_pensao; $dados['banco_pagto'] = $informacoesConta->banco; $dados['agencia_pagto'] = $informacoesConta->agencia; $dados['conta_pagto'] = $informacoesConta->conta; $dados['margem'] = $json->dados_financeiros->margem_emprestimo; $consignacoes = $json->dadosEmprestimos; $dados['itens']['emprestimos'] = array(); foreach ( $consignacoes as $registro ) { $dados['itens']['emprestimos'][] = array( 'nome_banco' =>$registro->banco, 'tipo' => 'EMPRESTIMO', 'contrato' => $registro->contrato, 'prazo' => 0, 'valor_parcela' => $registro->vlParcela, 'quitacao' => $registro->saldo, 'vlremprestimo' => 0, 'mes' => null, 'ano' => null, 'qtypagas' => null, ); } $dados['origem'] = 'Viper'; $dados['orgao_consulta'] = 'SIAPE'; $dados['mr'] = 0; $dados['margem_cartao'] = $json->dados_financeiros->margem_cartao; $dados['margem_cartao_rmc'] = 0; $dados['competencia'] = null; $dados['situacao'] = null; $dados['especie'] = null; $dados['tipo_pagto'] = null; $dados['margem_rmc'] = 0; $dados['rep_legal'] = null; $dados['obito'] = null; } return $dados; } public function getDetalhamentoDataprev($nBeneficio) { $nb = $this->filter($nBeneficio); $url = $this->_url."inss/extrato/".$nb; $header = ["Authorization: Basic {$this->_usuario}"]; try{ $json = $this->getResponse($url, $header); }catch(Exception $e){ return; } return $json; } public function getResponse($url, $header) { $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => true, CURLOPT_URL => $url, CURLOPT_HTTPHEADER => $header, CURLOPT_POST => false, CURLOPT_ENCODING => "UTF-8" ) ); $json = json_decode(curl_exec($curl)); curl_close($curl); return $json; } public function filter($value) { $filterDigits = new Zend_Filter_Digits(); return $filterDigits->filter($value); } }
💾 保存文件
← 返回文件管理器