Clipper On Line • Ver Tópico - Alternativas à CAPICOM.DLL
Mudar para estilo Clássico
Projeto Harbour - Compilador de código aberto compatível com o Clipper.
Postar uma resposta

Alternativas à CAPICOM.DLL

14 Mai 2019 08:40

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

14 Mai 2019 13:50

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:
#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

14 Mai 2019 13:59

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

14 Mai 2019 14:16

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

14 Mai 2019 14:27

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

14 Mai 2019 15:19

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

14 Mai 2019 16:22

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

15 Mai 2019 09:14

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:
http://www.pctoledo.com.br/forum/viewtopic.php?f=43&t=13894&p=125891&hilit=dll#p125891

Código em C#:
Código:
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:
  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

15 Mai 2019 10:26

Falou de colocar o certificado nas nuvens....
Deixa todo uso de certificado nas nuvens, e nem precisa nada no aplicativo.
Postar uma resposta