Seguem os códigos:
function ValidarArquivo: Boolean;
begin
Result := True;
if tArqXml.Text = '' then begin
MessageBox('Erro! Arquivo Vazio');
Result := False;
end;
if not XmlEstaAssinado(tArqXml.Text) then begin
MessageBox('Erro! Arquivo sem assinatura');
Result := False;
end;
end;
function XML_Validar: boolean;
begin
Result := False;
if not ValidarArquivo then
Exit;
WSValidar := trBlocoX.WebServices.ValidarBlocoX;
WSValidar.XML := tArqXml.Text ;
WSValidar.ValidarPafEcfEEcf := False;
if WSValidar.Executar then
Result := True
else
wrequest(WSValidar.RetWS);
end;
function XML_Transmitir: boolean;
var
FileStream: TMemoryStream;
begin
Result := False;
if not ValidarArquivo then
Exit;
try
FileStream := TMemoryStream.Create;
FileStream.LoadFromFile(PastaGrav+ArqZip);
WSEnviar := trBlocoX.WebServices.EnviarBlocoX;
WSEnviar.XML := tArqXml.Text;
WSEnviar.XMLZipado := TransfBase64.EncodeStream(FileStream,FileStream.Size);
if WSEnviar.Executar then begin
Recibo:= wSEnviar.Recibo;
if Pos('Não gerado',Recibo) > 0 then begin
MessageBox('Erro ao enviar para WebService do Sefaz!'+#13+#13+
WSEnviar.RetWS);
end else begin
Result := True;
XML_GravaRecibo(1);
SalvaStringArquivo(WSEnviar.RetWs,
fMenu.PastaApl+'PAF-ECF\'+
iif(cds1.fieldbyname('codigo').asstring='REDUCAO',
'Recibos dos Arquivos com Informações da Reducao Z do PAF-ECF\',
'Recibos dos Arquivos com Informações do Estoque Mensal do Estabelecimento\')+
Recibo+'.xml');
Sleep(3000);
end;
end else
MessageBox('Erro ao enviar para WebService do Sefaz!')
finally
FileStream.Free;
DeleteFile(PastaGrav+ArqZip);
end;
end;
procedure XML_ConsultaRecibo;
begin
WSConsultar := trBlocoX.WebServices.ConsultarBlocoX;
WSConsultar.Recibo := Recibo;
WSConsultar.Executar ;
if wsconsultar.SituacaoProcCod = 1 then begin
MessageBox('Arquivo com informações '+
iif(cds1.fieldbyname('codigo').asstring='REDUCAO',
'da Redução Z do PAF-ECF ','do Estoque Mensal do Estabelecimento ')+
'transmitido com sucesso!');
XML_GravaRecibo(9);
end else
MessageBox('Erro ao enviar para WebService do Sefaz!'+#13+#13+
wsconsultar.RetWS);
end;
Usei o componente IdEncoderMIME da paleta Indy pra converter para Base64.
Nenhuma função que peguei na internet ou no fórum funcionou.
Qualquer coisa, pergunta ai.