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
Esta es la informaciónque tienes pública, la puedes obtener en Google:
https://www.incibe.es/extfrontinteco/img/File/intecocert/dnie/pdf/guiades.pdf (https://www.incibe.es/extfrontinteco/img/File/intecocert/dnie/pdf/guiades.pdf)
https://www.dnielectronico.es/PortalDNIe/PRF1_Cons02.action?pag=REF_1120 (https://www.dnielectronico.es/PortalDNIe/PRF1_Cons02.action?pag=REF_1120)
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
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.