JSON para HASH com PDF
Enviado: 05 Set 2022 00:46
Prezados,
Estou tentando usar um webservice do TCU que me dá uma consulta consolidada de Pessoa Jurídica, mas dá erro logo na conversão do JSON para HASH.
Esse JSON contém um PDF dentro e o que me interessa é esse PDF gerado pela consulta.
Vejamos:
Daí eu fiz esse teste:
Essa função JSontoHash() funciona legal no webservice do CNPJÁ, mas nesse aí que tem um arquivo PDF no meio dá erro.
Ví alguma coisa com AttachFile, mas seria um objeto de email. Acho que primeiro teria que resolver essa conversão do JSON para Hash e depois salvar o valor do hash "certidaoPDF" em arquivo... não sei como.
Agradeço a todos que puderem ajudar.
Estou tentando usar um webservice do TCU que me dá uma consulta consolidada de Pessoa Jurídica, mas dá erro logo na conversão do JSON para HASH.
Esse JSON contém um PDF dentro e o que me interessa é esse PDF gerado pela consulta.
Vejamos:
A estrutura da resposta seria essa:Consulta consolidada
GET https://certidoes-apf.apps.tcu.gov.br/a ... certidoes/{cnpj}?seEmitirPDF=(true|false)
Link do webservice: https://portal.tcu.gov.br/webservices-tcu/Response Class (Status 200)
application/json;charset=UTF-8
{
"razaoSocial":"string",
"nomeFantasia":string,
"cnpj":"string",
"uf":string,
"certidoes": [
{
"emissor":"TCU",
"tipo":"string",
"dataHoraEmissao":"13/04/2018 16:38",
"descricao":"string",
"situacao":"string",
"observacao":"string"
}
],
"certidaoPDF":"application/pdf"
}
Daí eu fiz esse teste:
Código: Selecionar todos
FUNCTION CEIS()
SAVE SCREEN TO cTEL6
cCOR6 := SETCOLOR()
MSGRODA("Informe o CNPJ para fazer a pesquisa consolidada de Pessoa Jurídica do TCU", "W+/BG")
TRJANELA(19,20,21,50,"GR+/R", "CONSULTA CONSOLIDADA PJ", .T.)
cCNPJ := SPACE(14)
@ 20,26 GET cCNPJ PICTURE "@R 99.999.999/9999-99" VALID CGC(cCNPJ)
READ
IF LASTKEY()#27
// DEFINE VARIÁVEL DO TIPO HASH VAZIA
hCNPJ := HASH()
// Cria um objeto para requisicao HTTP
http := CreateObject("MSXML2.ServerXMLHTTP")
http:Open("GET", "https://certidoes-apf.apps.tcu.gov.br/api/rest/publico/certidoes/"+cCNPJ+"?seEmitirPDF=true", .F.)
// http:SetRequestHeader( "Content-Type","application/json")
http:SetRequestHeader( "Content-Type","application/pdf")
// Envia parâmetros e aguarda a resposta
MSGRODA("Buscando dados do CNPJ " + TRANSFORM(cCNPJ, "@R 99.999.999/9999-99") + ", aguarde...", "W+/BG")
http:send()
// CAPTA RESPOSTA
JSONCNPJ := http:responseText
fCERTIDAO := "CEIS"+cCNPJ+".PDF" // NOME DO PDF COM A CONSULTA
IF FILE(fCERTIDAO)
DELETEFILE(fCERTIDAO)
ENDIF
nFileHandle := FCreate(fCERTIDAO)
FWRITE(nFileHandle, JSONCNPJ)
FCLOSE(nFileHandle)
/*
// CONVERTE JSON PARA HASH
hCNPJ := JSontoHash(JSONCNPJ) // DÁ ERRO AQUI
? hCNPJ["razaoSocial"]
? hCNPJ["nomeFantasia"]
nFileHandle := FCreate(fCERTIDAO)
FWRITE(nFileHandle, hCNPJ["certidaoPDF"])
FCLOSE(nFileHandle)
*/
ENDIF
RESTORE SCREEN FROM cTEL6
SETCOLOR(cCOR6)
RETURN
Function JSontoHash( cStringJson )
/***
* Converte string formato Json em Hash
*/
Local hJson := {=>}
cStringJson := StrTran( cStringJson,':[','=>{')
cStringJson := StrTran( cStringJson,'":"','" => "')
cStringJson := StrTran( cStringJson,'[','{')
cStringJson := StrTran( cStringJson,']','}')
cStringJson := StrTran( cStringJson,'":null','"=>nil')
cStringJson := StrTran( cStringJson,'":true' ,'"=>.t.' )
cStringJson := StrTran( cStringJson,'":false','"=>.f.')
cStringJson := StrTran( cStringJson,'":','"=>')
cStringJson := StrTran( cStringJson,"\/","/" )
hJSon := &( cStringJson )
Return hJson
Ví alguma coisa com AttachFile, mas seria um objeto de email. Acho que primeiro teria que resolver essa conversão do JSON para Hash e depois salvar o valor do hash "certidaoPDF" em arquivo... não sei como.
Agradeço a todos que puderem ajudar.