Ver Mensaje Individual
  #79  
Antiguo 29-11-2019
Avatar de elcharlie
elcharlie elcharlie is offline
Miembro
 
Registrado: mar 2013
Ubicación: Bilbao
Posts: 174
Reputación: 12
elcharlie Va por buen camino
Cita:
Empezado por keys Ver Mensaje
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

  //FIChero es el fichero original 
  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;

Última edición por elcharlie fecha: 29-11-2019 a las 12:14:43.
Responder Con Cita