✏️ 正在编辑: ConsigXyz.php
路径:
/srv/systems_dir/yuppiecred/library/Core/Service/ConsigXyz.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Core_Service_ConsigXyz extends Core_Service_ConsultaConsignado { private $_chave; private $_url = "http://api.fortivo.net/"; private $_indiceKey = 0; private $_countResponse = 0; protected function getConfigData() { $options = array(); $config = new Zend_Config_Ini( CLIENT_PATH . '/configs/application.ini', APPLICATION_ENV); if ($config->consigxyz) { if (is_object($config->consigxyz->key) && $config->consigxyz->key->count() > 1) { $keys = $config->consigxyz->key->toArray(); if (empty($keys[$this->_indiceKey])) { throw new Core_Exception("Limite de consultas atingido e não existem novas chaves"); } $options = [ 'key' => $keys[$this->_indiceKey] ]; } else { if ($this->_indiceKey > 0) { throw new Core_Exception("Limite de consultas atingido e não existem novas chaves"); } $options = $config->consigxyz->toArray(); } } else { $msgErro = 'CONSIG.XYZ não está configurado em seu sistema.'; throw new Core_Exception($msgErro); } return $options; } public function setOptions(array $options) { $this->_chave = $options['key']; return $this; } public function getConsignadoPorCpf($cpf) { if( empty($cpf) ){ throw new Core_Exception("CPF não identificado!"); } $this->setCpf($this->formatarCpf($cpf)); try{ $json = $this->getResponse([ 'cpf' => $this->getCpf(), ], 'Api_pesqcpf'); }catch (Exception $e){ return; } if( empty($json) ){ throw new Core_Exception("CONSIG.XYZ não retornou benefícios para este cpf."); } if( !empty($json) && $json->status == 0 ){ throw new Core_Exception("CONSIG.XYZ: " . $json->mensagem); } return $this->extractBeneficios($json); } public function getResponse($params, $api) { $this->_countResponse++; $params['chave'] = $this->_chave; $url = $this->_url . $api; $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_URL => $url, CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query($params), CURLOPT_ENCODING => "UTF-8", CURLOPT_CONNECTTIMEOUT => 0, CURLOPT_TIMEOUT => 30 ] ); Yuppie_Log::write("Consulta enviada para ConsigXyz {$url} => " . print_r($params, true), $this); $response = curl_exec($curl); $json = json_decode($response); curl_close($curl); Yuppie_Log::write("Result getResponse ConsigXyz {$url} => " . print_r($response, true), $this); if (empty($json)) { throw new Core_Exception("CONSIG.XYZ não retornou informações para o benefício."); } if ($json->status == "0" && !empty($json->msg) && stristr($json->msg, "limite")) { //se o limite de consultas diárias for atingido tenta com nova chave $this->_indiceKey++; $options = $this->getConfigData(); $this->setOptions($options); return $this->getResponse($params, $api); } if ($json->status == "0" && !empty($json->mensagem)) { if (stristr($json->mensagem, "nada consta no banco de dados") && $this->_countResponse <= 2) { sleep(1); return $this->getResponse($params, $api); } throw new Core_Exception("CONSIG.XYZ: " . $json->mensagem); } if (!empty($json->msg)) { throw new Core_Exception("CONSIG.XYZ: " . $json->msg); } return $json; } protected function extractBeneficios($json) { $dados = array(); $ns = new Zend_Session_Namespace("consulta_inss"); if( !empty($ns->consulta_inss) ){ $ns->unsetAll(); } $beneficios = $json->mensagem->contrato; foreach( $beneficios as $registro ){ $ns->consulta_inss[$registro->nb] = $registro; $dados[] = array( 'cpf' => $this->getCpf(), 'beneficio' => $registro->nb, 'nome' => null, 'data_nascimento' => null, 'especie' => $registro->esp ?? null, 'dib' => null, 'cidade' => null, 'uf' => null, ); } return $dados; } public function getConsignadoPorBeneficio($nb) { $json = $this->getResponse(['nb' => $nb], 'Api_cadastro'); return $this->extractDados($nb, $json); } protected function extractDados($nb, $json) { $dados = array( 'origem' => 'CONSIG.XYZ', 'orgao_consulta' => 'INSS', 'cpf' => $this->getCpf() ); $this->_inicializaDados($dados); $dados['beneficio'] = $nb; $informacoesBeneficio = $json->mensagem; $dados['nome'] = $informacoesBeneficio->nome; $dados['mr'] = $informacoesBeneficio->mr; $dados['nascto'] = $informacoesBeneficio->data_nasc; $dados['nit'] = $informacoesBeneficio->nit; $dados['banco_pagto'] = $informacoesBeneficio->dados_bancarios->id_banco; $dados['agencia_pagto'] = $informacoesBeneficio->dados_bancarios->id_agencia_banco; $dados['conta_pagto'] = $informacoesBeneficio->conta_corrente; $dados['orgao_pagador'] = $informacoesBeneficio->op; $dados['tipo_pagto'] = $informacoesBeneficio->meio_pagto == "CONTA CORRENTE" ? "Conta Corrente" : "Cartão Magnético"; $dados['itens']['enderecos'][] = array( 'logradouro' => $informacoesBeneficio->endereco, 'numero' => '', 'complemento' => '', 'bairro' => $informacoesBeneficio->bairro, 'cep' => $informacoesBeneficio->cep, 'cidade' => $informacoesBeneficio->munic, 'uf' => $informacoesBeneficio->uf ); $dados['itens']['enderecos'] = array_values(array_filter($dados['itens']['enderecos'], function($value) { return array_filter($value); })); $especie = explode("-", $informacoesBeneficio->especie); $dados['especie'] = trim($especie[0]); $dados['especie_descricao'] = trim($especie[1]); $dados['tipo'] = trim($especie[0]); $dados['dib'] = $informacoesBeneficio->dib; $dados['cessado'] = Zend_Date::isDate($informacoesBeneficio->dcb, "yyyy-MM-dd") ? "SIM" : "NÃO"; $dados['obito'] = Zend_Date::isDate($informacoesBeneficio->dobito, "yyyy-MM-dd") ? "SIM" : "NÃO"; $dados['cessado'] = !empty($informacoesBeneficio->dcb) ? "SIM" : "NÃO"; $dados['obito'] = !empty($informacoesBeneficio->dobito) ? "SIM" : "NÃO"; $this->_getContratos($dados); $this->_getTelefones($dados); return $dados; } protected function _getContratos(&$dados) { $json = $this->getResponse(['nb' => $dados['beneficio']], 'Api_contratos'); $informacoesBeneficio = $json->mensagem->dados_beneficio; $dados['especie'] = $informacoesBeneficio->especie; $dados['rep_legal'] = $informacoesBeneficio->possuirepresentantelegal; $dados['data_consulta'] = $json->mensagem->data_consulta; $consignacoes = $json->mensagem->contratos; if(!empty($consignacoes)){ $totalConsignado = 0; $totalCartao = 0; foreach( $consignacoes as $registro ){ $bancoId = $registro->banco; $bancoNome = Model_DbTable_BancoFebraban::getByCodigo($bancoId); if( in_array($registro->tipo_emprestimo, [98, 75]) ){ $valorParcela = $registro->vl_parcela; $dtInicio = new Zend_Date($registro->ini_desconto, 'yyyy-MM'); $dtFinal = new Zend_Date($registro->fim_desconto, 'yyyy-MM'); $parcela = explode('/', $registro->parcela_total); $dados['itens']['emprestimos'][] = array( 'situacao' => $registro->situacao, 'tipo' => "EMPRESTIMO", 'banco' => $bancoId, 'nome_banco' => $bancoNome, 'contrato' => ltrim($registro->contrato, "0"), 'vlremprestimo' => $registro->vl_emprestado, 'inicio_contrato' => $dtInicio->get('MM/yyyy'), 'fim_contrato' => $dtFinal->get('MM/yyyy'), 'prazo' => $parcela[1], 'qtypagas' => $parcela[0], 'mes' => null, 'ano' => null, 'valor_parcela' => $valorParcela, 'quitacao' => $registro->quitacao, 'tipo_emprestimo' => $registro->tipo_emprestimo, 'dt_averbacao' => $registro->dt_inclusao, 'taxa' => $this->calcularTaxaJuros( String_Refatorar::parseStringToFloat($registro->vl_emprestado), String_Refatorar::parseStringToFloat($valorParcela), String_Refatorar::parseStringToFloat($parcela[1]) ), ); $totalConsignado += $valorParcela; } if( $registro->tipo_emprestimo == 76 ){ $valorReservado = $registro->vl_reservado; $dados['itens']['reserva_cartao'][] = array( 'situacao' => $registro->situacao, 'tipo' => 'RESERVA CARTAO', 'banco' => $bancoId, 'contrato' => $registro->contrato, 'nome_banco' => $bancoNome, 'limite_cartao' => !empty($registro->limite_cartao) ? $registro->limite_cartao : 0.00, 'data_inclusao' => $registro->dt_inclusao, 'valor_reservado' => $valorReservado, ); $totalCartao += $valorReservado; } } $dados['total_consignado'] = $totalConsignado; $dados['total_cartao'] = $totalCartao; } $this->_getMargem($json, $dados); } protected function _getMargem($json, &$dados) { $informacoesBeneficios = $json->mensagem->dados_beneficio; $dados['bloq_emp'] = !empty($informacoesBeneficios->bloqemp) ? "SIM" : "NÃO"; $dados['base_calculo'] = $informacoesBeneficios->vlbasecalc; $dados['margem'] = $informacoesBeneficios->margemdispemp; $dados['mr'] = $informacoesBeneficios->valormr; $dados['perc_consig'] = $informacoesBeneficios->percmargemconsig; $dados['margem_cartao'] = $informacoesBeneficios->margemdispcartao; $dados['perc_cartao'] = $informacoesBeneficios->percmargemcartao; $dados['parcela_suspensa'] = null; $dados['margem_cartao_rmc'] = null; $dados['complemento_acompanhamento'] = 0; $dados['descontos'] = 0; $dados['imposto_renda_retido'] = 0; $dados['contribuicao_contag'] = 0; } public function getDetalhamento($nb) { $json = $this->getResponse(['nb' => $nb], 'Api_extrato'); if (empty($json->mensagem)) { return; } return $json->mensagem; } public function getDetalhamentoDataprev($nb, &$dados) { $json = $this->getResponse(['nb' => $nb], 'Api_extrato'); if (empty($json->mensagem)) { $dados['detalhamento'] = null; return; } $fileName = UPLOAD_PATH . "/{$nb}-detalhamento.pdf"; file_put_contents($fileName, base64_decode($json->mensagem)); if (file_exists($fileName)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.basename($fileName).'"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($fileName)); readfile($fileName); unlink($fileName); } } public function getExtratoCreditos($nb, &$dados) { $json = $this->getResponse(['nb' => $nb], 'Api_simulacao'); if (empty($json->mensagem)) { $dados['extrato_creditos'] = null; return; } $fileName = UPLOAD_PATH . "/{$nb}-extrato-creditos.pdf"; file_put_contents($fileName, base64_decode($json->mensagem)); if (file_exists($fileName)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.basename($fileName).'"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($fileName)); readfile($fileName); unlink($fileName); } } protected function _getTelefones(&$dados) { $response = $this->getResponse(['nb' => $dados['beneficio']], 'Api_telefones'); $json = $response->mensagem; if( $response->status == "0" ){ return; } $dados['mae'] = $json->pessoa->mae; $dados['sexo'] = $json->pessoa->sexo == 1 ? "M" : "F"; if( empty($dados['data_nasc']) ){ $dados['nascto'] = $json->pessoa->data_nasc; } if( isset($json->telefones) ){ $telefones = $json->telefones->telefone; if( count($telefones) > 1 ){ foreach( $telefones as $fone ){ $dados['itens']['telefones'][] = $fone->ddd . $fone->fone; } }else{ $dados['itens']['telefones'][] = $telefones->ddd . $telefones->fone; } } if( isset($json->enderecos) ){ $enderecos = $json->enderecos->endereco; if( count($enderecos) > 1 ){ foreach( $enderecos as $endereco ){ $dados['itens']['enderecos'][] = array( 'logradouro' => $endereco->logradouro, 'numero' => $endereco->numero, 'complemento' => $endereco->complemento, 'bairro' => $endereco->bairro, 'cep' => $endereco->cep, 'cidade' => $endereco->cidade, 'uf' => $endereco->uf ); } }else{ $dados['itens']['enderecos'][] = array( 'logradouro' => $enderecos->logradouro, 'numero' => $enderecos->numero, 'complemento' => $enderecos->complemento, 'bairro' => $enderecos->bairro, 'cep' => $enderecos->cep, 'cidade' => $enderecos->cidade, 'uf' => $enderecos->uf ); } } if( isset($json->emails) ){ $emails = $json->emails->emprego; if( count($emails) > 1 ){ foreach( $emails as $email ){ $dados['itens']['emails'][] = $email->empresa; } }else{ $dados['itens']['emails'][] = $emails->empresa; } } } public function getSiape($matricula = null, $cpf = null) { $json = $this->getResponse(['cpf' => $cpf], 'Api_siape'); $result = $this->extractSiape($json); return $result; } protected function extractSiape($json) { $informacoes = $json->mensagem; $dados['beneficio'] = NULL; $dados['matricula'] = $informacoes->consolidado->matricula; $dados['nome'] = current($informacoes->contratos)->nome ?? ""; $dados['cpf'] = current($informacoes->contratos)->cpf ?? ""; $dados['orgao_pagador'] = $informacoes->consolidado->orgao; $dados['margem'] = $informacoes->consolidado->margem_saldo; $consignacoes = $informacoes->contratos; $dados['itens']['emprestimos'] = []; foreach ( $consignacoes as $registro ) { $dados['itens']['emprestimos'][] = [ 'banco' => NULL, 'nome_banco' => $registro->banco ?? null, 'contrato' => $registro->contrato, 'fim_contrato' => null, 'prazo' => (int)$registro->pz, 'valor_parcela' => ((int)$registro->pmt)/100, 'quitacao' => 0, 'vlremprestimo' => 0, 'mes' => null, 'ano' => null, 'qtypagas' => (int)$registro->pz, 'valor_reservado' => 0, 'parcelas_restantes' => null, ]; } $dados['origem'] = 'CONSIG.XYZ'; $dados['orgao_consulta'] = 'SIAPE'; $dados['mr'] = $informacoes->consolidado->rend_bruto; $dados['margem_cartao'] = 0; $dados['margem_cartao_rmc'] = 0; $dados['competencia'] = NULL; $dados['situacao'] = $informacoes->consolidado->situacao; $dados['especie'] = NULL; $dados['tipo_pagto'] = NULL; $dados['margem_rmc'] = 0; $dados['obito'] = "NÃO"; $dados['rep_legal'] = 0; return $dados; } }
💾 保存文件
← 返回文件管理器