Página 1 de 1
Alternativas à CAPICOM.DLL
Enviado: 14 Mai 2019 08:40
por André Corrêa
Bom dia,
Quais alternativas os colegas encontraram para carregar certificados e assinar os XMLs das notas fiscais?
A CAPICOM ainda funciona, mas foi descontinuada há muito tempo e não possui alguns recursos interessantes,
como a possibilidade de acessar um certificado em nuvem.
Existem as classes .NET, da Microsoft, tem alguma forma de utilizá-las, visto o Harbour não ter suporte para .NET?
Alguém tem algum exemplo que não utilize a CAPICOM?
Obrigado,
Alternativas à CAPICOM.DLL
Enviado: 14 Mai 2019 13:50
por jairfab
Você pode fazer uma dll C# e acessar a mesma com fivewin harbour ou xharbour ou vs etc.
Agora se você não utilizar o fivewin poderia conseguir alguém que poderia fazer uma dll com harbour ou xharbour, neste caso ficaria uma Dll C# e uma DLL harbour ou xharbour.
Código: Selecionar todos
#include "FiveWin.ch"
function Main()
FW_DotNet( "test.dll", "dllNamespace.dllClass", "ShowMsg", "C# from FWH" )
FW_DotNet( "test.dll", "dllNamespace.dllClass", "ShowMsg", "yes!!!" )
return nil
Alternativas à CAPICOM.DLL
Enviado: 14 Mai 2019 13:59
por André Corrêa
Olá jairfab,
Uso Xailer, não Fivewin, mas a ideia é interessante.
É possível gerar uma DLL com os métodos necessários em C# e acessá-la
via Harbour, mesmo não havendo suporte ao .NET?
Alternativas à CAPICOM.DLL
Enviado: 14 Mai 2019 14:16
por jairfab
Com certeza sim!
A outra maneira seria fazer um exe em C#
tipo : assina.exe notanfe.xml ou algo semelhante eu fiz assim pro e-Social que era mais difícil por conta do modelo de assinatura sha256 eu utlizo harbour e xharbour com fivewin.
Alternativas à CAPICOM.DLL
Enviado: 14 Mai 2019 14:27
por JoséQuintas
André Corrêa escreveu:A CAPICOM ainda funciona, mas foi descontinuada há muito tempo e não possui alguns recursos interessantes,como a possibilidade de acessar um certificado em nuvem.
Tem certeza?
Alternativas à CAPICOM.DLL
Enviado: 14 Mai 2019 15:19
por André Corrêa
Quintas,
JoséQuintas escreveu:André Corrêa escreveu:A CAPICOM ainda funciona, mas foi descontinuada há muito tempo e não possui alguns recursos interessantes,como a possibilidade de acessar um certificado em nuvem.
Tem certeza?
Não totalmente. Acredita que haja essa possibilidade com CAPICOM?
Abraço,
Alternativas à CAPICOM.DLL
Enviado: 14 Mai 2019 16:22
por JoséQuintas
André Corrêa escreveu:Não totalmente. Acredita que haja essa possibilidade com CAPICOM?
Há muitas possibilidades.
E a mais interessante é pensar pra que o aplicativo precisa do certificado...
Alternativas à CAPICOM.DLL
Enviado: 15 Mai 2019 09:14
por André Corrêa
Quintas,
Não sei se entendi bem sua pergunta.
O aplicativo precisa do certificado para assinar o XML gerado, garantindo sua autenticidade.
De qualquer forma, mesmo que seja possível com a CAPICOM, seria interessante ter outras
alternativas, porque ela foi descontinuada há muito tempo.
Vasculhando o fórum e estudando um pouco os códigos em C#, consegui criar uma DLL no Visual Studio,
com suporte a acesso via COM. Com ela, foi possível fazer uma ponte e acessar o .NET framework via Harbour.
Para chegar nesse resultado, utilizei um tópico aqui do próprio fórum como base, apenas atualizando alguns detalhes para a
versão mais recente do Visual Studio e do .NET. Também me baseei no código em C# do site oficial da NFe para fazer os testes.
Não sou programador C#, nem tenho muito conhecimento em COM, sou apenas curioso, mas acho que o código abaixo pode servir
como base para outros, com mais experiência.
Tópico usado como base para criar a DLL:
https://pctoledo.org/forum/viewto ... ll#p125891
Código em C#:
Código: Selecionar todos
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
namespace TesteCSharpHarbour
{
[ClassInterface(ClassInterfaceType.AutoDual)]
[ProgId("TesteCSharpHarbour.Teste")]
[ComVisible(true)]
public class Teste
{
public Teste() { }
public String[] ListaCertificados()
{
X509Store stores = new X509Store(StoreName.My, StoreLocation.CurrentUser);
String[] listaDeCertificados;
int contador = 0;
try
{
// Abre o Store
stores.Open(OpenFlags.ReadOnly);
// Obtém a coleção dos certificados da Store
X509Certificate2Collection certificados = stores.Certificates;
listaDeCertificados = new String[certificados.Count];
// percorre a coleção de certificados
foreach (X509Certificate2 certificado in certificados)
{
listaDeCertificados[contador] = certificado.ToString();
contador++;
}
return listaDeCertificados;
}
finally
{
stores.Close();
}
}
}
}
Código em Harbour:
Código: Selecionar todos
LOCAL oDotNetDll
LOCAL a01
TRY
oDotNetDll := GetActiveObject( "TesteCSharpHarbour.Teste" )
CATCH
TRY
oDotNetDll := CreateObject( "TesteCSharpHarbour.Teste" )
CATCH
Alert( Ole2TxtError() )
RETURN .F.
END
END
a01 := oDotNetDll:ListaCertificados()
LogDebug( a01 )
Alternativas à CAPICOM.DLL
Enviado: 15 Mai 2019 10:26
por JoséQuintas
Falou de colocar o certificado nas nuvens....
Deixa todo uso de certificado nas nuvens, e nem precisa nada no aplicativo.