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

 
 
Herramientas Buscar en Tema Desplegado
  #11  
Antiguo 28-10-2024
Avatar de bmfranky
bmfranky bmfranky is offline
Miembro
 
Registrado: may 2024
Ubicación: Gandia, Valencia
Posts: 863
Poder: 3
bmfranky Va por buen camino
Cita:
Empezado por JoseLeeTo Ver Mensaje
Buenos dias a todos.

Gracias en primer lugar por vuestra a ayuda. Pude desarrollar el envio TicketBai en su momento, gracias a este foro.

Tengo una duda al enviar. Trabajo con C# (Visual Studio 2015).
Cada vez que trato de enviar, obtengo siempre una respuesta en HTML, advirtiéndome que "el certificado no es correcto, o no se ha seleccionado correctamente" - Error 403.
He instalado el certificado en todos los navegadores que tengo, en el almacén de "Personal", pero a la hora de enviar, selecciono dicho certificado (es el mío personal de la FNMT - y es funcional dado que entro en las sedes perfectamente, he realizado la declaración con el mismo, etc...) .... pero la respuesta a través del código es un HTML (no un XML) con ese error 403.

¿Alguien ha logrado enviar sin problemas, teniendo el certificado instalado en el navegador? ¿Qué puede estar ocurriendo para que no esté validando mi certificado?

Mil gracias de antemano.
Un saludo
Hola te respondo por aqui y asi le puede servir a alguien mas.


En el App.config teneis que poner que usais la identificacion con certificado, asi:
Cita:
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
Os pongo como queda en el app config.

Código:
    <client>
      <endpoint address="https://www1.agenciatributaria.gob.es/wlpl/BURT-JDIT/ws/VNifV2SOAP"
        binding="basicHttpBinding" bindingConfiguration="VNifV2SoapBinding"
        contract="ChecaNifsActivos.VNifV2" name="VNifPort1" />
      <endpoint address="https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP"
        binding="basicHttpBinding" bindingConfiguration="sfVerifactu"
        contract="ServicioVerifactu.sfPortTypeVerifactu" name="SistemaVerifactuPruebas" />
      <endpoint address="https://prewww10.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP"
        binding="basicHttpBinding" bindingConfiguration="sfVerifactu1"
        contract="ServicioVerifactu.sfPortTypeVerifactu" name="SistemaVerifactuSelloPruebas" />
    </client>
    <bindings>
      <basicHttpBinding>
        <binding name="VNifV2SoapBinding">
         <security mode="Transport">
            <transport clientCredentialType="Certificate" />     

          </security>
        </binding>
        <binding name="VNifV2SoapBinding1" />
        <binding name="sfVerifactu">
          <security mode="Transport">
            <transport clientCredentialType="Certificate" />
          </security>
        </binding>
        <binding name="sfVerifactu1">
          <security mode="Transport">
            <transport clientCredentialType="Certificate" />
          </security>
        </binding>
        <binding name="sfVerifactu2" />
        <binding name="sfRequerimiento" />
      </basicHttpBinding>
    <customBinding>
        <binding name="sfVerifactu">
          <textMessageEncoding messageVersion="Soap11" writeEncoding="utf-8" />
          <httpsTransport />
        </binding>
      </customBinding>
    </bindings>
Tambien os pongo la funcion para seleccionar los certificados del sistema y luego almacenarlos en bytes[] para guardarlos en la base de datos.


Código:
        public static X509Certificate2 ElegirCertificado()
        {
            try
            {
                X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
                store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
                X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
                X509Certificate2Collection fcollection = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
                X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(fcollection, "Selección de Certificados", "Seleccione un certificado de la lista para firmar la factura electrónica", X509SelectionFlag.SingleSelection);

                X509Certificate2Enumerator Certificado = scollection.GetEnumerator();
                X509Certificate2 cert = new X509Certificate2();
                if (scollection.Count > 0)
                {
                    X509Certificate2Enumerator en = scollection.GetEnumerator();
                    en.MoveNext();
                    cert = en.Current;
                    if (DateTime.Now > cert.NotAfter)
                    {
                        throw new Exception("Certificado caducado");
                    }
                    else
                    {
                        return cert;
                    }
                }

                if (fcollection.Count == 0)
                {
                    MessageBox.Show("No hay certificados electrónicos instalados en tu equipo");
                }
                else
                {
                    if (scollection.Count == 0)
                    {
                        MessageBox.Show("No has seleccionado ningún certificado");
                    }
                }
                store.Close();
                var temp = scollection.OfType<X509Certificate2>();
                var cert1 = scollection.OfType<X509Certificate2>().Where(x => x.Subject == "CN=FNMT-RCM").First(); // + Program.configTaller.NombreTaller).First();
                return cert;
            }
            catch (Exception ex)
            {
                //  throw ex;
            }
            //X509Store store = new X509Store(StoreLocation.CurrentUser);
            //store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
            //X509Certificate2Collection certificates = store.Certificates;
            //X509Certificate2Collection foundCertificates = certificates.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
            //var cert = foundCertificates.OfType<X509Certificate>().Where(x => x.Subject == "CN="+Program.configTaller.NombreTaller).First();
            return null;
        }
Esto devuelve el certificado seleccionado.
Luego simplemente lo exportamos a bytes con una contraseña por nuestra seguridad.
Código:
 var certificado = ConfigDB.ElegirCertificado();// CertificadoSeleccionado();
            if(null != certificado)
            {
                string caducidad = certificado.GetExpirationDateString();
                Program.certificado = certificado.Export(X509ContentType.Cert, Program.passcertificado);<-- Este es el password que usaremos para guardar/usar el certificado.
                txtCaducidad.Text = caducidad;
                ConfigDB.ActualizarCertificado(1, Program.certificado, caducidad);
            }
 


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
Hijo de Informáticos gluglu Humor 3 13-03-2007 11:05:35
Adictos informaticos ... Trigger Humor 2 11-10-2004 12:18:32
Nosotros los Informáticos Trigger Humor 1 10-10-2004 14:58:09
Patrón de los Informáticos. obiwuan Varios 20 10-09-2003 14:44:54
Chistes Informaticos jhonny Humor 2 11-08-2003 21:59:09


La franja horaria es GMT +2. Ahora son las 09:50:55.


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