Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-06-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 2.766
Poder: 8
ermendalenda Va por buen camino
Hola.
Firmas el soap de la petición?
Responder Con Cita
  #2  
Antiguo 25-06-2024
Avatar de elcharlie
elcharlie elcharlie is offline
Miembro
 
Registrado: mar 2013
Ubicación: Bilbao
Posts: 193
Poder: 14
elcharlie Va por buen camino
Cita:
Empezado por ermendalenda Ver Mensaje
Hola.
Firmas el soap de la petición?
Firmo el header del soap en el OnBeforeExecute del objeto THTTPRIO.
Pero vamos, que eso funcionaba bien....
Responder Con Cita
  #3  
Antiguo 25-06-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 2.766
Poder: 8
ermendalenda Va por buen camino
Cita:
Empezado por elcharlie Ver Mensaje
Firmo el header del soap en el OnBeforeExecute del objeto THTTPRIO.
Pero vamos, que eso funcionaba bien....
Es raro. Ese error da si intentas mandar un soap sin firma.
Otra cosa es que te diga que no existe usuario asociado al certificado. Que entonces estaría bien firmada pero no te has dado de alta

No parece que se esté firmando la petición, revisa que el certificado está correcto
Responder Con Cita
  #4  
Antiguo 25-06-2024
Avatar de elcharlie
elcharlie elcharlie is offline
Miembro
 
Registrado: mar 2013
Ubicación: Bilbao
Posts: 193
Poder: 14
elcharlie Va por buen camino
Cita:
Empezado por ermendalenda Ver Mensaje
Es raro. Ese error da si intentas mandar un soap sin firma.
Otra cosa es que te diga que no existe usuario asociado al certificado. Que entonces estaría bien firmada pero no te has dado de alta

No parece que se esté firmando la petición, revisa que el certificado está correcto
Veo el xml resultante y esta firmado. Ya no sé...
LLevo toda la mañana y no veo la luz.
Responder Con Cita
  #5  
Antiguo 25-06-2024
Avatar de elcharlie
elcharlie elcharlie is offline
Miembro
 
Registrado: mar 2013
Ubicación: Bilbao
Posts: 193
Poder: 14
elcharlie Va por buen camino
A ver si alguien me puede ayudar, porque ya no sé que esto haciendo mal.
Esto es lo que hago, firmo con secure black box

Código Delphi [-]
procedure TFrMain.ButtonEjecutarClick(Sender: TObject);
var
  SoapHeader: TSOAPHeader;
  SOAPRequester: FacturaSSPPWebServiceProxyPort;
  I: Integer;
  DatoEntrada: string;

  ConsultarUnidadesRespuesta: ConsultarRelacionesResponse;
  ConsultarRelacionesPorAdministracionRespuesta: ConsultarRelacionesPorAdministracionResponse;
  ConsultarNIFsRespuesta: ConsultarNIFsResponse;
  ConsultarNIFsPorAdministracionRespuesta: ConsultarNIFsPorAdministracionResponse;
  ConsultarEstadoRespuesta: ConsultarEstadosResponse;

  ReceiverEnviarFactura: EnviarFacturaResponse;
  SenderEnviarFactura: EnviarFacturaRequest;
  Anexos: ArrayOfAnexoFile;
  Anexo: AnexoFile;
  SelecFile: TOpenDialog;

  ConsultarFacturaRespuesta: ConsultarFacturaResponse;
begin
  try
    TxtResult.Lines.Clear;

    GD_HTT_PRIO := THTTPRIO.Create(nil);

    GD_HTT_PRIO.WSDLLocation := DEF_FWSDL_PRUEBAS;
    GD_HTT_PRIO.URL := DEF_URL_PRUEBAS;
    GD_HTT_PRIO.Service := DEF_SERVICE_PRUEBAS;
    GD_HTT_PRIO.Port := DEF_PORT_PRUEBAS;

    SoapHeader := TSOAPHEADER.create;
    GD_HTT_PRIO.SOAPHeaders.Send(SoapHeader);

    TCustomProcedureFACE.NumSerial := BinToStr((ComboBoxCertificadosEnvio.Items.Objects[ComboBoxCertificadosEnvio.ItemIndex] as TsbxCertificate).SerialNumber);
    TCustomProcedureFACE.RutaResultado := EdtRutaRespuesta.Text;

    GD_HTT_PRIO.HTTPWebNode.ClientCertificate.SerialNum := BinToStr((ComboBoxCertificadosEnvio.Items.Objects[ComboBoxCertificadosEnvio.ItemIndex] as TsbxCertificate).SerialNumber);

    GD_HTT_PRIO.OnBeforeExecute := TCustomProcedureFACE.BeforeExecute;
    GD_HTT_PRIO.OnAfterExecute := TCustomProcedureFACE.AfterExecute;

    SOAPRequester := (GD_HTT_PRIO as FacturaSSPPWebServiceProxyPort);

    case ComboBoxFunciion.ItemIndex of
      0: begin //Consultar Unidades
        ConsultarUnidadesRespuesta := SOAPRequester.consultarUnidades;

        if (Trim(ConsultarUnidadesRespuesta.resultado.codigo) = '0') then
        begin
          for I := Low(ConsultarUnidadesRespuesta.relaciones) to High(ConsultarUnidadesRespuesta.relaciones) do
          begin
            TxtResult.Lines.Add('Oficina Contable: ' + ConsultarUnidadesRespuesta.relaciones[i].oficinaContable.codigo +
              ' ' + ConsultarUnidadesRespuesta.relaciones[i].oficinaContable.nombre);
            TxtResult.Lines.Add('Organo Gestor: ' + ConsultarUnidadesRespuesta.relaciones[i].organoGestor.codigo +
              ' ' + ConsultarUnidadesRespuesta.relaciones[i].organoGestor.nombre);
            TxtResult.Lines.Add('Unidad Tramitadora: ' + ConsultarUnidadesRespuesta.relaciones[i].unidadTramitadora.codigo +
              ' ' + ConsultarUnidadesRespuesta.relaciones[i].unidadTramitadora.nombre);
            TxtResult.Lines.Add('');
          end;
        end
        else
        begin
          TxtResult.Lines.Add('ERROR:');
          TxtResult.Lines.Add(ConsultarUnidadesRespuesta.resultado.codigo + '-' +
            ConsultarUnidadesRespuesta.resultado.descripcion + ' (' +
            ConsultarUnidadesRespuesta.resultado.codigoSeguimiento + ')');
        end;
      end;

      1: begin //Consultar Unidades por Administracion
       .......

  SOAPRequester := nil;
    SoapHeader.Free;
    GD_HTT_PRIO := nil;

  except on E: Exception do
    ShowMessage('ButtonEjecutarClick: ' + e.ToString);
  end;
end;

y luego el onbefore y onafter

Código Delphi [-]
class procedure TCustomProcedureFACE.BeforeExecute(const MethodName: string;
  SOAPRequest: TStream);
var
  SS: TStringStream;
  FSOAPSigner: TsbxSOAPSigner;
  OutPut: TBytes;

  Cert : TsbxCertificate;
  I: Integer;

  function StreamToBytes(Stream: TStream): TBytes;
  begin
    SetLength(Result, Stream.Size);
    Stream.Position := 0;
    Stream.ReadBuffer(Result[0], Stream.Size);
  end;

 
begin
  try
    FSOAPSigner := TsbxSOAPSigner.Create(nil);
    FSOAPSigner.InputBytes := StreamToBytes(SOAPRequest);
    FSOAPSigner.OutputFile := RutaResultado + PathDelim + FILE_TEMP_OUTPUT;

    if trim(NumSerial) = EmptyStr then
    begin
      ShowMessage('Error SignXML: ' + 'No existe el Certificado');
      Exit;
    end;

    for I := 0 to GD_ListaCertificados.Count-1 do
    begin
      if BinToStr(GD_ListaCertificados[i].SerialNumber) = NumSerial then
      begin
        Cert := GD_ListaCertificados[i];
        Break;
      end;
    end;

    if not Assigned(Cert) then
    begin
      ShowMessage('Error SignXML: ' + 'No se encuentra el Certificado');
      Exit;
    end;

    FSOAPSigner.SigningCertificate := Cert;

    FSOAPSigner.NewSignature.SignatureType := sstWSSSignature;
    FSOAPSigner.NewSignature.HashAlgorithm := 'SHA1';
    FSOAPSigner.EmbedCertificateMethod := cwecInBinarySecurityToken;
    FSOAPSigner.Config('XMLFormatting=auto');

    //FSOAPSigner.AddBodyReference('', true);
    FSOAPSigner.Sign();

    if FileExists(RutaResultado + PathDelim + FILE_TEMP_OUTPUT) then
    begin
      SS := TStringStream.Create;
      SS.LoadFromFile(RutaResultado + PathDelim + FILE_TEMP_OUTPUT);

      FrMain.TxtRequest.Lines.Clear;
      FrMain.TxtRequest.Lines.Add(SS.DataString);
      FrMain.TxtRequest.Lines.Add('');

      SOAPRequest.Position := 0;
      SOAPRequest.CopyFrom(SS,SS.Size);

      SS.Free;
    end;

  except on E: Exception do
    ShowMessage('Error en BeforeExecute: ' + e.ToString);
  end;

end;


class procedure TCustomProcedureFACE.AfterExecute(const MethodName: string;
  SOAPResponse: TStream);
var
  SS: TStringStream;
begin
  try
    if FileExists(RutaResultado + PathDelim + FILE_RESULT_NAME) then
      DeleteFile(RutaResultado + PathDelim + FILE_RESULT_NAME);

    SS := TStringStream.Create('', TEncoding.UTF8);
    SOAPResponse.Position := 0;
    SS.CopyFrom(SOAPResponse, SOAPResponse.Size);
    FrMain.TxtResponse.Lines.Clear;
    FrMain.TxtResponse.Text := SS.DataString;
    SS.SaveToFile(RutaResultado + PathDelim + FILE_RESULT_NAME);
    SS.Free;
  except on E: Exception do
    ShowMessage('Error en AfterExecute: ' + e.ToString);
  end;
end;

A ver si alguien me puede echar una mano, porque esto da error "La petición no esta firmada"

Última edición por elcharlie fecha: 25-06-2024 a las 15:22:54.
Responder Con Cita
  #6  
Antiguo 26-06-2024
Avatar de elcharlie
elcharlie elcharlie is offline
Miembro
 
Registrado: mar 2013
Ubicación: Bilbao
Posts: 193
Poder: 14
elcharlie Va por buen camino
Bueno, pues ya está solucionado. No me digas el por qué, pero si lo compilo desde una version mas antigua de delphi, me funciona perfectamente, Pero en cambio desde Delphi 12.1, da error.
No sé si es un error del objeto THTTPRIO o, probablemente, algo que haya que configurar en las versiones nuevas. No sé. Si alguien se le ocurre algo, pues se agradeceria.
Responder Con Cita
  #7  
Antiguo 26-06-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 2.766
Poder: 8
ermendalenda Va por buen camino
Cita:
Empezado por elcharlie Ver Mensaje
Bueno, pues ya está solucionado. No me digas el por qué, pero si lo compilo desde una version mas antigua de delphi, me funciona perfectamente, Pero en cambio desde Delphi 12.1, da error.
No sé si es un error del objeto THTTPRIO o, probablemente, algo que haya que configurar en las versiones nuevas. No sé. Si alguien se le ocurre algo, pues se agradeceria.
Pues se me ocurre que es algo que no está correctamente registrado para el nuevo compilador. No creo que sea configuración de parámetros. Si nl más bien componentes dll, ocx... que tienen problemas
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Facturas Electronicas Argentina Chaja Varios 3 10-07-2015 20:15:05
Agregar Adendas a Facturas electronicas mexico reypcs Varios 0 20-01-2011 17:26:10
Tabla de Facturas vs Detalles de Facturas magnu9 Conexión con bases de datos 9 27-07-2007 18:27:37
Comunicaciones electronicas EDI Toni Conexión con bases de datos 0 18-04-2006 14:06:34
Campos calculados, facturas y detalles de facturas. Letty Conexión con bases de datos 7 07-11-2003 12:19:44


La franja horaria es GMT +2. Ahora son las 21:37:02.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi