diff --git a/src/config/ConfiguracaoModPEN.php b/src/config/ConfiguracaoModPEN.php index c2b14ffaf..1528c197d 100755 --- a/src/config/ConfiguracaoModPEN.php +++ b/src/config/ConfiguracaoModPEN.php @@ -36,9 +36,9 @@ public function getArrConfiguracoes() "PEN" => array( // Endereço do Web Service principal de integração com o Barramento de Serviços do PEN // Os endereços disponíveis são os seguintes (verifique se houve atualizações durante o procedimento de instalação): - // - Homologação: https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/ - // - Produção: https://api.conectagov.processoeletronico.gov.br/interoperabilidade/soap/v3/ - "WebService" => "https://homolog.api.processoeletronico.gov.br/interoperabilidade/soap/v3/", + // - Homologação: https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/ + // - Produção: https://api.conectagov.processoeletronico.gov.br/interoperabilidade/rest/v3/ + "WebService" => "https://homolog.api.processoeletronico.gov.br/interoperabilidade/rest/v3/", // Endereço do Web Service de monitoramente de pendências de trâmite no Barramento de Serviços do PEN // Configuração necessária para que o envio e recebimento de processos sejam feitas de forma dinâmica pelo sistema diff --git a/src/rn/ExpedirProcedimentoRN.php b/src/rn/ExpedirProcedimentoRN.php index 9f0d53bf8..696ff9da5 100755 --- a/src/rn/ExpedirProcedimentoRN.php +++ b/src/rn/ExpedirProcedimentoRN.php @@ -1080,6 +1080,9 @@ private function atribuirEspecieDocumentalREST($parMetaDocumento, $parDocumentoD //Atribui espécie documental definida pelo produtor do documento e registrado no PEN, caso exista if(count($arrMetaDocumentosAnteriorIndexado) > 0 && array_key_exists($parMetaDocumento['ordem'], $arrMetaDocumentosAnteriorIndexado)){ + if (is_array($arrMetaDocumentosAnteriorIndexado[$parMetaDocumento['ordem']]->especie)) { + $arrMetaDocumentosAnteriorIndexado[$parMetaDocumento['ordem']]->especie = (object) $arrMetaDocumentosAnteriorIndexado[$parMetaDocumento['ordem']]->especie; + } $numCodigoEspecie = $arrMetaDocumentosAnteriorIndexado[$parMetaDocumento['ordem']]->especie->codigo; $strNomeEspecieProdutor = mb_convert_encoding($arrMetaDocumentosAnteriorIndexado[$parMetaDocumento['ordem']]->especie->nomeNoProdutor, 'UTF-8', 'ISO-8859-1'); } @@ -1449,12 +1452,12 @@ private function obterDadosArquivo(DocumentoDTO $objDocumentoDTO, $paramStrStaAs } else { $strCaminhoAnexo = $this->objAnexoRN->obterLocalizacao($objAnexoDTO); $strNomeComponenteDigital = $objAnexoDTO->getStrNome(); - } + } $strConteudoAssinatura = null; - $nrTamanhoBytesArquivo = filesize($strCaminhoAnexo); - list($strDadosComplementares, $strMimeType) = $this->obterDadosComplementaresDoTipoDeArquivo($strCaminhoAnexo, $this->arrPenMimeTypes, $strProtocoloDocumentoFormatado); + $nrTamanhoBytesArquivo = filesize($strCaminhoAnexo); + list($strDadosComplementares, $strMimeType) = $this->obterDadosComplementaresDoTipoDeArquivo($strCaminhoAnexo, $this->arrPenMimeTypes, $strProtocoloDocumentoFormatado); $objInformacaoArquivo['NOME'] = $strNomeComponenteDigital; $objInformacaoArquivo['CONTEUDO'] = $strConteudoAssinatura; diff --git a/src/rn/ProcessoEletronicoRN.php b/src/rn/ProcessoEletronicoRN.php index 385fac31d..83971fc0c 100755 --- a/src/rn/ProcessoEletronicoRN.php +++ b/src/rn/ProcessoEletronicoRN.php @@ -1622,12 +1622,17 @@ public static function getHashFromMetaDadosREST($objMeta) private function montarDadosMaisDeUmComponenteDigital($objDocumento, $parStrNumeroRegistro, $parNumIdentificacaoTramite, $parObjProtocolo, $parObjComponentesDigitaisSolicitados) { - $arrayComponentesDigitais = $objDocumento->componenteDigital; + $arrayComponentesDigitais = $objDocumento->componentesDigitais; $arrObjComponenteDigitalDTO = array(); $arrayTeste = array(); $contComponentes = 0; foreach ($arrayComponentesDigitais as $indice => $objComponenteDigital){ + + if (is_array($objComponenteDigital)) { + $objComponenteDigital = (object) $objComponenteDigital; + } + $contComponentes++; $objComponenteDigitalDTO = new ComponenteDigitalDTO(); $objComponenteDigitalDTO->setStrNumeroRegistro($parStrNumeroRegistro); @@ -1646,8 +1651,8 @@ private function montarDadosMaisDeUmComponenteDigital($objDocumento, $parStrNume } - $objComponenteDigitalDTO->setStrNome($objComponenteDigital->nome); - $strHashConteudo = static::getHashFromMetaDados($objComponenteDigital->hash); + $objComponenteDigitalDTO->setStrNome($objComponenteDigital->nome); + $strHashConteudo = static::getHashFromMetaDados($objComponenteDigital->hash); $objComponenteDigitalDTO->setStrHashConteudo($strHashConteudo); $objComponenteDigitalDTO->setStrAlgoritmoHash(self::ALGORITMO_HASH_DOCUMENTO); @@ -1656,19 +1661,18 @@ private function montarDadosMaisDeUmComponenteDigital($objDocumento, $parStrNume $objComponenteDigitalDTO->setStrDadosComplementares($objComponenteDigital->dadosComplementaresDoTipoDeArquivo); //Registrar componente digital necessita ser enviado pelo trâmite específico //TODO: Teste $parObjComponentesDigitaisSolicitados aqui - if(isset($parObjComponentesDigitaisSolicitados)){ - $arrObjItensSolicitados = is_array($parObjComponentesDigitaisSolicitados->processo) ? $parObjComponentesDigitaisSolicitados->processo : array($parObjComponentesDigitaisSolicitados->processo); - - foreach ($arrObjItensSolicitados as $objItemSolicitado) { - if(!is_null($objItemSolicitado)){ - $objItemSolicitado->hash = is_array($objItemSolicitado->hash) ? $objItemSolicitado->hash : array($objItemSolicitado->hash); - - if($objItemSolicitado->protocolo == $objComponenteDigitalDTO->getStrProtocolo() && in_array($strHashConteudo, $objItemSolicitado->hash) && !$objDocumento->retirado) { - $objComponenteDigitalDTO->setStrSinEnviar("S"); + if(isset($parObjComponentesDigitaisSolicitados)) { + $arrObjItensSolicitados = isset($parObjComponentesDigitaisSolicitados) ? $parObjComponentesDigitaisSolicitados : array($parObjComponentesDigitaisSolicitados); + foreach ($arrObjItensSolicitados as $objItemSolicitado) { + if(!is_null($objItemSolicitado)){ + $objItemSolicitado['hashes'] = is_array($objItemSolicitado['hashes']) ? $objItemSolicitado['hashes'] : array($objItemSolicitado['hashes']); + + if($objItemSolicitado['protocolo'] == $objComponenteDigitalDTO->getStrProtocolo() && in_array($strHashConteudo, $objItemSolicitado['hashes']) && !$objDocumento->retirado) { + $objComponenteDigitalDTO->setStrSinEnviar("S"); + } } } } - } //TODO: Avaliar dados do tamanho do documento em bytes salvo na base de dados $objComponenteDigitalDTO->setNumTamanho($objComponenteDigital->tamanhoEmBytes); @@ -1736,7 +1740,7 @@ private function montarDadosComponenteDigital($parStrNumeroRegistro, $parNumIden //Registrar componente digital necessita ser enviado pelo trâmite específico //TODO: Teste $parObjComponentesDigitaisSolicitados aqui if(isset($parObjComponentesDigitaisSolicitados)){ - $arrObjItensSolicitados = is_array($parObjComponentesDigitaisSolicitados) ? $parObjComponentesDigitaisSolicitados : array($parObjComponentesDigitaisSolicitados); + $arrObjItensSolicitados = isset($parObjComponentesDigitaisSolicitados) ? $parObjComponentesDigitaisSolicitados : array($parObjComponentesDigitaisSolicitados); foreach ($arrObjItensSolicitados as $objItemSolicitado) { if(!is_null($objItemSolicitado)){ $objItemSolicitado['hashes'] = is_array($objItemSolicitado['hashes']) ? $objItemSolicitado['hashes'] : array($objItemSolicitado['hashes']); @@ -2413,6 +2417,15 @@ public static function comparacaoOrdemAjustadaDocumentos($parDocumento1, $parDoc public static function comparacaoOrdemDocumentos($parDocumento1, $parDocumento2) { + + if (is_array($parDocumento1)) { + $parDocumento1 = (object) $parDocumento1; + } + + if (is_array($parDocumento2)) { + $parDocumento2 = (object) $parDocumento2; + } + $numOrdemDocumento1 = intval($parDocumento1->ordem); $numOrdemDocumento2 = intval($parDocumento2->ordem); return $numOrdemDocumento1 - $numOrdemDocumento2; @@ -2420,6 +2433,14 @@ public static function comparacaoOrdemDocumentos($parDocumento1, $parDocumento2) public static function comparacaoOrdemComponenteDigitais($parComponenteDigital1, $parComponenteDigital2) { + if (is_array($parComponenteDigital1)) { + $parComponenteDigital1 = (object) $parComponenteDigital1; + } + + if (is_array($parComponenteDigital2)) { + $parComponenteDigital2 = (object) $parComponenteDigital2; + } + $numOrdemComponenteDigital1 = intval($parComponenteDigital1->ordem); $numOrdemComponenteDigital2 = intval($parComponenteDigital2->ordem); return $numOrdemComponenteDigital1 - $numOrdemComponenteDigital2; diff --git a/src/rn/ReceberProcedimentoRN.php b/src/rn/ReceberProcedimentoRN.php index 1230bf31e..7e472623c 100755 --- a/src/rn/ReceberProcedimentoRN.php +++ b/src/rn/ReceberProcedimentoRN.php @@ -2960,10 +2960,14 @@ private static function validaTamanhoMaximoAnexo($nomeArquivo, $nrTamanhMegaByte private function atribuirTipoProcedimentoRelacinado($numIdTipoProcedimento, $numIdProcedimento, $strProcessoNegocio) { + $origem = null; + if (isset($this->destinatarioReal->numeroDeIdentificacaoDaEstrutura) && !empty($this->destinatarioReal->numeroDeIdentificacaoDaEstrutura)) { + $origem = $this->destinatarioReal->numeroDeIdentificacaoDaEstrutura; + } $objAtributoAndamentoDTOAnterior = new AtributoAndamentoDTO(); $objAtributoAndamentoDTOAnterior->setStrNome('TIPO_PROCESSO_ANTERIOR'); $objAtributoAndamentoDTOAnterior->setStrValor($strProcessoNegocio); - $objAtributoAndamentoDTOAnterior->setStrIdOrigem($this->destinatarioReal->numeroDeIdentificacaoDaEstrutura); + $objAtributoAndamentoDTOAnterior->setStrIdOrigem($origem ); $arrObjAtributoAndamentoDTO[] = $objAtributoAndamentoDTOAnterior; $objTipoProcedimentoRN = new TipoProcedimentoRN(); diff --git a/tests_sei41/funcional/tests/TramiteRecebimentoDocumentoAnexadoTest.php b/tests_sei41/funcional/tests/TramiteRecebimentoDocumentoAnexadoTest.php index ade7952e3..d31a1b588 100755 --- a/tests_sei41/funcional/tests/TramiteRecebimentoDocumentoAnexadoTest.php +++ b/tests_sei41/funcional/tests/TramiteRecebimentoDocumentoAnexadoTest.php @@ -25,6 +25,8 @@ class TramiteRecebimentoDocumentoAnexadoTest extends FixtureCenarioBaseTestCase public static $documentoTeste4; public static $documentoTeste5; + public static $conteudoCompoonenteDigital; + /** * Teste de envio de metadados do processo contendo documentos anexados * @@ -51,24 +53,25 @@ public function test_envio_processo_com_documento_anexado() self::$documentoTeste4 = $this->gerarDadosDocumentoExternoTeste(self::$remetente); self::$documentoTeste5 = $this->gerarDadosDocumentoExternoTeste(self::$remetente); - // Instanciar objeto de teste utilizando o BeSimpleSoap $localCertificado = self::$remetente['LOCALIZACAO_CERTIFICADO_DIGITAL']; $senhaCertificado = self::$remetente['SENHA_CERTIFICADO_DIGITAL']; self::$servicoPEN = $this->instanciarApiDeIntegracao($localCertificado, $senhaCertificado); // Inicia o envio dos três primeiros documentos $arrDocumentosPrimeiroEnvio = array(self::$documentoTeste1, self::$documentoTeste2, self::$documentoTeste3); + $processoTeste = $this->construirMetadadosProcessoTeste(self::$processoTeste, $arrDocumentosPrimeiroEnvio); - $novoTramite = $this->enviarMetadadosProcesso(self::$servicoPEN, self::$remetente, self::$destinatario, $processoTeste); - $this->enviarComponentesDigitaisDoTramite(self::$servicoPEN, $novoTramite, $processoTeste); - $reciboTramite = $this->receberReciboEnvio(self::$servicoPEN, $novoTramite); + $novoTramite = $this->enviarMetadadosProcesso(self::$remetente, self::$destinatario, $processoTeste); + $this->enviarComponentesDigitaisDoTramite($novoTramite, $processoTeste); + $reciboTramiteEnvio = $this->receberReciboEnvio($novoTramite); //Verificar recebimento de novo processo administrativo contendo documento avulso enviado $this->assertNotNull($novoTramite); - $this->assertNotNull($reciboTramite); + $this->assertNotNull($reciboTramiteEnvio); $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTeste, $arrDocumentosPrimeiroEnvio, self::$destinatario); - $reciboTramite = $this->receberReciboTramite(self::$servicoPEN, $novoTramite); + $reciboTramiteRecebido = $this->receberReciboTramite($novoTramite); + $this->assertNotNull($reciboTramiteRecebido); } /** @@ -108,92 +111,84 @@ public function test_verificar_processo_com_documento_anexado_apos_devolucao() } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => PEN_ENDERECO_WEBSERVICE, + 'timeout' => 40, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; } - private function enviarMetadadosProcesso($servicoPEN, $remetente, $destinatario, $processoTeste) + private function enviarMetadadosProcesso($remetente, $destinatario, $processoTeste) { - $parametros = new stdClass(); - $parametros->novoTramiteDeProcesso = new stdClass(); - $parametros->novoTramiteDeProcesso->cabecalho = $this->construirCabecalhoTeste($remetente, $destinatario); - $parametros->novoTramiteDeProcesso->processo = $processoTeste; - return $servicoPEN->enviarProcesso($parametros); + $parametros = []; + $parametros['cabecalho'] = $this->construirCabecalhoTeste($remetente, $destinatario); + $parametros['processo'] = $processoTeste; + + return $this->enviarProcessoAPI($parametros); } - private function enviarComponentesDigitaisDoTramite($servicoPEN, $novoTramite, $processoTeste) + private function enviarComponentesDigitaisDoTramite($novoTramite, $processoTeste) { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - foreach ($processoTeste['documento'] as $documentoTeste) { - foreach ($documentoTeste['componenteDigital'] as $item) { - $dadosDoComponenteDigital = new stdClass(); - $dadosDoComponenteDigital->protocolo = $processoTeste['protocolo']; - $dadosDoComponenteDigital->hashDoComponenteDigital = $item['valorHash']; - $dadosDoComponenteDigital->conteudoDoComponenteDigital = new SoapVar($item['conteudo'], XSD_BASE64BINARY); - $dadosDoComponenteDigital->ticketParaEnvioDeComponentesDigitais = $dadosTramite->ticketParaEnvioDeComponentesDigitais; - - $parametros = new stdClass(); - $parametros->dadosDoComponenteDigital = $dadosDoComponenteDigital; - $servicoPEN->enviarComponenteDigital($parametros); + foreach ($processoTeste['documentos'] as $documentoTeste) { + foreach ($documentoTeste['componentesDigitais'] as $item) { + $dadosDoComponenteDigital = []; + $dadosDoComponenteDigital['protocolo'] = $processoTeste['protocolo']; + $dadosDoComponenteDigital['hashDoComponenteDigital'] = $item['hash']['conteudo']; + $dadosDoComponenteDigital['ticketParaEnvioDeComponentesDigitais'] = $novoTramite['ticketParaEnvioDeComponentesDigitais']; + + $parametros['dadosDoComponenteDigital'] = $dadosDoComponenteDigital; + $this->enviarComponenteDigitalAPI($parametros); } } + } - private function receberReciboEnvio($servicoPEN, $novoTramite) + private function receberReciboEnvio($novoTramite) { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->IDT; - return $servicoPEN->receberReciboDeEnvio($parametros); + $idt = $novoTramite['IDT']; + return $this->receberReciboDeEnvioAPI($idt); } - private function receberReciboTramite($servicoPEN, $novoTramite) + + private function receberReciboTramite($novoTramite) { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->IDT; - return $servicoPEN->receberReciboDeTramite($parametros); + $idt = $novoTramite['IDT']; + return $this->receberReciboDeTramiteAPI($idt); } private function construirCabecalhoTeste($remetente, $destinatario) { - $cabecalho = new stdClass(); - $cabecalho->remetente = new stdClass(); - $cabecalho->remetente->identificacaoDoRepositorioDeEstruturas = $remetente['ID_REP_ESTRUTURAS']; - $cabecalho->remetente->numeroDeIdentificacaoDaEstrutura = $remetente['ID_ESTRUTURA']; - - $cabecalho->destinatario = new stdClass(); - $cabecalho->destinatario->identificacaoDoRepositorioDeEstruturas = $destinatario['ID_REP_ESTRUTURAS']; - $cabecalho->destinatario->numeroDeIdentificacaoDaEstrutura =$destinatario['ID_ESTRUTURA']; - - $cabecalho->urgente = false; - $cabecalho->motivoDaUrgencia = null; - $cabecalho->obrigarEnvioDeTodosOsComponentesDigitais = false; + $cabecalho = [ + 'remetente' => [ + 'identificacaoDoRepositorioDeEstruturas' => $remetente['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $remetente['ID_ESTRUTURA'], + ], + 'destinatario' => [ + 'identificacaoDoRepositorioDeEstruturas' => $destinatario['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $destinatario['ID_ESTRUTURA'], + ], + 'enviarApenasComponentesDigitaisPendentes' => false + ]; + return $cabecalho; } public function gerarDadosProcessoTeste($contextoProducao) { $processoTeste = parent::gerarDadosProcessoTeste($contextoProducao); + $processoTeste['PROTOCOLO'] = sprintf('99999.%06d/2020-00', rand(0, 999999)); $processoTeste['INTERESSADOS'] = trim(substr($processoTeste['INTERESSADOS'], 0, 15)); $processoTeste['DESCRICAO'] = trim(substr($processoTeste['DESCRICAO'], 0, 10)); return $processoTeste; @@ -211,7 +206,8 @@ private function construirMetadadosProcessoTeste($processoTeste, $documentosTest { $metadadosDocumentos = array(); foreach ($documentosTeste as $indice => $documentoTeste) { - $metadadosDocumentos[] = $this->construirMetadadosDocumentoTeste($documentoTeste, $indice + 1); + $documentos = $this->construirMetadadosDocumentoTeste($documentoTeste, $indice + 1); + $metadadosDocumentos[] = $documentos['documentoDoProcesso']; } return array( @@ -223,11 +219,14 @@ private function construirMetadadosProcessoTeste($processoTeste, $documentosTest 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', 'produtor' => array( 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), + 'tipo' => "orgaopublico", ), - 'interessado' => array( - 'nome' => $processoTeste['INTERESSADOS'], + 'interessados' => array( + [ + "nome" => $processoTeste['INTERESSADOS'], + ] ), - 'documento' => $metadadosDocumentos, + 'documentos' => $metadadosDocumentos, ); } @@ -246,16 +245,17 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen $nomeArquivo = basename($caminhoArquivo); $componentes[] = array( 'nome' => $nomeArquivo, - 'hash' => new SoapVar("$hashDocumento", XSD_ANYXML), + 'hash' => [ + 'algoritmo' => 'SHA256', + 'conteudo' => $hashDocumento + ], 'tipoDeConteudo' => 'txt', - 'mimeType' => 'text/plain', + 'mimeType' => 'application/pdf', 'tamanhoEmBytes' => $tamanhoDocumento, 'ordem' => $ordemComponente, - - // Chaves abaixo adicionadas apenas para simplificação dos testes - 'valorHash' => $hashDocumento, - 'conteudo' => $conteudo, ); + + self::$conteudoCompoonenteDigital[$hashDocumento] = $conteudo; } finally { fclose($fp); } @@ -268,10 +268,9 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen 'dataHoraDeProducao' => '2017-05-15T03:41:13', 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', 'ordem' => $ordemDocumento, - 'produtor' => array( 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), - 'numeroDeIdentificacao' => '999999', + "tipo" => "orgaopublico" ), 'especie' => array( @@ -279,17 +278,127 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen 'nomeNoProdutor' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1') ), - 'interessado' => array( - 'nome' => $documentoTeste['INTERESSADOS'], + 'interessados' => array( + [ + "nome" => $documentoTeste['INTERESSADOS'], + "tipo" => "fisica" + ] ), - 'componenteDigital' => $componentes, + 'componentesDigitais' => $componentes, + ); + + $componenteEnvio = array( + 'hashDocumento' => $hashDocumento, + 'conteudo' => $conteudo ); if(!is_null($documentoTeste['ORDEM_DOCUMENTO_REFERENCIADO'])){ $documentoDoProcesso['ordemDoDocumentoReferenciado'] = intval($documentoTeste['ORDEM_DOCUMENTO_REFERENCIADO']); } - return $documentoDoProcesso; + return array( + 'documentoDoProcesso' => $documentoDoProcesso, + 'componenteEnvio' => $componenteEnvio + ); + } + + public function enviarComponenteDigitalAPI($parametros) + { + try { + + $arrParametros = $parametros['dadosDoComponenteDigital']; + $idTicketDeEnvio = $arrParametros['ticketParaEnvioDeComponentesDigitais']; + + $protocolo = $arrParametros['protocolo']; + $hashDoComponenteDigital = $arrParametros['hashDoComponenteDigital']; + + $conteudoComponenteDigital = self::$conteudoCompoonenteDigital[$hashDoComponenteDigital]; + + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudoComponenteDigital, + 'filename' => 'conteudo.html', + 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $response = self::$servicoPEN->request('PUT', $endpoint, $arrOptions); + + return $response; + + } catch (\Exception $e) { + $mensagem = "Falha no envio de de componentes no documento"; + $this->fail($mensagem . " - " . $e->getMessage()); + } + } + + public function receberReciboDeEnvioAPI($parNumIdTramite) + { + $endpoint = "tramites/{$parNumIdTramite}/recibo-de-envio"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $response = self::$servicoPEN->request('GET', $endpoint, [ + 'query' => $parametros + ]); + + return json_decode($response->getBody(), true); + } catch (\Exception $e) { + $mensagem = "Falha no recebimento de recibo de trâmite de envio."; + $this->fail($mensagem . " - " . $e->getMessage()); + } + } + + public function enviarProcessoAPI($parametros) + { + try { + $endpoint = "tramites/processo"; + + $response = self::$servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + + return json_decode($response->getBody(), true); + + } catch (\Exception $e) { + $mensagem = "Falha no envio de processo"; + $this->fail($mensagem . " - " . $e->getMessage()); + } + } + + + + public function receberReciboDeTramiteAPI($parNumIdTramite) + { + $endpoint = "tramites/{$parNumIdTramite}/recibo"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $response = self::$servicoPEN->request('GET', $endpoint, [ + 'json' => $parametros + ]); + + return json_decode($response->getBody(), true); + + } catch (\Exception $e) { + $mensagem = "Falha no recebimento de recibo de trâmite."; + $this->fail($mensagem . " - " . $e->getMessage()); + } } } diff --git a/tests_sei41/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php b/tests_sei41/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php index 37b1ee11b..1a294890f 100755 --- a/tests_sei41/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php +++ b/tests_sei41/funcional/tests/TramiteRecebimentoDocumentoAvulsoTest.php @@ -284,6 +284,7 @@ public function enviarDocumentoAPI($parametros) } catch (\Exception $e) { $mensagem = "Falha no envio de documento avulso"; + $this->fail($mensagem . " - " . $e->getMessage()); } } @@ -324,6 +325,7 @@ public function enviarComponenteDigitalAPI($parametros) } catch (\Exception $e) { $mensagem = "Falha no envio de de componentes no documento"; + $this->fail($mensagem . " - " . $e->getMessage()); } } @@ -343,6 +345,7 @@ public function receberReciboDeEnvioAPI($parNumIdTramite) return json_decode($response->getBody(), true); } catch (\Exception $e) { $mensagem = "Falha no recebimento de recibo de trâmite de envio."; + $this->fail($mensagem . " - " . $e->getMessage()); } } @@ -355,7 +358,6 @@ private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) $strClientGuzzle = new GuzzleHttp\Client([ 'base_uri' => PEN_ENDERECO_WEBSERVICE, - 'handler' => GuzzleHttp\HandlerStack::create(), 'timeout' => 5.0, 'headers' => $arrheaders, 'cert' => [$localCertificado, $senhaCertificado], diff --git a/tests_sei41/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php b/tests_sei41/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php index b612f426f..0315dc2fa 100755 --- a/tests_sei41/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php +++ b/tests_sei41/funcional/tests/TramiteRecebimentoInteressadosDuplicadosTest.php @@ -118,6 +118,14 @@ private function receberReciboEnvio($novoTramite) return $this->receberReciboDeEnvioAPI($idt); } + private function receberReciboTramite($servicoPEN, $novoTramite) + { + $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; + $parametros = new StdClass(); + $parametros->IDT = $dadosTramite->IDT; + return $servicoPEN->receberReciboDeTramite($parametros); + } + private function construirCabecalhoTeste($remetente, $destinatario) { $cabecalho = [ @@ -267,6 +275,7 @@ public function enviarProcessoAPI($parametros) } catch (\Exception $e) { $mensagem = "Falha no envio de processo"; + $this->fail($mensagem . " - " . $e->getMessage()); } } @@ -307,6 +316,7 @@ public function enviarComponenteDigitalAPI($parametros) } catch (\Exception $e) { $mensagem = "Falha no envio de de componentes no documento"; + $this->fail($mensagem . " - " . $e->getMessage()); } } @@ -325,6 +335,7 @@ public function receberReciboDeEnvioAPI($parNumIdTramite) return json_decode($response->getBody(), true); } catch (\Exception $e) { $mensagem = "Falha no recebimento de recibo de trâmite de envio."; + $this->fail($mensagem . " - " . $e->getMessage()); } } } diff --git a/tests_sei41/funcional/tests/TramiteRecebimentoMultiplosComponentesDigitais.php b/tests_sei41/funcional/tests/TramiteRecebimentoMultiplosComponentesDigitais.php index d1036ae72..fb90d23cb 100755 --- a/tests_sei41/funcional/tests/TramiteRecebimentoMultiplosComponentesDigitais.php +++ b/tests_sei41/funcional/tests/TramiteRecebimentoMultiplosComponentesDigitais.php @@ -22,6 +22,8 @@ class TramiteRecebimentoMultiplosComponentesDigitais extends FixtureCenarioBaseT public static $servicoPEN; public static $documentoZip; + public static $conteudoCompoonenteDigital; + /** @@ -68,17 +70,17 @@ public function test_recebimento_processo_com_3_componentes_digitais() // Simular um trâmite chamando a API do Barramento diretamente $metadadosProcessoTeste = $this->construirMetadadosProcessoTeste(self::$processoTeste, array(self::$documentoZip)); - $novoTramite = $this->enviarMetadadosProcesso(self::$servicoPEN, $remetente, $destinatario, $metadadosProcessoTeste); + $novoTramite = $this->enviarMetadadosProcesso($remetente, $destinatario, $metadadosProcessoTeste); - $this->enviarComponentesDigitaisDoProcesso(self::$servicoPEN, $novoTramite, $metadadosProcessoTeste); - $reciboTramite = $this->receberReciboEnvioProcesso(self::$servicoPEN, $novoTramite); + $this->enviarComponentesDigitaisDoProcesso($novoTramite, $metadadosProcessoTeste); + $reciboTramite = $this->receberReciboEnvio($novoTramite); //Verificar recebimento de novo processo administrativo contendo documento avulso enviado $this->assertNotNull($novoTramite); $this->assertNotNull($reciboTramite); $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTeste, array(self::$documentoZip), $destinatario); - $this->receberReciboTramite(self::$servicoPEN, $novoTramite); + $this->receberReciboTramite($novoTramite); } @@ -96,7 +98,7 @@ public function test_devolucao_processo_para_origem() $destinatario = self::$contextoOrgaoB; $orgaosDiferentes = $remetente['URL'] != $destinatario['URL']; - $documentoTeste1 = $this->gerarDadosDocumentoInternoTeste($remetente); + $documentoTeste1 = $this->gerarDadosDocumentoInternoTeste($remetente); $documentoTeste2 = $this->gerarDadosDocumentoExternoTeste($remetente); $novosDocumentos = array($documentoTeste1, $documentoTeste2); @@ -120,9 +122,10 @@ public function test_recebimento_documento_avulso_com_2_componentes_digitais() // Simular um trâmite chamando a API do Barramento diretamente $metadadosDocumentoTeste = $this->construirMetadadosDocumentoAvulsoTeste($documentoTeste); - $novoTramite = $this->enviarMetadadosDocumento(self::$servicoPEN, $remetente, $destinatario, $metadadosDocumentoTeste); - $this->enviarComponentesDigitaisDoDocumentoAvulso(self::$servicoPEN, $novoTramite, $metadadosDocumentoTeste); - $reciboTramite = $this->receberReciboEnvioDocumentoAvulso(self::$servicoPEN, $novoTramite); + $novoTramite = $this->enviarMetadadosDocumento($remetente, $destinatario, $metadadosDocumentoTeste); + $this->enviarComponentesDigitaisDoDocumentoAvulso($novoTramite, $metadadosDocumentoTeste); + sleep(5); + $reciboTramite = $this->receberReciboEnvio($novoTramite); //Verificar recebimento de novo processo administrativo contendo documento avulso enviado @@ -131,120 +134,125 @@ public function test_recebimento_documento_avulso_com_2_componentes_digitais() $this->realizarValidacaoRecebimentoDocumentoAvulsoNoDestinatario($documentoTeste, $destinatario); } - - private function receberReciboEnvioDocumentoAvulso($servicoPEN, $novoTramite) + private function receberReciboTramite($novoTramite) { - $dadosTramite = $novoTramite->dadosTramiteDeDocumentoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->tramite->IDT; - return $servicoPEN->receberReciboDeEnvio($parametros); + $idt = $novoTramite['IDT']; + return $this->receberReciboDeTramiteAPI($idt); } - private function receberReciboEnvioProcesso($servicoPEN, $novoTramite) + private function receberReciboEnvio($novoTramite) { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->IDT; - return $servicoPEN->receberReciboDeEnvio($parametros); - } + // Verifica a origem do envio para determinar se foi realizado por um trâmite de documento avulso ou dentro de um processo. + if (isset($novoTramite['tramites'])) { + $numIDT = $novoTramite['tramites'][0]['IDT']; + } else { + $numIDT = $novoTramite['IDT']; + } - private function receberReciboTramite($servicoPEN, $novoTramite) - { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->IDT; - return $servicoPEN->receberReciboDeTramite($parametros); + return $this->receberReciboDeEnvioAPI($numIDT); } - private function enviarMetadadosProcesso($servicoPEN, $remetente, $destinatario, $processoTeste) + private function enviarMetadadosProcesso($remetente, $destinatario, $processoTeste) { - $parametros = new stdClass(); - $parametros->novoTramiteDeProcesso = new stdClass(); - $parametros->novoTramiteDeProcesso->cabecalho = $this->construirCabecalhoTeste($remetente, $destinatario); - $parametros->novoTramiteDeProcesso->processo = $processoTeste; - return $servicoPEN->enviarProcesso($parametros); + $parametros = []; + $parametros['cabecalho'] = $this->construirCabecalhoTeste($remetente, $destinatario); + $parametros['processo'] = $processoTeste; + + return $this->enviarProcessoAPI($parametros); } - private function enviarMetadadosDocumento($servicoPEN, $remetente, $destinatario, $documentoTeste) + private function enviarMetadadosDocumento($remetente, $destinatario, $documentoTeste) { - $parametros = new stdClass(); - $parametros->novoTramiteDeDocumento = new stdClass(); - $parametros->novoTramiteDeDocumento->cabecalho = $this->construirCabecalhoTeste($remetente, $destinatario); - $parametros->novoTramiteDeDocumento->documento = $documentoTeste; - return $servicoPEN->enviarDocumento($parametros); + $parametros = []; + $parametros['cabecalho'] = $this->construirCabecalhoDocumentoTeste($remetente, $destinatario); + $parametros['documento'] = $documentoTeste['documentoEnvio']; + + return $this->enviarDocumentoAPI($parametros); } - private function enviarComponentesDigitaisDoDocumentoAvulso($servicoPEN, $novoTramite, $documentoTeste) + private function enviarComponentesDigitaisDoDocumentoAvulso($novoTramite, $documentoTeste) { - $dadosTramite = $novoTramite->dadosTramiteDeDocumentoCriado; - foreach ($documentoTeste['componenteDigital'] as $item) { - $dadosDoComponenteDigital = new stdClass(); - $dadosDoComponenteDigital->protocolo = $documentoTeste['protocolo']; - $dadosDoComponenteDigital->hashDoComponenteDigital = $item['valorHash']; - $dadosDoComponenteDigital->conteudoDoComponenteDigital = new SoapVar($item['conteudo'], XSD_BASE64BINARY); - $dadosDoComponenteDigital->ticketParaEnvioDeComponentesDigitais = $dadosTramite->ticketParaEnvioDeComponentesDigitais; - - $parametros = new stdClass(); - $parametros->dadosDoComponenteDigital = $dadosDoComponenteDigital; - $servicoPEN->enviarComponenteDigital($parametros); - } + $parametros = []; + $arrComponentesDigitais = $documentoTeste['componenteEnvio']; + + $dadosDoComponenteDigital['protocolo'] = $documentoTeste['documentoEnvio']['protocolo']; + $dadosDoComponenteDigital['ticketParaEnvioDeComponentesDigitais'] = $novoTramite['ticketParaEnvioDeComponentesDigitais']; + $parametros['dadosDoComponenteDigital'] = $dadosDoComponenteDigital; + + foreach ($arrComponentesDigitais as $componentesDigitais) { + $parametros['dadosDoComponenteDigital']['hashDoComponenteDigital'] = $componentesDigitais['hashDocumento']; + self::$conteudoCompoonenteDigital[$componentesDigitais['hashDocumento']] = $componentesDigitais['conteudo']; + $this->enviarComponenteDigitalAPI($parametros); + } } - private function enviarComponentesDigitaisDoProcesso($servicoPEN, $novoTramite, $processoTeste) + private function enviarComponentesDigitaisDoProcesso($novoTramite, $processoTeste) { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - foreach ($processoTeste['documento'] as $documentoTeste) { - foreach ($documentoTeste['componenteDigital'] as $item) { - $dadosDoComponenteDigital = new stdClass(); - $dadosDoComponenteDigital->protocolo = $processoTeste['protocolo']; - $dadosDoComponenteDigital->hashDoComponenteDigital = $item['valorHash']; - $dadosDoComponenteDigital->conteudoDoComponenteDigital = new SoapVar($item['conteudo'], XSD_BASE64BINARY); - $dadosDoComponenteDigital->ticketParaEnvioDeComponentesDigitais = $dadosTramite->ticketParaEnvioDeComponentesDigitais; - - $parametros = new stdClass(); - $parametros->dadosDoComponenteDigital = $dadosDoComponenteDigital; - $servicoPEN->enviarComponenteDigital($parametros); + foreach ($processoTeste['documentos'] as $documentoTeste) { + foreach ($documentoTeste['componentesDigitais'] as $item) { + $dadosDoComponenteDigital = []; + $dadosDoComponenteDigital['protocolo'] = $processoTeste['protocolo']; + $dadosDoComponenteDigital['hashDoComponenteDigital'] = $item['hash']['conteudo']; + $dadosDoComponenteDigital['ticketParaEnvioDeComponentesDigitais'] = $novoTramite['ticketParaEnvioDeComponentesDigitais']; + + $parametros['dadosDoComponenteDigital'] = $dadosDoComponenteDigital; + $this->enviarComponenteDigitalAPI($parametros); } } + } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'cache_wsdl'=> BeSimple\SoapCommon\Cache::TYPE_NONE - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); - + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => PEN_ENDERECO_WEBSERVICE, + 'handler' => GuzzleHttp\HandlerStack::create(), + 'timeout' => 40, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; } private function construirCabecalhoTeste($remetente, $destinatario) { - $cabecalho = new stdClass(); - $cabecalho->remetente = new stdClass(); - $cabecalho->remetente->identificacaoDoRepositorioDeEstruturas = $remetente['ID_REP_ESTRUTURAS']; - $cabecalho->remetente->numeroDeIdentificacaoDaEstrutura = $remetente['ID_ESTRUTURA']; - - $cabecalho->destinatario = new stdClass(); - $cabecalho->destinatario->identificacaoDoRepositorioDeEstruturas = $destinatario['ID_REP_ESTRUTURAS']; - $cabecalho->destinatario->numeroDeIdentificacaoDaEstrutura =$destinatario['ID_ESTRUTURA']; - - $cabecalho->urgente = false; - $cabecalho->motivoDaUrgencia = null; - $cabecalho->obrigarEnvioDeTodosOsComponentesDigitais = false; + $cabecalho = [ + 'remetente' => [ + 'identificacaoDoRepositorioDeEstruturas' => $remetente['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $remetente['ID_ESTRUTURA'], + ], + 'destinatario' => [ + 'identificacaoDoRepositorioDeEstruturas' => $destinatario['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $destinatario['ID_ESTRUTURA'], + ], + 'enviarApenasComponentesDigitaisPendentes' => false + ]; + + return $cabecalho; + } + + + private function construirCabecalhoDocumentoTeste($remetente, $destinatario) + { + $cabecalho = [ + 'remetente' => [ + 'identificacaoDoRepositorioDeEstruturas' => $remetente['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $remetente['ID_ESTRUTURA'], + ], + 'destinatarios' => [ + [ + 'identificacaoDoRepositorioDeEstruturas' => $destinatario['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $destinatario['ID_ESTRUTURA'], + ], + ] + ]; + return $cabecalho; } @@ -262,7 +270,7 @@ private function construirMetadadosDocumentoAvulsoTeste($documentoTeste) { $componentes = array(); $listaComponentes = is_array($documentoTeste['ARQUIVO']) ? $documentoTeste['ARQUIVO'] : array($documentoTeste['ARQUIVO']); - + $componenteEnvio = []; foreach ($listaComponentes as $ordem => $caminhoArquivo) { $caminhoArquivo = realpath($caminhoArquivo); $fp = fopen($caminhoArquivo, "rb"); @@ -273,42 +281,54 @@ private function construirMetadadosDocumentoAvulsoTeste($documentoTeste) $nomeArquivo = basename($caminhoArquivo); $componentes[] = array( 'nome' => $nomeArquivo, - 'hash' => new SoapVar("$hashDocumento", XSD_ANYXML), + 'hash' => [ + 'algoritmo' => 'SHA256', + 'conteudo' => $hashDocumento + ], 'tipoDeConteudo' => 'txt', - 'mimeType' => 'text/plain', + "mimeType" => "application/pdf", 'tamanhoEmBytes' => $tamanhoDocumento, 'ordem' => $ordem + 1, + ); - // Chaves abaixo adicionadas apenas para simplificação dos testes - 'valorHash' => $hashDocumento, - 'conteudo' => $conteudo, + // Utilizada exclusivamente para o envio de componentes digitais. + // Inclui o conteúdo do documento anexado, simplificando o processo de integração. + $componenteEnvio[] = array( + 'hashDocumento' => $hashDocumento, + 'conteudo' => $conteudo ); } finally { fclose($fp); } } - return array( - 'protocolo' => '13990.000181/2020-00', + $documentoEnvio = array( + 'protocolo' => '13990.000185/2024-00', 'nivelDeSigilo' => 1, 'descricao' => $documentoTeste['DESCRICAO'], 'dataHoraDeProducao' => '2017-05-15T03:41:13', 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', - 'produtor' => array( - 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), + "nome" => "Nome ABC", + "tipo" => "orgaopublico" ), - 'especie' => array( 'codigo' => 42, - 'nomeNoProdutor' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1') + 'nomeNoProdutor' => 'Despacho', ), - - 'interessado' => array( - 'nome' => $documentoTeste['INTERESSADOS'], + 'interessados' => array( + [ + "nome" => $documentoTeste['INTERESSADOS'], + "tipo" => "fisica" + ] ), - 'componenteDigital' => $componentes, + 'componentesDigitais' => $componentes, + ); + + return array( + 'documentoEnvio' => $documentoEnvio, + 'componenteEnvio' => $componenteEnvio ); } @@ -317,8 +337,7 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen $componentes = array(); $listaComponentes = is_array($documentoTeste['ARQUIVO']) ? $documentoTeste['ARQUIVO'] : array($documentoTeste['ARQUIVO']); - foreach ($listaComponentes as $index => $caminhoArquivo) { - $ordemComponente = $index + 1; + foreach ($listaComponentes as $ordemComponente => $caminhoArquivo) { $caminhoArquivo = realpath($caminhoArquivo); $fp = fopen($caminhoArquivo, "rb"); try{ @@ -328,16 +347,17 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen $nomeArquivo = basename($caminhoArquivo); $componentes[] = array( 'nome' => $nomeArquivo, - 'hash' => new SoapVar("$hashDocumento", XSD_ANYXML), + 'hash' => [ + 'algoritmo' => 'SHA256', + 'conteudo' => $hashDocumento + ], 'tipoDeConteudo' => 'txt', - 'mimeType' => 'text/plain', + 'mimeType' => 'application/pdf', 'tamanhoEmBytes' => $tamanhoDocumento, 'ordem' => $ordemComponente, - - // Chaves abaixo adicionadas apenas para simplificação dos testes - 'valorHash' => $hashDocumento, - 'conteudo' => $conteudo, ); + + self::$conteudoCompoonenteDigital[$hashDocumento] = $conteudo; } finally { fclose($fp); } @@ -350,10 +370,9 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen 'dataHoraDeProducao' => '2017-05-15T03:41:13', 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', 'ordem' => $ordemDocumento, - 'produtor' => array( 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), - 'numeroDeIdentificacao' => '999999', + "tipo" => "orgaopublico" ), 'especie' => array( @@ -361,18 +380,29 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen 'nomeNoProdutor' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1') ), - 'interessado' => array( - 'nome' => $documentoTeste['INTERESSADOS'], + 'interessados' => array( + [ + "nome" => $documentoTeste['INTERESSADOS'], + "tipo" => "fisica" + ] ), - 'componenteDigital' => $componentes, + 'componentesDigitais' => $componentes, + ); + + $componenteEnvio = array( + 'hashDocumento' => $hashDocumento, + 'conteudo' => $conteudo ); if(!is_null($documentoTeste['ORDEM_DOCUMENTO_REFERENCIADO'])){ $documentoDoProcesso['ordemDoDocumentoReferenciado'] = intval($documentoTeste['ORDEM_DOCUMENTO_REFERENCIADO']); } - return $documentoDoProcesso; + return array( + 'documentoDoProcesso' => $documentoDoProcesso, + 'componenteEnvio' => $componenteEnvio + ); } @@ -380,7 +410,8 @@ private function construirMetadadosProcessoTeste($processoTeste, $documentosTest { $metadadosDocumentos = array(); foreach ($documentosTeste as $indice => $documentoTeste) { - $metadadosDocumentos[] = $this->construirMetadadosDocumentoTeste($documentoTeste, $indice + 1); + $documentos = $this->construirMetadadosDocumentoTeste($documentoTeste, $indice + 1); + $metadadosDocumentos[] = $documentos['documentoDoProcesso']; } return array( @@ -392,12 +423,132 @@ private function construirMetadadosProcessoTeste($processoTeste, $documentosTest 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', 'produtor' => array( 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), + 'tipo' => "orgaopublico", ), - 'interessado' => array( - 'nome' => $processoTeste['INTERESSADOS'], + 'interessados' => array( + [ + "nome" => $processoTeste['INTERESSADOS'], + ] ), - 'documento' => $metadadosDocumentos, + 'documentos' => $metadadosDocumentos, ); } + + public function enviarComponenteDigitalAPI($parametros) + { + try { + + $arrParametros = $parametros['dadosDoComponenteDigital']; + $idTicketDeEnvio = $arrParametros['ticketParaEnvioDeComponentesDigitais']; + + $protocolo = $arrParametros['protocolo']; + $hashDoComponenteDigital = $arrParametros['hashDoComponenteDigital']; + + $conteudoComponenteDigital = self::$conteudoCompoonenteDigital[$hashDoComponenteDigital]; + + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudoComponenteDigital, + 'filename' => 'conteudo.html', + 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $response = self::$servicoPEN->request('PUT', $endpoint, $arrOptions); + + return $response; + + } catch (\Exception $e) { + $mensagem = "Falha no envio de de componentes no documento"; + $this->fail($mensagem . " - " . $e->getMessage()); + } + } + + public function receberReciboDeEnvioAPI($parNumIdTramite) + { + $endpoint = "tramites/{$parNumIdTramite}/recibo-de-envio"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $response = self::$servicoPEN->request('GET', $endpoint, [ + 'query' => $parametros + ]); + + return json_decode($response->getBody(), true); + } catch (\Exception $e) { + $mensagem = "Falha no recebimento de recibo de trâmite de envio."; + $this->fail($mensagem . " - " . $e->getMessage()); + } + } + + public function enviarProcessoAPI($parametros) + { + try { + $endpoint = "tramites/processo"; + + $response = self::$servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + + return json_decode($response->getBody(), true); + + } catch (\Exception $e) { + $mensagem = "Falha no envio de processo"; + $this->fail($mensagem . " - " . $e->getMessage()); + } + } + + + + public function receberReciboDeTramiteAPI($parNumIdTramite) + { + $endpoint = "tramites/{$parNumIdTramite}/recibo"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $response = self::$servicoPEN->request('GET', $endpoint, [ + 'json' => $parametros + ]); + + return json_decode($response->getBody(), true); + + } catch (\Exception $e) { + $mensagem = "Falha no recebimento de recibo de trâmite."; + $this->fail($mensagem . " - " . $e->getMessage()); + } + } + + public function enviarDocumentoAPI($parametros) + { + try { + $endpoint = "tramites/documento"; + + $response = self::$servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + + return json_decode($response->getBody(), true); + + } catch (\Exception $e) { + $mensagem = "Falha no envio de documento avulso"; + $this->fail($mensagem . " - " . $e->getMessage()); + } + } + } diff --git a/tests_sei41/funcional/tests/TramiteRecebimentoMultiplosComponentesDigitaisApenasPendentes.php b/tests_sei41/funcional/tests/TramiteRecebimentoMultiplosComponentesDigitaisApenasPendentes.php index 48982791b..60d625833 100755 --- a/tests_sei41/funcional/tests/TramiteRecebimentoMultiplosComponentesDigitaisApenasPendentes.php +++ b/tests_sei41/funcional/tests/TramiteRecebimentoMultiplosComponentesDigitaisApenasPendentes.php @@ -19,6 +19,7 @@ class TramiteRecebimentoMultiplosComponentesDigitaisApenasPendentes extends Fixt public static $documentoZip; public static $totalDocumentos; + public static $conteudoCompoonenteDigital; /** @@ -64,17 +65,17 @@ public function test_recebimento_processo_com_3_componentes_digitais() // Simular um trâmite chamando a API do Barramento diretamente $metadadosProcessoTeste = $this->construirMetadadosProcessoTeste(self::$processoTeste, array(self::$documentoZip)); - $novoTramite = $this->enviarMetadadosProcesso(self::$servicoPEN, $remetente, $destinatario, $metadadosProcessoTeste); + $novoTramite = $this->enviarMetadadosProcesso($remetente, $destinatario, $metadadosProcessoTeste); - $this->enviarComponentesDigitaisDoProcesso(self::$servicoPEN, $novoTramite, $metadadosProcessoTeste); - $reciboTramite = $this->receberReciboEnvioProcesso(self::$servicoPEN, $novoTramite); + $this->enviarComponentesDigitaisDoProcesso($novoTramite, $metadadosProcessoTeste); + $reciboTramite = $this->receberReciboEnvio($novoTramite); //Verificar recebimento de novo processo administrativo contendo documento avulso enviado $this->assertNotNull($novoTramite); $this->assertNotNull($reciboTramite); $this->realizarValidacaoRecebimentoProcessoNoDestinatario(self::$processoTeste, array(self::$documentoZip), $destinatario); - $this->receberReciboTramite(self::$servicoPEN, $novoTramite); + $this->receberReciboTramite($novoTramite); } @@ -126,119 +127,81 @@ public function test_devolucao_processo_para_destino_2() } - private function receberReciboEnvioDocumentoAvulso($servicoPEN, $novoTramite) + private function receberReciboEnvio($novoTramite) { - $dadosTramite = $novoTramite->dadosTramiteDeDocumentoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->tramite->IDT; - return $servicoPEN->receberReciboDeEnvio($parametros); - } - - private function receberReciboEnvioProcesso($servicoPEN, $novoTramite) - { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->IDT; - return $servicoPEN->receberReciboDeEnvio($parametros); - } + // Verifica a origem do envio para determinar se foi realizado por um trâmite de documento avulso ou dentro de um processo. + if (isset($novoTramite['tramites'])) { + $numIDT = $novoTramite['tramites'][0]['IDT']; + } else { + $numIDT = $novoTramite['IDT']; + } - private function receberReciboTramite($servicoPEN, $novoTramite) - { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - $parametros = new StdClass(); - $parametros->IDT = $dadosTramite->IDT; - return $servicoPEN->receberReciboDeTramite($parametros); + return $this->receberReciboDeEnvioAPI($numIDT); } - private function enviarMetadadosProcesso($servicoPEN, $remetente, $destinatario, $processoTeste) + private function receberReciboTramite($novoTramite) { - $parametros = new stdClass(); - $parametros->novoTramiteDeProcesso = new stdClass(); - $parametros->novoTramiteDeProcesso->cabecalho = $this->construirCabecalhoTeste($remetente, $destinatario); - $parametros->novoTramiteDeProcesso->processo = $processoTeste; - return $servicoPEN->enviarProcesso($parametros); + $idt = $novoTramite['IDT']; + return $this->receberReciboDeTramiteAPI($idt); } - private function enviarMetadadosDocumento($servicoPEN, $remetente, $destinatario, $documentoTeste) + private function enviarMetadadosProcesso($remetente, $destinatario, $processoTeste) { - $parametros = new stdClass(); - $parametros->novoTramiteDeDocumento = new stdClass(); - $parametros->novoTramiteDeDocumento->cabecalho = $this->construirCabecalhoTeste($remetente, $destinatario); - $parametros->novoTramiteDeDocumento->documento = $documentoTeste; - return $servicoPEN->enviarDocumento($parametros); - } + $parametros = []; + $parametros['cabecalho'] = $this->construirCabecalhoTeste($remetente, $destinatario); + $parametros['processo'] = $processoTeste; - private function enviarComponentesDigitaisDoDocumentoAvulso($servicoPEN, $novoTramite, $documentoTeste) - { - $dadosTramite = $novoTramite->dadosTramiteDeDocumentoCriado; - foreach ($documentoTeste['componenteDigital'] as $item) { - $dadosDoComponenteDigital = new stdClass(); - $dadosDoComponenteDigital->protocolo = $documentoTeste['protocolo']; - $dadosDoComponenteDigital->hashDoComponenteDigital = $item['valorHash']; - $dadosDoComponenteDigital->conteudoDoComponenteDigital = new SoapVar($item['conteudo'], XSD_BASE64BINARY); - $dadosDoComponenteDigital->ticketParaEnvioDeComponentesDigitais = $dadosTramite->ticketParaEnvioDeComponentesDigitais; - - $parametros = new stdClass(); - $parametros->dadosDoComponenteDigital = $dadosDoComponenteDigital; - $servicoPEN->enviarComponenteDigital($parametros); - } + return $this->enviarProcessoAPI($parametros); } - private function enviarComponentesDigitaisDoProcesso($servicoPEN, $novoTramite, $processoTeste) + private function enviarComponentesDigitaisDoProcesso($novoTramite, $processoTeste) { - $dadosTramite = $novoTramite->dadosTramiteDeProcessoCriado; - foreach ($processoTeste['documento'] as $documentoTeste) { - foreach ($documentoTeste['componenteDigital'] as $item) { - $dadosDoComponenteDigital = new stdClass(); - $dadosDoComponenteDigital->protocolo = $processoTeste['protocolo']; - $dadosDoComponenteDigital->hashDoComponenteDigital = $item['valorHash']; - $dadosDoComponenteDigital->conteudoDoComponenteDigital = new SoapVar($item['conteudo'], XSD_BASE64BINARY); - $dadosDoComponenteDigital->ticketParaEnvioDeComponentesDigitais = $dadosTramite->ticketParaEnvioDeComponentesDigitais; - - $parametros = new stdClass(); - $parametros->dadosDoComponenteDigital = $dadosDoComponenteDigital; - $servicoPEN->enviarComponenteDigital($parametros); + foreach ($processoTeste['documentos'] as $documentoTeste) { + foreach ($documentoTeste['componentesDigitais'] as $item) { + $dadosDoComponenteDigital = []; + $dadosDoComponenteDigital['protocolo'] = $processoTeste['protocolo']; + $dadosDoComponenteDigital['hashDoComponenteDigital'] = $item['hash']['conteudo']; + $dadosDoComponenteDigital['ticketParaEnvioDeComponentesDigitais'] = $novoTramite['ticketParaEnvioDeComponentesDigitais']; + + $parametros['dadosDoComponenteDigital'] = $dadosDoComponenteDigital; + $this->enviarComponenteDigitalAPI($parametros); } } + } - private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) + private function instanciarApiDeIntegracao($localCertificado, $senhaCertificado) { - $connectionTimeout = 600; - $options = array( - 'soap_version' => SOAP_1_1 - , 'local_cert' => $localCertificado - , 'passphrase' => $senhaCertificado - , 'resolve_wsdl_remote_includes' => true - , 'cache_wsdl'=> BeSimple\SoapCommon\Cache::TYPE_NONE - , 'connection_timeout' => $connectionTimeout - , CURLOPT_TIMEOUT => $connectionTimeout - , CURLOPT_CONNECTTIMEOUT => $connectionTimeout - , 'encoding' => 'UTF-8' - , 'attachment_type' => BeSimple\SoapCommon\Helper::ATTACHMENTS_TYPE_MTOM - , 'ssl' => array( - 'allow_self_signed' => true, - ), - ); - - return new BeSimple\SoapClient\SoapClient(PEN_ENDERECO_WEBSERVICE, $options); - + $arrheaders = [ + 'Accept' => '*/*', + 'Content-Type' => 'application/json', + ]; + + $strClientGuzzle = new GuzzleHttp\Client([ + 'base_uri' => PEN_ENDERECO_WEBSERVICE, + 'timeout' => 40, + 'headers' => $arrheaders, + 'cert' => [$localCertificado, $senhaCertificado], + ]); + + return $strClientGuzzle; } + private function construirCabecalhoTeste($remetente, $destinatario) { - $cabecalho = new stdClass(); - $cabecalho->remetente = new stdClass(); - $cabecalho->remetente->identificacaoDoRepositorioDeEstruturas = $remetente['ID_REP_ESTRUTURAS']; - $cabecalho->remetente->numeroDeIdentificacaoDaEstrutura = $remetente['ID_ESTRUTURA']; - - $cabecalho->destinatario = new stdClass(); - $cabecalho->destinatario->identificacaoDoRepositorioDeEstruturas = $destinatario['ID_REP_ESTRUTURAS']; - $cabecalho->destinatario->numeroDeIdentificacaoDaEstrutura =$destinatario['ID_ESTRUTURA']; - - $cabecalho->urgente = false; - $cabecalho->motivoDaUrgencia = null; - $cabecalho->obrigarEnvioDeTodosOsComponentesDigitais = false; + $cabecalho = [ + 'remetente' => [ + 'identificacaoDoRepositorioDeEstruturas' => $remetente['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $remetente['ID_ESTRUTURA'], + ], + 'destinatario' => [ + 'identificacaoDoRepositorioDeEstruturas' => $destinatario['ID_REP_ESTRUTURAS'], + 'numeroDeIdentificacaoDaEstrutura' => $destinatario['ID_ESTRUTURA'], + ], + 'enviarApenasComponentesDigitaisPendentes' => false + ]; + return $cabecalho; } @@ -252,67 +215,12 @@ public function gerarDadosDocumentoExternoTeste($contextoProducao, $nomesArquivo } - private function construirMetadadosDocumentoAvulsoTeste($documentoTeste) - { - $componentes = array(); - $listaComponentes = is_array($documentoTeste['ARQUIVO']) ? $documentoTeste['ARQUIVO'] : array($documentoTeste['ARQUIVO']); - - foreach ($listaComponentes as $ordem => $caminhoArquivo) { - $caminhoArquivo = realpath($caminhoArquivo); - $fp = fopen($caminhoArquivo, "rb"); - try{ - $conteudo = fread($fp, filesize($caminhoArquivo)); - $tamanhoDocumento = strlen($conteudo); - $hashDocumento = base64_encode(hash(self::ALGORITMO_HASH_DOCUMENTO, $conteudo, true)); - $nomeArquivo = basename($caminhoArquivo); - $componentes[] = array( - 'nome' => $nomeArquivo, - 'hash' => new SoapVar("$hashDocumento", XSD_ANYXML), - 'tipoDeConteudo' => 'txt', - 'mimeType' => 'text/plain', - 'tamanhoEmBytes' => $tamanhoDocumento, - 'ordem' => $ordem + 1, - - // Chaves abaixo adicionadas apenas para simplificação dos testes - 'valorHash' => $hashDocumento, - 'conteudo' => $conteudo, - ); - } finally { - fclose($fp); - } - } - - return array( - 'protocolo' => '13990.000181/2020-00', - 'nivelDeSigilo' => 1, - 'descricao' => $documentoTeste['DESCRICAO'], - 'dataHoraDeProducao' => '2017-05-15T03:41:13', - 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', - - 'produtor' => array( - 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), - ), - - 'especie' => array( - 'codigo' => 42, - 'nomeNoProdutor' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1') - ), - - 'interessado' => array( - 'nome' => $documentoTeste['INTERESSADOS'], - ), - - 'componenteDigital' => $componentes, - ); - } - private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumento) { $componentes = array(); $listaComponentes = is_array($documentoTeste['ARQUIVO']) ? $documentoTeste['ARQUIVO'] : array($documentoTeste['ARQUIVO']); - foreach ($listaComponentes as $index => $caminhoArquivo) { - $ordemComponente = $index + 1; + foreach ($listaComponentes as $ordemComponente => $caminhoArquivo) { $caminhoArquivo = realpath($caminhoArquivo); $fp = fopen($caminhoArquivo, "rb"); try{ @@ -322,16 +230,17 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen $nomeArquivo = basename($caminhoArquivo); $componentes[] = array( 'nome' => $nomeArquivo, - 'hash' => new SoapVar("$hashDocumento", XSD_ANYXML), + 'hash' => [ + 'algoritmo' => 'SHA256', + 'conteudo' => $hashDocumento + ], 'tipoDeConteudo' => 'txt', - 'mimeType' => 'text/plain', + 'mimeType' => 'application/pdf', 'tamanhoEmBytes' => $tamanhoDocumento, 'ordem' => $ordemComponente, - - // Chaves abaixo adicionadas apenas para simplificação dos testes - 'valorHash' => $hashDocumento, - 'conteudo' => $conteudo, ); + + self::$conteudoCompoonenteDigital[$hashDocumento] = $conteudo; } finally { fclose($fp); } @@ -344,10 +253,9 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen 'dataHoraDeProducao' => '2017-05-15T03:41:13', 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', 'ordem' => $ordemDocumento, - 'produtor' => array( 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), - 'numeroDeIdentificacao' => '999999', + "tipo" => "orgaopublico" ), 'especie' => array( @@ -355,18 +263,29 @@ private function construirMetadadosDocumentoTeste($documentoTeste, $ordemDocumen 'nomeNoProdutor' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1') ), - 'interessado' => array( - 'nome' => $documentoTeste['INTERESSADOS'], + 'interessados' => array( + [ + "nome" => $documentoTeste['INTERESSADOS'], + "tipo" => "fisica" + ] ), - 'componenteDigital' => $componentes, + 'componentesDigitais' => $componentes, + ); + + $componenteEnvio = array( + 'hashDocumento' => $hashDocumento, + 'conteudo' => $conteudo ); if(!is_null($documentoTeste['ORDEM_DOCUMENTO_REFERENCIADO'])){ $documentoDoProcesso['ordemDoDocumentoReferenciado'] = intval($documentoTeste['ORDEM_DOCUMENTO_REFERENCIADO']); } - return $documentoDoProcesso; + return array( + 'documentoDoProcesso' => $documentoDoProcesso, + 'componenteEnvio' => $componenteEnvio + ); } @@ -374,7 +293,8 @@ private function construirMetadadosProcessoTeste($processoTeste, $documentosTest { $metadadosDocumentos = array(); foreach ($documentosTeste as $indice => $documentoTeste) { - $metadadosDocumentos[] = $this->construirMetadadosDocumentoTeste($documentoTeste, $indice + 1); + $documentos = $this->construirMetadadosDocumentoTeste($documentoTeste, $indice + 1); + $metadadosDocumentos[] = $documentos['documentoDoProcesso']; } return array( @@ -386,12 +306,132 @@ private function construirMetadadosProcessoTeste($processoTeste, $documentosTest 'dataHoraDeRegistro' => '2013-12-21T09:32:42-02:00', 'produtor' => array( 'nome' => mb_convert_encoding(util::random_string(20), 'UTF-8', 'ISO-8859-1'), + 'tipo' => "orgaopublico", ), - 'interessado' => array( - 'nome' => $processoTeste['INTERESSADOS'], + 'interessados' => array( + [ + "nome" => $processoTeste['INTERESSADOS'], + ] ), - 'documento' => $metadadosDocumentos, + 'documentos' => $metadadosDocumentos, ); } + + public function enviarComponenteDigitalAPI($parametros) + { + try { + + $arrParametros = $parametros['dadosDoComponenteDigital']; + $idTicketDeEnvio = $arrParametros['ticketParaEnvioDeComponentesDigitais']; + + $protocolo = $arrParametros['protocolo']; + $hashDoComponenteDigital = $arrParametros['hashDoComponenteDigital']; + + $conteudoComponenteDigital = self::$conteudoCompoonenteDigital[$hashDoComponenteDigital]; + + $queryParams = [ + 'hashDoComponenteDigital' => $hashDoComponenteDigital, + 'protocolo' => $protocolo + ]; + + $endpoint = "tickets-de-envio-de-componente/{$idTicketDeEnvio}/protocolos/componentes-a-enviar"; + + $arrOptions = [ + 'query' => $queryParams, + 'multipart' => [ + [ + 'name' => 'conteudo', + 'contents' => $conteudoComponenteDigital, + 'filename' => 'conteudo.html', + 'headers' => ['Content-Type' => 'text/html'] + ], + ], + ]; + + $response = self::$servicoPEN->request('PUT', $endpoint, $arrOptions); + + return $response; + + } catch (\Exception $e) { + $mensagem = "Falha no envio de de componentes no documento"; + $this->fail($mensagem . " - " . $e->getMessage()); + } + } + + public function receberReciboDeEnvioAPI($parNumIdTramite) + { + $endpoint = "tramites/{$parNumIdTramite}/recibo-de-envio"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $response = self::$servicoPEN->request('GET', $endpoint, [ + 'query' => $parametros + ]); + + return json_decode($response->getBody(), true); + } catch (\Exception $e) { + $mensagem = "Falha no recebimento de recibo de trâmite de envio."; + $this->fail($mensagem . " - " . $e->getMessage()); + } + } + + public function enviarProcessoAPI($parametros) + { + try { + $endpoint = "tramites/processo"; + + $response = self::$servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + + return json_decode($response->getBody(), true); + + } catch (\Exception $e) { + $mensagem = "Falha no envio de processo"; + $this->fail($mensagem . " - " . $e->getMessage()); + } + } + + + + public function receberReciboDeTramiteAPI($parNumIdTramite) + { + $endpoint = "tramites/{$parNumIdTramite}/recibo"; + try{ + $parametros = [ + 'IDT' => $parNumIdTramite + ]; + + $response = self::$servicoPEN->request('GET', $endpoint, [ + 'json' => $parametros + ]); + + return json_decode($response->getBody(), true); + + } catch (\Exception $e) { + $mensagem = "Falha no recebimento de recibo de trâmite."; + $this->fail($mensagem . " - " . $e->getMessage()); + } + } + + public function enviarDocumentoAPI($parametros) + { + try { + $endpoint = "tramites/documento"; + + $response = self::$servicoPEN->request('POST', $endpoint, [ + 'json' => $parametros + ]); + + return json_decode($response->getBody(), true); + + } catch (\Exception $e) { + $mensagem = "Falha no envio de documento avulso"; + $this->fail($mensagem . " - " . $e->getMessage()); + } + } + }