Closed acanuto closed 3 years ago
Boa tarde, Pedimos para detalhar melhor o que está a fazer. Pode ainda adicionar excertos do código que está a utilizar. A aplicação autenticação.gov não tem nenhuma mensagem de erro com essa mensagem em específico.
Boa tarde, Pedimos para detalhar melhor o que está a fazer. Pode ainda adicionar excertos do código que está a utilizar. A aplicação autenticação.gov não tem nenhuma mensagem de erro com essa mensagem em específico.
Boa tarde, O erro em questão é "SOD Error: invalid signature" Só ocorre quando tentamos ler um cartão de cidadão que tenha a validade expirada exemplo cartão expirado em Agosto de 2020.
Boa tarde, Esse comportamento é o comportamento esperado para Cartões expirados. No entanto, devido a pandemia vários documentos, entre os quais o Cartão de Cidadão, cujo prazo expirou depois de 24 de fevereiro de 2020, continuam válidos até 31 de março de 2021.
A versão mais atualizada da aplicação já prevê esta excepção, pensamos que podes estar a usar uma versão desactualizada da pteidlib_dotnet.dll. Pedimos para verificar.
Caso não verifique se seja um problema de versões, pedimos para indicar quais os métodos que esta a usar.
O erro corre logo na abertura do cartão de cidadão na função AbreCartãoDeCidadão:
Dim eid As PTEID_EId
If Not AbreCartãoDeCidadão(eid) Then
Return
End If
Nome.Value = String.Format("{0} {1}", ConverteDadosCartãoCidadão(eid.getGivenName, maiusculas).Trim, ConverteDadosCartãoCidadão(eid.getSurname, maiusculas).Trim)
[…]
Friend Function AbreCartãoDeCidadão(ByRef eid As PTEID_EId, ByRef card As PTEID_EIDCard, Optional mostraMsg As Boolean = True, Optional ByRef erro As String = "") As Boolean
Try
PTEID_ReaderSet.initSDK()
Dim readerContext As PTEID_ReaderContext
Dim readerSet As PTEID_ReaderSet
readerSet = PTEID_ReaderSet.instance()
If readerSet.readerCount() > 0 Then
For i As UInteger = 0 To CUInt(readerSet.readerCount() - 1)
readerContext = readerSet.getReaderByNum(i)
If readerContext.isCardPresent() Then
If readerContext.getCardType <> PTEID_CardType.PTEID_CARDTYPE_UNKNOWN Then
card = readerContext.getEIDCard()
If Not IsNothing(card) Then
If card.isActive Then
Exit For
End If
End If
End If
End If
Next
End If
If IsNothing(card) Then
PTEID_ReaderSet.releaseSDK()
If mostraMsg Then XtraMessageBox.Show("Não existe nenhum leitor/Cartão de Cidadão instalado!", "Não foi possível localizar o Cartão de Cidadão", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return False
End If
eid = card.getID
Return True
Catch ex1 As PTEID_Exception
ErrosGlobaisCartãoDeCidadão(ex1, ModuloName & " - btnMorada_CCid_Click", mostraMsg)
Return False
Catch ex As Exception
If mostraMsg Then XtraMessageBox.Show("Ocorreu um erro ao tentar localizar o Cartão de Cidadão!", "Não foi possível localizar o Cartão de Cidadão", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return False
End Try
End Function
Viva,
Pelo teu código estas a usar uma biblioteca de Visual Basic. Podes partilhar qual é essa biblioteca para ver possíveis causas para o problema?
Por enquanto, pedimos para entrar no nossa aplicação e ativar o modo de diagnóstico, como podes ver aqui:
Depois volta a testar com a tua aplicação a leitura do cartão e no final envia o ficheiro log.
Bom dia, peço desculpa pela demora, temos estado a tentar arranjar um cartão de cidadão caducado para testar. Espero que até ao final do dia consiga arranjar. Em relação a biblioteca estamos a usar a seguinte
Type: pt.portugal.eid.PTEID_EId
Assembly: pteidlib_dotnet, Version=3.4.0.4151, Culture=neutral, PublicKeyToken=1fa91d379e36932f
MVID: 6C7BFBFE-1A62-4DE5-9A07-FB75A6AE9C4A
Assembly location: C:\Program Files\Portugal Identity Card\sdk\dotnet\pteidlib_dotnet.dll
Boa tarde, Segue em anexo o log como pedido PTEID_0.log
Boa tarde, ainda falta o log em DEBUG referente à aplicação de teste. Depois de ativar o modo de diagnóstico é preciso reiniciar o Test.exe e repetir a operação de leitura para termos acesso ao log de DEBUG
Segue o log em debug, com a aplicação reiniciada PTEID_0.log pteidmdrv.log
Boa tarde, alguma novidade em relação a está situação?
Boa tarde, conseguimos identificar um issue na "tolerância" para cartões expirados que é a causa para estas excepções na leitura de cartões expirados via SDK.
A release 3.5.0 que será lançada até ao final do mês vai conter essa correção e o prolongamento da tolerância a cartões expirados até 31 de Dezembro de acordo com o Decreto-Lei 22-A/2021.
Bom dia, testado e a funcionar. Obrigado pela resolução do problema
Bom dia,
Ao tentar ler um cartão de cidadão em .NET dá o seguinte erro "Erro ao obter o ficheiro SOD do Cartão de Cidadão - cartão inválido ou cartão expirado!", estamos a usar o pteidlib_dotnet.dll com a versão 3.4.0.4151.
Abrindo através da aplicação autenticação.gov é possível ler os dados do cartão.
Como poderemos resolver está situação?