Jump to content

Delphi chamada_delphi.png acbr.png

C6 chamada_c6.png botao.png

Envio do arquivo .zip em base64 DRCST


Rafael Vivan
Go to solution Solved by Alexandre Diamante,
  • Este tópico foi criado há 1106 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

Bom dia!

Pessoal estou com dificuldades para enviar o arquivo DRCST.

Envio via REST.

Toda tentativa de envio, ocorre a rejeição:

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

Alguém tem alguma ideia de como resolver?

Em anexo o arquivo do SEF SC indicando como deve ser feito.

Código:

procedure TFValidador.ValidaArquivo;
var
   Ret: TStringStream;
   Zip: TMemoryStream;
   Zip2 : TStrings;
   AZip, Compactado: AnsiString;
   DRCST : String;
begin
   DRCST := 'DRCST';
   Ret := TStringStream.Create('');
   Zip := TMemoryStream.Create;
   try
      try
         idHttp.Request.Clear;
         idHttp.Request.ContentType := 'application/json';
         idhttp.Request.Charset := 'utf-8';
         idHttp.Response.ResponseText := 'utf-8';
         idHttp.BoundPortMax := 5000;
         idHttp.Request.Connection  := 'keep-alive';
         idHttp.Request.UserAgent   := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36';
         idHttp.Request.CacheControl := 'no-cache';
         idHttp.Request.Accept:= 'text/xml';
         IdHttp.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
         Zip.LoadFromFile(EdtCaminho.Text); /////caminho do arquivo .zip
         EncodeStream(Zip, Zip);
         IdHTTP.Post('https://tributario.sef.sc.gov.br/api/drcSt/arquivo/ValidarEstrutura', Zip, Ret);
         Memo2.Text := Ret.DataString;
       except
        on E: Exception do
          Memo2.Text:= ('Erro encontrado: ' + E.Message);
       end;
   finally
      Zip.Free;
      Ret.Free;
   end;

end;

 

Ambiente validação.docx

Link to comment
Share on other sites

  • Membros Pro
16 horas atrás, Rafael Dias disse:

Tente usar a função ReadStrFromStream da unit synautil e a função EncodeBase64 da synacode. Ex.:

FPDadosMsg := EncodeBase64(ReadStrFromStream(Zip));

 

Bom dia.

Mesmo assim não consegui fazer funcionar.

Alguma outra dica?

O arquivo zip precisa ser enviado em base64.

var
   Ret: TStringStream;
   Zip: TMemoryStream;
   Zip2 : TStrings;
   AZip, Compactado: AnsiString;
   DRCST : String;
begin
   DRCST := 'DRCST';
   Ret := TStringStream.Create('');
   Zip := TMemoryStream.Create;
   try
      try
         idHttp.Request.Clear;
         idHttp.Request.ContentType := 'application/json';
         idhttp.Request.Charset := 'utf-8';
         idHttp.Response.ResponseText := 'utf-8';
         idHttp.BoundPortMax := 5000;
         idHttp.Request.Connection  := 'keep-alive';
         idHttp.Request.UserAgent   := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36';
         idHttp.Request.CacheControl := 'no-cache';
         idHttp.Request.Accept:= 'text/xml';
         IdHttp.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
         Zip.LoadFromFile(EdtCaminho.Text); /////caminho do arquivo .zip
         Azip := EncodeBase64(ReadStrFromStream(Zip, Zip.Size));
         IdHTTP.Post('https://tributario.sef.sc.gov.br/api/drcSt/arquivo/ValidarEstrutura', Azip, Ret);
         Memo2.Text := Ret.DataString;
       except
        on E: Exception do
          Memo2.Text:= ('Erro encontrado: ' + E.Message);
       end;
   finally
      Zip.Free;
      Ret.Free;
   end;

end;

Link to comment
Share on other sites

  • Membros Pro
1 hora atrás, Rafael Dias disse:

Olha então seu problema é outro pois, usamos estas funções para enviar as NFe zipada e em Base64 e funciona corretamente.

 

Bom dia.
blz, este seu exemplo:
FPDadosMsg seria em qual formato a variável?  

As informações que tenho são essas:

  • A troca de mensagens entre o aplicativo cliente e o Web Service do SAT será realizada utilizando Representational State Transfer (REST), sobre o protocolo HTTP (usando os verbos, accept headers, códigos de estado HTTP, Content-Type) definidos na especificação do mesmo.

  • O formato para o intercâmbio das informações dentro das mensagens será JSON (JavaScript Object Notation).

Onde está disponível?

 

O Web Service de validação do arquivo DRCST está disponível no endereço:

https://tributario.sef.sc.gov.br/api/drcSt/arquivo/ValidarEstrutura

 

 

 

Link to comment
Share on other sites

  • Fundadores

Você compactou com no formato ZIP (Zip File)?

Geralmente WebServices esperam receber arquivos no formato GZIP...

Tente os métodos de compactação que estão disponíveis na ACBrUtil.pas

function UnZip(S: TStream): AnsiString; overload;
function UnZip(const ABinaryString: AnsiString): AnsiString; overload;
function Zip(AStream: TStream): AnsiString; overload;
function Zip(const ABinaryString: AnsiString): AnsiString; overload;

 

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link to comment
Share on other sites

  • Membros Pro
Em 30/04/2019 at 19:01, Daniel Simoes disse:

Você compactou com no formato ZIP (Zip File)?

Geralmente WebServices esperam receber arquivos no formato GZIP...

Tente os métodos de compactação que estão disponíveis na ACBrUtil.pas

function UnZip(S: TStream): AnsiString; overload;
function UnZip(const ABinaryString: AnsiString): AnsiString; overload;
function Zip(AStream: TStream): AnsiString; overload;
function Zip(const ABinaryString: AnsiString): AnsiString; overload;

 

 

Boa tarde, testei com essas e também com outras encontradas na internet.

Vou entrar em contato com eles da Secretaria, e conferir o que pode ser.

  • Like 1
Link to comment
Share on other sites

  • Solution

Boa Tarde, Amigo tive o mesmo problema no seu arquivo base64 vc tem que colocar as aspas no inicio e fim do arquivo que resolve.    
Tente Enviar esse arquivo embaixo usando as aspas dupla no inicio e fim do arquivo = 

 

 


se mandar sem as aspas da essa mensagem de erro:

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

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

  • Administradores

Boa tarde pessoal,

Tenho uma dica importante para vocês a fim de evitar replicar postagens que já estão bem longas.
Utilizem o @Nome_do_ Usuário para citar os mesmos, assim facilita a leitura do tópico.

Att.

  • Like 1
Consultora SAC ACBr

Juliana Tamizou
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link to comment
Share on other sites

×
×
  • 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.