Cita:
Empezado por keys
Yo no he conseguido enviarlo directamente como tu estas haciendo. Lo que hacemos es en el evento OnBeforeExecute generar otro fichero en BASE64 y enviarlo.
Código Delphi [-]
var
ss:TFileStream;
i : Integer;
NficheroTemp : STring;
ListaFichero : TStringList;
Base64: TBase64Encoding;
Salida : Ansistring;
begin
NficheroTemp := Copy(Fichero, 1 , Length(Fichero) - 4) + 'TMP.XML';
ListaFichero := TStringList.Create;
ListaFichero.LoadFromFile(Fichero);
Base64 := TBase64Encoding.Create;
Salida := Base64.Encode(ListaFichero.Text);
Base64.Destroy;
ListaFichero.Clear;
ListaFichero.Add('');
ListaFichero.Add('tb="https://ptbai.ticketbai.eus">');
ListaFichero.Add('');
ListaFichero.Add('');
ListaFichero.Add('');
ListaFichero.Add('');
ListaFichero.Add('');
ListaFichero.Add(salida);
ListaFichero.Add('');
ListaFichero.Add('');
ListaFichero.Add('');
ListaFichero.Add('');
if FileExists(NficheroTemp) then
System.SysUtils.DeleteFile(NficheroTemp);
ListaFichero.SaveToFile(NficheroTemp);
ListaFichero.Destroy;
SOAPRequest.Size := 0;
ss := TFileStream.Create(NFicheroTemp, System.SysUtils.fmOpenRead);
SOAPRequest.Position := 0;
SOAPRequest.CopyFrom( ss, ss.Size);
ss.Free;
SOAPRequest.Position := 0;
if FileExists(NficheroTemp) then
System.SysUtils.DeleteFile(NficheroTemp);
|
Gracias por la info, he creado un proceso BeforeExecute y ya va. Sí en verdad es como el SII, pero ni lo he analizado bien, estoy atontado. Muchas gracias estaba bloqueado.
Os pongo el proceso entero por si os vale de algo.
Código:
procedure TFrmMain.BeforeExecute(const MethodName: string;
SOAPRequest: TStream);
var
ss:TFileStream;
begin
SOAPRequest.Size:=0;
ss:=TFileStream.Create(RutaFicheroEnvio, fmOpenRead);
SOAPRequest.Position := 0;
SOAPRequest.CopyFrom( ss, ss.Size);
ss.Free;
SOAPRequest.Position := 0;
end;
procedure TFrmMain.ButtonEnviarServiceClick(Sender: TObject);
var
HTT_PRIO: THTTPRIO;
Envio: VerificarTicketBaiRequest;
Respuesta: VerificarTicketBaiResponse;
ArchivoDestino: String;
begin
try
ArchivoDestino := ExtractFilePath(EdtRutaFicheroXML.Text) + StringReplace(ExtractFileName(EdtRutaFicheroXML.Text), ExtractFileExt(EdtRutaFicheroXML.Text), '', [rfReplaceAll, rfIgnoreCase])
+ 'Base64' + ExtractFileExt(EdtRutaFicheroXML.Text);
RutaFicheroEnvio := ArchivoDestino;
HTT_PRIO := THTTPRIO.Create(nil);
HTT_PRIO.OnBeforeExecute := BeforeExecute;
SetLength(Envio, 1);
Envio[0] := TFile.ReadAllBytes(RutaFicheroEnvio);
Respuesta := B4PT.GetptbaiSOAP(False, 'https://ticketbai.eus/B4PT000MWeb/B4PT?wsdl', HTT_PRIO).verificarTicketBai(Envio);
ShowMessage(Respuesta[0].codigoSeguimiento);
except on E: Exception do
ShowMessage(e.ToString);
end;
end;