Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-02-2017
Francisco1973 Francisco1973 is offline
Miembro
 
Registrado: abr 2008
Posts: 10
Poder: 0
Francisco1973 Va por buen camino
Hola, como envio:

defWSDL:='https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroFactEmitidas.wsdl';
defSvc:='siiService';
defPrt:='SuministroFactEmitidasPruebas';

HTTPRIO1.WSDLLocation:=defWSDL;
HTTPRIO1.Service:=defSvc;
HTTPRIO1.Port:=defPrt;

CrearSumLRFacturasEmitidasTest(Peticion);
Resultado:=GetsiiSOAP(true,'',HTTPRIO1).SuministroLRFacturasEmitidas(Peticion);

Y el certificado: (es necesario tener registrado capicom.dll y la unidad CAPICOM_TLB

procedure TForm1.HTTPRIO1HTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp;Data: Pointer);
var
Store : IStore;
Certs : ICertificates;
Cert : ICertificate2;
CertContext : ICertContext;
PCertContext : PCCERT_CONTEXT;
V : OleVariant;
const
INTERNET_OPTION_CLIENT_CERT_CONTEXT = 84;
begin

V:=NombreCertificado; { subject del certificado instalado: Nombre de la empresa }

Store := CoStore.Create;
Store.Open(CAPICOM_CURRENT_USER_STORE, 'MY',CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED );
Certs:=Store.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME,V,False ); { Buscar certificado por nombre }
if Certs.Count > 0 then
begin
Cert:=IInterface(Certs.Item[1]) as ICertificate2;
CertContext:=Cert as ICertContext;
CertContext.Get_CertContext(Integer(PCertContext));
if InternetSetOption(Data,INTERNET_OPTION_CLIENT_CERT_CONTEXT,PCertContext,Sizeof(CERT_CONTEXT)) = False then
begin
ShowMessage( 'Internet SSL certificate. Something went wrong' );
end;
end;
end;
Responder Con Cita
  #2  
Antiguo 17-02-2017
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 112
Poder: 8
seccion_31 Va por buen camino
gracias Francisco1973

ese código funciona perfecto.

saludos !
Responder Con Cita
  #3  
Antiguo 17-02-2017
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.035
Poder: 22
keys Va por buen camino
Podeis subir un ejemplo completo en un proyecto delphi.

Gracias.
Responder Con Cita
  #4  
Antiguo 17-02-2017
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 112
Poder: 8
seccion_31 Va por buen camino
keys ...

simplemente añade este evento en tu objeto(S) thttprio, y en V:= coloca el nombre de tu certificado.
descarga y mira el adjunto que coloco y listo.

No tienes si quiera que quitar el código anterior para gestionar el certificado.

Saludos !

y por fa, siento ser pesado si alguien tiene algún ejemplo de facturas recibidas y emitidas de sujeto pasivo que lo postee. (lo que yo llamo la factura recibida, y su autofactura).



Código:
procedure TfEmitidas.emitidasHTTPWebNode1BeforePost(
  const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
     Store : IStore;
     Certs : ICertificates;
     Cert : ICertificate2;
     CertContext : ICertContext;
     PCertContext : PCCERT_CONTEXT;
     V : OleVariant;
 const
     INTERNET_OPTION_CLIENT_CERT_CONTEXT = 84;
 begin

     V:='  ***  EL NOMBRE DE TU CERTIFICADO ***';

     Store := CoStore.Create;
     Store.Open(CAPICOM_CURRENT_USER_STORE, 'MY',CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED );
     Certs:=Store.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME,V,False ); { Buscar certificado por nombre }
     if Certs.Count > 0 then
     begin
         Cert:=IInterface(Certs.Item[1]) as ICertificate2;
         CertContext:=Cert as ICertContext;
         CertContext.Get_CertContext(Integer(PCertContext));
         if InternetSetOption(Data,INTERNET_OPTION_CLIENT_CERT_CONTEXT,PCertContext,Sizeof(CERT_CONTEXT)) = False then
         begin
             ShowMessage( 'Internet SSL certificate. Something went wrong' );
         end;
     end;
 end;
Archivos Adjuntos
Tipo de Archivo: rar capicom.rar (166,7 KB, 226 visitas)
Responder Con Cita
  #5  
Antiguo 17-02-2017
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.035
Poder: 22
keys Va por buen camino
Puedes indicarme los includes para
Store : IStore;
Certs : ICertificates;
Cert : ICertificate2;
CertContext : ICertContext;

Estoy un poco espeso y no los encuentro.
Responder Con Cita
  #6  
Antiguo 17-02-2017
seccion_31 seccion_31 is offline
Miembro
 
Registrado: ene 2017
Posts: 112
Poder: 8
seccion_31 Va por buen camino
estan en el CAPICOM_TLB.pas (que he colocado en la descarga del post)

Responder Con Cita
  #7  
Antiguo 17-02-2017
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.035
Poder: 22
keys Va por buen camino
Lo primero gracias. Ya he conseguido enviar mas de 12 facturas a la vez. Sigo sin entender por que 12 si y 13, el certificado es el mismo. Pero bueno funciona que es lo que importa.

En cuanto a la factura recibida de inversión sujeto pasivo no he empezado a generar recibidas, será lo siguiente. Pero la norma dice lo siguiente :

4.4. ¿Cómo se registra una operación con inversión del sujeto pasivo (art. 84.Uno.2º y 4º de la Ley del IVA) siempre que tengan su origen en operaciones distintas a las adquisiciones intracomunitarias de bienes y servicios)?
El destinatario de la operación registrará los datos de la factura recibida consignando en el campo de tipo de operación la clave “S2: Sujeta – No Exenta – Inv. Suj. Pasivo”. Deberá calcular y consignar la cuota soportada correspondiente a dicha factura así como cumplimentar el campo “Cuota Deducible”. No registrará dato alguno en el Libro Registro de Facturas Expedidas.


No se cual es el problema.
Responder Con Cita
  #8  
Antiguo 21-03-2017
PepCat PepCat is offline
Miembro
 
Registrado: mar 2017
Posts: 96
Poder: 8
PepCat Va por buen camino
Cita:
Empezado por seccion_31 Ver Mensaje
keys ...
Código:
procedure TfEmitidas.emitidasHTTPWebNode1BeforePost(
  const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
     Store : IStore;
     Certs : ICertificates;
     Cert : ICertificate2;
     CertContext : ICertContext;
     PCertContext : PCCERT_CONTEXT;
     V : OleVariant;
 const
     INTERNET_OPTION_CLIENT_CERT_CONTEXT = 84;
 begin

     V:='  ***  EL NOMBRE DE TU CERTIFICADO ***';

     Store := CoStore.Create;
     Store.Open(CAPICOM_CURRENT_USER_STORE, 'MY',CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED );
     Certs:=Store.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME,V,False ); { Buscar certificado por nombre }
     if Certs.Count > 0 then
     begin
         Cert:=IInterface(Certs.Item[1]) as ICertificate2;
         CertContext:=Cert as ICertContext;
         CertContext.Get_CertContext(Integer(PCertContext));
         if InternetSetOption(Data,INTERNET_OPTION_CLIENT_CERT_CONTEXT,PCertContext,Sizeof(CERT_CONTEXT)) = False then
         begin
             ShowMessage( 'Internet SSL certificate. Something went wrong' );
         end;
     end;
 end;

A parte de poder buscar el certificado en el store como en el ejemplo anterior, que funciona perfectamente (muchas gracias por el post!)
también he visto que hay la opción de poder leer el certificado desde un fichero:


Código Delphi [-]

procedure SetCertificate(const FileName, Password: string; var Data: Pointer);
var
  Cert : ICertificate2;
  CertContext : ICertContext;
  PCertContext : PCCERT_CONTEXT;
begin
  try
    Cert := CoCertificate.Create;
  except
    on E: EOleSysError  do
      raise Exception.Create('CAPICOM.DLL is not registered')
  end;

  Cert.Load(FileName, Password, CAPICOM_KEY_STORAGE_EXPORTABLE, CAPICOM_LOCAL_MACHINE_KEY);
  CertContext := Cert as ICertContext;
  CertContext.Get_CertContext(Integer(PCertContext));
  if InternetSetOption(Data, INTERNET_OPTION_CLIENT_CERT_CONTEXT, PCertContext, Sizeof(CERT_CONTEXT)) = False then
    raise Exception.Create ( 'Error setting "' + FileName + '" certificate in web service' )
end;

procedure TfEmitidas.emitidasHTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
begin
  SetCertificate('', '', Data);
end;


P.D. Muchas gracias a todos los que colaboráis en este forum, que me habéis ayudado muchísimo en afrontar este tema.
Responder Con Cita
  #9  
Antiguo 21-03-2017
inyu inyu is offline
Miembro
NULL
 
Registrado: mar 2017
Posts: 48
Poder: 0
inyu Va por buen camino
Buenas tardes. Al fin he logrado establecer comunicación con el WS, pero me da un error muy simple (campo obligatorio NIF no informado).

¿ Se rellena en algún otro sitio el NIF que no me lo esté cogiendo a parte de estos 2 ?

_RegistroLRFacturasEmitidas(i).IDFactura.IDEmisorFactura.NIF = "B17654XXX"
_RegistroLRFacturasEmitidas(i).FacturaExpedida.Contraparte.NIFRepresentante = "A17135XXX"

Gracias.
Responder Con Cita
  #10  
Antiguo 21-03-2017
bartag bartag is offline
Miembro
NULL
 
Registrado: feb 2017
Posts: 11
Poder: 0
bartag Va por buen camino
Cita:
Empezado por inyu Ver Mensaje
Buenas tardes. Al fin he logrado establecer comunicación con el WS, pero me da un error muy simple (campo obligatorio NIF no informado).

¿ Se rellena en algún otro sitio el NIF que no me lo esté cogiendo a parte de estos 2 ?

_RegistroLRFacturasEmitidas(i).IDFactura.IDEmisorFactura.NIF = "B17654XXX"
_RegistroLRFacturasEmitidas(i).FacturaExpedida.Contraparte.NIFRepresentante = "A17135XXX"

Gracias.
Creo que te falta el NIF de la contraparte. Éste se suministra a través del .Contraparte.Item:

_SuministroLRFacturasEmitidas.RegistroLRFacturasEmitidas(0).FacturaExpedida.Contraparte.Item = Trim(TextBoxNIF.Text)

Además está el que ya tienes asignado (IDEmisorFactura.NIF):

_SuministroLRFacturasEmitidas.RegistroLRFacturasEmitidas(0).IDFactura.IDEmisorFactura.NIF = Trim(TextBoxNIFEmisor.Text)
Responder Con Cita
  #11  
Antiguo 18-08-2022
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 151
Poder: 8
nincillo Va por buen camino
Cita:
Empezado por Francisco1973 Ver Mensaje
Hola, como envio:

defWSDL:='https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroFactEmitidas.wsdl';
defSvc:='siiService';
defPrt:='SuministroFactEmitidasPruebas';

HTTPRIO1.WSDLLocation:=defWSDL;
HTTPRIO1.Service:=defSvc;
HTTPRIO1.Port:=defPrt;

CrearSumLRFacturasEmitidasTest(Peticion);
Resultado:=GetsiiSOAP(true,'',HTTPRIO1).SuministroLRFacturasEmitidas(Peticion);

Y el certificado: (es necesario tener registrado capicom.dll y la unidad CAPICOM_TLB

procedure TForm1.HTTPRIO1HTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp;Data: Pointer);
var
Store : IStore;
Certs : ICertificates;
Cert : ICertificate2;
CertContext : ICertContext;
PCertContext : PCCERT_CONTEXT;
V : OleVariant;
const
INTERNET_OPTION_CLIENT_CERT_CONTEXT = 84;
begin

V:=NombreCertificado; { subject del certificado instalado: Nombre de la empresa }

Store := CoStore.Create;
Store.Open(CAPICOM_CURRENT_USER_STORE, 'MY',CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED );
Certs:=Store.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME,V,False ); { Buscar certificado por nombre }
if Certs.Count > 0 then
begin
Cert:=IInterface(Certs.Item[1]) as ICertificate2;
CertContext:=Cert as ICertContext;
CertContext.Get_CertContext(Integer(PCertContext));
if InternetSetOption(Data,INTERNET_OPTION_CLIENT_CERT_CONTEXT,PCertContext,Sizeof(CERT_CONTEXT)) = False then
begin
ShowMessage( 'Internet SSL certificate. Something went wrong' );
end;
end;
end;
Siento revivir este post tan antiguo, pero estoy intentando utilizarlo el D2007 y no consigo compilarlo porque me da error en:
Código:
var
PCertContext : PCCERT_CONTEXT;
No reconoce PCCERT_CONTEXT.

Y en:
Código:
if InternetSetOption(Data,INTERNET_OPTION_CLIENT_CERT_CONTEXT,PCertContext,Sizeof(CERT_CONTEXT)) = False then
      begin
        ShowMessage( 'Internet SSL certificate. Something went wrong' );
      end;
    end;
No reconoce CERT_CONTEXT.

¿Me faltará poner algún USES o algo?

Gracias y un saludo.
Responder Con Cita
  #12  
Antiguo 18-08-2022
Javierus Javierus is offline
Miembro
 
Registrado: jun 2017
Posts: 88
Poder: 7
Javierus Va por buen camino
Yo lo uso en D2007, y tengo en el uses la unidad wcrypt2.pas, que puedes encontrar aquí:
https://github.com/delphiunderground/eid-mw-sdk-delphi
Responder Con Cita
  #13  
Antiguo 18-08-2022
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 151
Poder: 8
nincillo Va por buen camino
Cita:
Empezado por Javierus Ver Mensaje
Yo lo uso en D2007, y tengo en el uses la unidad wcrypt2.pas, que puedes encontrar aquí:
https://github.com/delphiunderground/eid-mw-sdk-delphi
Muchas gracias por tu ayuda. Ahora parece que ya no merca error en esas dos líneas, pero ahora me lo marca en:

Código:
Certs:=Store.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME,V,False ); { Buscar certificado por nombre }
Que me dice que no que existe "Find". Solo aparecen .Item y .Count, pero no .Find.
Responder Con Cita
  #14  
Antiguo 19-08-2022
Javierus Javierus is offline
Miembro
 
Registrado: jun 2017
Posts: 88
Poder: 7
Javierus Va por buen camino
Te he creado un gist en GitHub con el CAPICOM_TLB.pas que me generó a mí al importar la DLL; ahí sí tiene el Find
Espero que te sirva

https://gist.github.com/JavierusTk/0...1096eb746b07cf
Responder Con Cita
  #15  
Antiguo 19-08-2022
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 151
Poder: 8
nincillo Va por buen camino
Cita:
Empezado por Javierus Ver Mensaje
Te he creado un gist en GitHub con el CAPICOM_TLB.pas que me generó a mí al importar la DLL; ahí sí tiene el Find
Espero que te sirva

https://gist.github.com/JavierusTk/0...1096eb746b07cf
Muchas gracias compañero!!!. Esta tiene muchas más opciones que la que tenía yo... Find, Select, Add, Remove, Clear y Save en mi CAPICOM_TLB no existían y eso que pnoer que es la versión 2.1 igual que la tuya. En fin, menos mal que me la has pasado. Muchas gracias de nuevo.

El verificar los nif de los clientes ya lo puede hacer todo desde D2007.

Ahora, si no lo he entendido mal, para poder enviar las facturas a FacturaE y en el futuro a Verifactu, solo me falta conseguir firmar las cabeceras de las peticiones SOAP antes de lanzar la petición. ¿Estoy en lo correcto?. ¿Alguien puede confirmarme que sea posible hacerlo desde D2007?
Responder Con Cita
  #16  
Antiguo 02-09-2022
Noe277 Noe277 is offline
Miembro
 
Registrado: jul 2017
Posts: 72
Poder: 7
Noe277 Va por buen camino
Clave operación

Buenas,

Tengo una duda la clave de operación: 18 operaciones incluidas en Régimen de Recargo de equivalencia. ¿ Cuando se usa?

¿Si la empresa esta acogida a RE aunque la factura de ventas no este con RE se usa esa clave?
Responder Con Cita
Respuesta



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
TICKET BAI (TicketBAI); Nuevo sistema de la Agencia Tributaria del Pais Vasco keys Internet 4170 Hace 2 Semanas 17:29:05
AEAT envio de datos vía Webservice problemas con WSDL CelsoO Internet 11 09-10-2019 20:03:41
webService Soap de la Administración Digital Española notific@ apicito Internet 3 31-01-2017 11:25:28
Error en Webservice funcion envio de sms webmasterplc Delphi para la web 5 25-07-2013 20:10:29
Problemas con envío de XML a un WebService davidvamo Internet 1 13-02-2007 15:49:20


La franja horaria es GMT +2. Ahora son las 05:43:58.


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