Jump to content

Delphi chamada_delphi.png acbr.png

C6 chamada_c6.png botao.png

Envio do arquivo DRCST


DouglasGV
Go to solution Solved by DouglasGV,
  • Este tópico foi criado há 605 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.

  • Like 1
Link to comment
Share on other 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;

 

  • Like 2
Link to comment
Share on other 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!

 

 

  • Like 2
Link to comment
Share on other sites

  • 1 year later...
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 to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.