Programar tarjetero de DNIe

Iniciado por MetalJimmy, 8 Agosto 2018, 13:12 PM

0 Miembros y 1 Visitante están viendo este tema.

MetalJimmy

Buenas a todos,

Me gustaría saber como puedo programar en una aplicación de escritorio (visual basic) en Visual studio 2015 un tarjetero (de teclado o externo) para que reconozca si esta conectado, reconozca el DNIe y me lea y muestre el certificado (todo en formularios diferentes pero eso es lo sencillo).

Si alguien tiene algo me gustaria que compartiesen lo que sepan.


Un saludo


MetalJimmy

Muchas gracias aunque esas páginas ya las visité y no encuentro nada parecido a lo que necesito ya que es una aplicacion de escritorio. Tengo esto pero me da el error :Referencia a objeto no establecida como instancia de un objeto.

Paso el codigo que tengo de DNIe:


Private Sub viaFirmaDNIe()
        Dim tipofichero As TypeFile
        Dim tipoformatofirma As TypeFormatSign
        Dim arr() As Byte = File.ReadAllBytes(rutapdf)
        Dim signedDocument() As Byte
        Dim temp As New Documento
        ' Dim temp As String
        'temp = rutapdf
        temp.nombre = "Documento_firmado" + ".pdf"
        tipofichero = 2 'es un pdf
        tipoformatofirma = TypeFormatSign.PAdES_BASIC
        temp.tipo = tipofichero
        temp.typeFormatSign = tipoformatofirma
        temp.datos = arr
        Dim politica As New Policy
        politica.typeFormatSign = tipoformatofirma
        politica.typeSign = TypeSign.ENVELOPED
        PolicyUtil.AddParameter(politica, PolicyParam.DIGITAL_SIGN_PAGE, "1")
        PolicyUtil.AddParameter(politica, PolicyParam.DIGITAL_SIGN_RECTANGLE, PolicyUtil.rectangleToJson(PolicyUtil.newRectangle(40, 10, 550, 75)))
        PolicyUtil.AddParameter(politica, PolicyParam.DIGITAL_SIGN_STAMPER_HIDE_STATUS, "true")
        PolicyUtil.AddParameter(politica, PolicyParam.DIGITAL_SIGN_STAMPER_TYPE, "QR-BAR-H")

        PolicyUtil.AddParameter(politica, PolicyParam.FILTER_CA_NAME, "DNIe")
        'para la demo si no hay actualizaciones poner la linea anterior con "FNMT" en vez de "DNIe"

        Dim estadofirma As New SignStatus
        estadofirma = client.SignWithPolicy(politica, temp)
        If estadofirma.Status = "ERROR" Then
            Dim msginfo As New Msg_eliminar("Advertencia", "El documento no puede ser firmado. No existe lector de DNIe disponible en este momento.", 0)
            msginfo.ShowDialog()
            msginfo.Dispose()
        Else
            Dim signid As String = ""
            If (Not estadofirma Is Nothing) And (estadofirma.Status = SignStatus.SIGN_OK) Then
                signid = estadofirma.IdSign
                '        //resignedDocumentcupero el documento mediante su identificador
                signedDocument = client.GetSignedDocument(signid)
                If (Not signedDocument Is Nothing And signedDocument.Length > 0) Then
                    'aqui muestro el documento firmado
                    'MODIFICADO 20170213 --> lo estaba escribiendo dos veces en el HD, comento una
                    'DocumentUtil.OpenFile(signedDocument, "Documento_firmado.pdf")
                    ' aqui tengo que guardarlo en la base de datos y ponerlo como firmado y fecha
                    File.WriteAllBytes(Path.GetTempPath + "Documento_firmado.pdf", signedDocument)
                    firmaok = True
                End If
            Else
                If (estadofirma.Status = (SignStatus.SIGN_CANCEL)) Then

                    Dim mensaje As New Msg_eliminar("Advertencia", "La firma del documento ha sido cancelada", 0)
                    mensaje.ShowDialog()
                    mensaje.Dispose()
                Else
                    If (estadofirma.Status = (SignStatus.SIGN_ERROR)) Then

                        'Dim mensaje As New Msg_Info("Error", "Error en la firma" & " - " & estadofirma.ErrorMessage, 0)
                        Dim mensaje As New Msg_eliminar("Advertencia", "El documento no ha sido firmado", 2)
                        mensaje.ShowDialog()
                        mensaje.Dispose()
                    Else
                        If (estadofirma.Status = (SignStatus.FORM_CLOSED)) Then

                            Dim mensaje As New Msg_eliminar("Advertencia", "El documento no ha sido firmado", 2)
                            mensaje.ShowDialog()
                            mensaje.Dispose()
                        End If
                    End If
                End If

            End If
        End If
    End Sub

ivancea96

Ok, pero una cosa es ver cómo accedr a DNIe y otra es corregir ese NullReferenceException.
Para eso último, tendrás que depurar tu programa y ver qué parte te da el error, que se debe a que un objeto no lo has inicializado o no tiene valor.