Alternativas à CAPICOM.DLL

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

Alternativas à CAPICOM.DLL

Mensagem 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,
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Avatar do usuário
jairfab
Usuário Nível 3
Usuário Nível 3
Mensagens: 252
Registrado em: 21 Mai 2007 09:43
Localização: São Paulo, Região Leste - Suzano

Alternativas à CAPICOM.DLL

Mensagem 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
Delpji 7, harbour 3.2, xharbour 1.2.3, Bcc7, Minigw, Minigui 19.11, hwgui 2.20, FiveWin 19.05 Gtwvw, Gtwvg, C# VS 2017
Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

Alternativas à CAPICOM.DLL

Mensagem 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?
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Avatar do usuário
jairfab
Usuário Nível 3
Usuário Nível 3
Mensagens: 252
Registrado em: 21 Mai 2007 09:43
Localização: São Paulo, Região Leste - Suzano

Alternativas à CAPICOM.DLL

Mensagem 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.
Delpji 7, harbour 3.2, xharbour 1.2.3, Bcc7, Minigw, Minigui 19.11, hwgui 2.20, FiveWin 19.05 Gtwvw, Gtwvg, C# VS 2017
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Alternativas à CAPICOM.DLL

Mensagem 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?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

Alternativas à CAPICOM.DLL

Mensagem 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,
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Alternativas à CAPICOM.DLL

Mensagem 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...
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

Alternativas à CAPICOM.DLL

Mensagem 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 )
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Alternativas à CAPICOM.DLL

Mensagem por JoséQuintas »

Falou de colocar o certificado nas nuvens....
Deixa todo uso de certificado nas nuvens, e nem precisa nada no aplicativo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder