Ir para conteúdo
  • Cadastre-se

dev botao

Envio do arquivo DRCST


Ver Solução Respondido por DouglasGV,
  • Este tópico foi criado há 1280 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Olá pessoal, tudo bem com vocês?

Pessoal de SC, estão conseguindo enviar o arquivo DRCST compactado e em base64, para o WebService validar a estrutura e dar o retorno?

Estou a 2 semanas tentando e nada, se alguém está conseguindo, consegue me ajudar?

Tentei enviar o exemplo que está no arquivo da SEF e mesmo assim retorna a mesma mensagem:

 

  "ResultCode": "Error",
  "Data": null,
  "Messages": [
    {
      "Message": "Conteúdo binário do arquivo ZIP é nulo.",
      "Type": "Error"
    }
  ]
}
 

Ferramenta de desenvolvimento, Delphi 10.3.1.

Desde já agradeço.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Douglas, segue código, sofri alguns dias aqui fazendo funcionar, graças a grande documentação fornecida pelo estado.

o problema que você deve estar passando é que o requestbody não pode ser um TStringStream, mudei para TStream e começou aceitar, também deixa as configurações como está abaixo, se tiver alguma coisa diferente vai voltar ao erro que esta aparecendo ai,

coloca o componente no formulário (idhttp), não coloca nenhuma propriedade e apenas seta como no código abaixo, suave amigo, abraço.

 

var:
	RequestBody: TStream;
    lResponse : TStringStream;
	ZipEncode : String;
begin

....
	// Codifica o zip:
	ZipEncode := '"' + EncodeFile(NomeZIP) + '"';

	// deixa o idhttp dessa forma:
    lResponse := TStringStream.Create();
    RequestBody := TStringStream.Create(ZipEncode, TEncoding.UTF8);
    try
    	idHttp1.Request.ContentType := 'application/json';
        IdHTTP1.Request.CustomHeaders.Clear;
        IdHttp1.Request.CustomHeaders.AddValue('Accept', 'application/json');
        IdHttp1.Request.CustomHeaders.AddValue('Host', 'https://tributario.sef.sc.gov.br');
        IdHttp1.Request.CustomHeaders.AddValue('Cache-Control', 'no-cache');
        IdHttp1.Request.CustomHeaders.AddValue('Content-Type', 'application/json');
        idHttp1.Post('https://tributario.sef.sc.gov.br/api/drcSt/arquivo/ValidarEstrutura', RequestBody, lResponse);


        lResponse.Position := 0;

        // Trata o retorno em um richedit:
        reResp.Lines.LoadFromStream(lResponse);

      finally
        lResponse.Free();
      end;

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Solution
Em ‎10‎/‎05‎/‎2019 at 19:51, JonasBollis disse:

Douglas, segue código, sofri alguns dias aqui fazendo funcionar, graças a grande documentação fornecida pelo estado.

o problema que você deve estar passando é que o requestbody não pode ser um TStringStream, mudei para TStream e começou aceitar, também deixa as configurações como está abaixo, se tiver alguma coisa diferente vai voltar ao erro que esta aparecendo ai,

coloca o componente no formulário (idhttp), não coloca nenhuma propriedade e apenas seta como no código abaixo, suave amigo, abraço.

 


var:
	RequestBody: TStream;
    lResponse : TStringStream;
	ZipEncode : String;
begin

....
	// Codifica o zip:
	ZipEncode := '"' + EncodeFile(NomeZIP) + '"';

	// deixa o idhttp dessa forma:
    lResponse := TStringStream.Create();
    RequestBody := TStringStream.Create(ZipEncode, TEncoding.UTF8);
    try
    	idHttp1.Request.ContentType := 'application/json';
        IdHTTP1.Request.CustomHeaders.Clear;
        IdHttp1.Request.CustomHeaders.AddValue('Accept', 'application/json');
        IdHttp1.Request.CustomHeaders.AddValue('Host', 'https://tributario.sef.sc.gov.br');
        IdHttp1.Request.CustomHeaders.AddValue('Cache-Control', 'no-cache');
        IdHttp1.Request.CustomHeaders.AddValue('Content-Type', 'application/json');
        idHttp1.Post('https://tributario.sef.sc.gov.br/api/drcSt/arquivo/ValidarEstrutura', RequestBody, lResponse);


        lResponse.Position := 0;

        // Trata o retorno em um richedit:
        reResp.Lines.LoadFromStream(lResponse);

      finally
        lResponse.Free();
      end;

 

@JonasBollis Obrigado!

Consegui resolver o problema, era apenas as  aspas duplas no inicio e no fim depois de convertido em base64.

Descobri pela postagem abaixo.

Agradeço a informação!

 

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...
Em 13/05/2019 at 16:15, DouglasGV disse:

@JonasBollis Obrigado!

Consegui resolver o problema, era apenas as  aspas duplas no inicio e no fim depois de convertido em base64.

Descobri pela postagem abaixo.

Agradeço a informação!

 

 

 

Bom dia a todos.

Estou tentando implementar essa solução e avaliando vários posts que encontrei aqui no forum, implementei a seguinte solução:

var
   lHTTP: TIdHTTP;
   lRequisicao: TStream;
   lArquivo: TMemoryStream;
   lRetorno: TStringStream;
   lArquivoCompactado: string;
   lHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
   lHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
   lHandler.SSLOptions.Method      := sslvSSLv23;
   lHandler.SSLOptions.Mode        := sslmUnassigned;
   lHandler.SSLOptions.VerifyMode  := [];
   lHandler.SSLOptions.VerifyDepth := 0;
   lHandler.host                   := '';

   lHTTP := TIdHTTP.Create(nil);
   lHTTP.IOHandler := lHandler;
   lHTTP.HandleRedirects := TRUE;
   lHTTP.request.ContentType := 'application/json';

   lRetorno := TStringStream.Create('');
   lArquivo := TMemoryStream.Create;

   try
      lArquivo.LoadFromFile(jvDiretorio.Text);
      lArquivoCompactado := '"' + EncodeBase64(ReadStrFromStream(lArquivo, lArquivo.Size)) + '"';
      lRequisicao := TStringStream.Create(UTF8Encode('teste'));
      
      lHTTP.Post('https://tributario.sef.sc.gov.br/api/drcSt/arquivo/ValidarEstrutura', lRequisicao, lRetorno);

      if lHTTP.Response.ResponseCode = 200 then
      begin
         ShowMessage('Homologação do arquivo realizada com sucesso');
      end
      else
      begin
         ShowMessage('Não foi possivel realizar a homologação do arquivo! ' + lHTTP.Response.ResponseText).Show;
      end;
   finally
      lHTTP.Free;
      lArquivo.Free;
      lRetorno.Free;
      lHandler.Free;
   end;
end;

Ocorre que, ao realizar a transmissão, estou tendo como erro a seguinte mensagem:

Error connecting with SSL.
EOF was observed that violates the protocol.

Saberiam me informar como contornar essa situação?

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1280 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.