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.761
Poder: 7
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
  #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
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
  #3  
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 14:22:54.
Responder Con Cita
  #4  
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
  #5  
Antiguo 26-06-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 2.761
Poder: 7
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
  #6  
Antiguo 26-06-2024
ermendalenda ermendalenda is offline
Miembro
 
Registrado: ago 2021
Posts: 2.761
Poder: 7
ermendalenda Va por buen camino
Hola, he visto que esto se está apagando un poco
Eso quiere decir que teneis poco curro con esto de la fiscalidad.
Pues hay novedades, con los ivas.
El aceite pasa al 0% y al grupo d eiva súper reducido. Eso es lo de menos

El 1 de octubre todo lo que esté al 0% por el Real decreto pasará al 2.5% de iva lo del 5% al 7.5% con sus correspondientes recargos de equivalencia aún por definir. Y a final de año se acaban los descuentos. Menos el aceite que se queda en iva súper reducido al 4%.
Lo mejor de todo esto es que tendremos que poner abajo de la factura el descuento que se esta obteniendo y mencion al Real decreto
Ánimo chavales.

Postdata:
Traspaso licencia de desarrollador

Última edición por ermendalenda fecha: 26-06-2024 a las 17:21:49.
Responder Con Cita
  #7  
Antiguo 26-06-2024
antoine0 antoine0 is offline
Miembro
 
Registrado: oct 2021
Posts: 260
Poder: 5
antoine0 Va por buen camino
Cita:
Empezado por ermendalenda Ver Mensaje
El 1 de octubre todo lo que esté al 0% por el Real decreto pasará al 2.5% de iva
En un gran esfuerza para animarte, el gobierno ha decidido redondear y dejar el IVA superreducido en octubre al 2%.
Responder Con Cita
  #8  
Antiguo 27-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
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
Si, es como que las modificaciones que se hagan el evento BeforeExecute, no las aplique en el envio. Da igual lo que modifiques que envia el SOAPRequest original.
Supongo que será un error que arreglaran en un futuro.
Responder Con Cita
  #9  
Antiguo 27-06-2024
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.229
Poder: 24
keys Va por buen camino
Y sus consiguientes cambios en los modelos de iva 390 y 303.
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 19:15:05
Agregar Adendas a Facturas electronicas mexico reypcs Varios 0 20-01-2011 16:26:10
Tabla de Facturas vs Detalles de Facturas magnu9 Conexión con bases de datos 9 27-07-2007 17:27:37
Comunicaciones electronicas EDI Toni Conexión con bases de datos 0 18-04-2006 13:06:34
Campos calculados, facturas y detalles de facturas. Letty Conexión con bases de datos 7 07-11-2003 11:19:44


La franja horaria es GMT +2. Ahora son las 02:24:09.


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