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-03-2023
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Poder: 14
iMia Va por buen camino
Hola Serpic,

Tienes razón, no puse la función de asignación del certificado

Ahí va..

Código Delphi [-]

procedure TMainForm.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 no está registrada correctamente.')
  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, 4096) = False then
    raise Exception.Create ( 'Error al asignar el certificado de cliente' )
end;

Como se ve en el código inicial, hay que importar la libreria CAPICOM.DLL (y registrarla en cada equipo que se vaya a utilizar la app) y generar el TLB y así se pueden utilizar las constantes de CAPICOM

Saludos...


P.D.: Espero no tengas los problemas que estoy experimentando en alqunas máquinas. en el Hilo: https://www.clubdelphi.com/foros/sho...d.php?p=550756

Saludos.

Última edición por iMia fecha: 16-03-2023 a las 08:34:23.
Responder Con Cita
  #2  
Antiguo 16-03-2023
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Poder: 14
iMia Va por buen camino
Cita:
Empezado por iMia Ver Mensaje
Hola Serpic,

Tienes razón, no puse la función de asignación del certificado

Ahí va..

Código Delphi [-]

procedure TMainForm.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 no está registrada correctamente.')
  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, 4096) = False then
    raise Exception.Create ( 'Error al asignar el certificado de cliente' )
end;

Como se ve en el código inicial, hay que importar la libreria CAPICOM.DLL (y registrarla en cada equipo que se vaya a utilizar la app) y generar el TLB y así se pueden utilizar las constantes de CAPICOM

Saludos...


P.D.: Espero no tengas los problemas que estoy experimentando en alqunas máquinas. en el Hilo: https://www.clubdelphi.com/foros/sho...d.php?p=550756

Saludos.
Atención!!
la llamada de carga del certificado es incorrecta...

deberia ser:

Código Delphi [-]
Cert.Load(FileName, Password, CAPICOM_KEY_STORAGE_EXPORTABLE, CAPICOM_CURRENT_USER_KEY);
Responder Con Cita
  #3  
Antiguo 12-02-2024
muli muli is offline
Miembro
 
Registrado: jun 2003
Ubicación: A Coruña
Posts: 194
Poder: 21
muli Va por buen camino
Tambien da error a la compilar

Código Delphi [-]
En esta function  VNifV2(const VNifV2Ent: VNifV2Ent): VNifV2Sal; stdcall;

No encuentra VNifV2Ent): VNifV2Sal;

Y aqui 

  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(VNifV2), '');
  InvRegistry.RegisterInvokeOptions(TypeInfo(VNifV2), ioDocument);
  InvRegistry.RegisterInvokeOptions(TypeInfo(VNifV2), ioLiteral);

[dcc32 Error] VNifV21.pas(97): E2134 Type 'VNifV2' has no type info
__________________
SI UN PROBLEMA TIENE SOLUCION, YA NO ES UN PROBLEMA, Y SI NO LA TIENE PARA QUE PREOCUPARSE.
Responder Con Cita
  #4  
Antiguo 13-03-2024
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.030
Poder: 22
keys Va por buen camino
Para poder hacer operaciones intracomunitarias una empresa tiene que estar dada de alta en el VIES. Existe un servicio web para validar si una empresa esta o no dentra del VIES https://ec.europa.eu/taxation_custom...vat-validation es una manera de validar si un cif intracomunitario es correcto o no.
Responder Con Cita
  #5  
Antiguo 13-03-2024
Avatar de keys
keys keys is offline
Miembro
 
Registrado: sep 2003
Ubicación: Bilbao
Posts: 1.030
Poder: 22
keys Va por buen camino
Pongo el código por si a alguien le interesa.

Código Delphi [-]

 //Pais son las letras del codigo del pais
function ComprobarDocumentoVIES(Pais, Documento: string): boolean;
var
  LRequest: THTTPClient;

  LResponse: TStringStream;
  JSONData: TJSONObject;
  StringStream: TStringStream;
  valido : Boolean;
begin

  result := false;
  LRequest := THTTPClient.Create;
  LResponse := TStringStream.Create;


  JSONData := TJSONObject.Create;

  JSONData.AddPair('countryCode', Pais);
  JSONData.AddPair('vatNumber', Documento);

  
    Lrequest.ContentType := 'application/json';
    StringStream := TStringStream.Create(JSONData.ToString, TEncoding.UTF8);
    LRequest.SecureProtocols := [THTTPSecureProtocol.TLS12];
    LRequest.Post('https://ec.europa.eu/taxation_customs/vies/rest-api/check-vat-number', StringStream , LResponse);
    JSONData := TJSONObject.ParseJSONValue(LResponse.DataString) as TJSONObject;

    if Assigned(JSONData) then
      begin
        // Obtener el valor del campo deseado de la respuesta que es el valid
         if JSONData.TryGetValue('valid', valido) then
          begin
            result := valido;
          end;
      end;

    JsonData.destroy;
    LResponse.Free;
    LRequest.Free;
    StringStream.Destroy;
 

end;
Responder Con Cita
  #6  
Antiguo 13-03-2024
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.471
Poder: 21
newtron Va camino a la fama
Gracias compañero.
__________________
Be water my friend.
Responder Con Cita
  #7  
Antiguo 13-03-2024
iMia iMia is offline
Miembro
 
Registrado: jul 2010
Posts: 141
Poder: 14
iMia Va por buen camino
El Wsdl ...

https:// ec.europa.eu/taxation_customs/vies/checkVatTestService.wsdl
Responder Con Cita
  #8  
Antiguo 13-03-2024
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por keys Ver Mensaje
Pongo el código por si a alguien le interesa.

Nosotros hasta ahora lanzábamos la página para validar manualmente, pero no está de más tener accesible la API.
Gracias.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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
Validar un XML r_e_g_2007 Varios 0 05-11-2011 08:00:21
validar RFC.. tebre Varios 12 06-01-2009 18:48:55
Validar Elite237 OOP 1 28-07-2007 23:25:30
Validar Nif Colgueit OOP 12 10-05-2006 02:50:28
validar en qry alcides SQL 2 06-01-2004 18:11:19


La franja horaria es GMT +2. Ahora son las 00:36:24.


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