Ir para conteúdo
  • Cadastre-se

dev botao

Assinatura e envio SEM Capicom


juniorsk8
  • Este tópico foi criado há 2628 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Olá, boa tarde pessoal...

Estava tendo muitos problemas com o envio de DFe utilizando a CAPICOM (principalmente com certificados A3), necessidade de ficar instalando certificados da VALID com instalador próprio deles (para evitar o erro The Cryptographic Service Provider type '24) e PRINCIPALMENTE: Alguns certificados A3 não funciona NEM NA MARRETA com WS do Mato Grosso...

Enfim, gostaria de disponibilizar e também contar com a ajuda de vocês para testar uma solução que fiz para não utilizar a CAPICOM nem OPENSSL... Como não encontrei nenhuma solução "boa" para o Delphi, acabei fazendo as rotinas de assinatura e envio para o WS dentro do C# e utilizando essas DLLs no Delphi... APENAS essas duas funções são utilizadas, todo o restante é tratada diretamente pelo ACBR no Delphi...

Peço ajuda pois estou com "pouco" tempo para melhorar o código, e sei que será bem útil para muitos aqui...

PS1: Estou usando ela em produção em alguns clientes, está se mostrando satisfatório até agora.
PS2: Vou deixar aberto o código em C#, só preciso de um tempo para criar um repo no github e upar
PS3: Não limpei nada no código (sem tempo), utilizei a mesma classe do ACBrDFeCapicom, então está com quase tudo da original.
PS4: A DLL deverá ficar no diretório da aplicação.
PS5: Foi feita utilizando .NET Framework 2.0 (único requisito para funcionar)
PS6: A empresa gentilmente cedeu o código de fonte para que possa ser usado pelos demais programadores do ACBr.
 

Modificações:
 - ACBrDFeSSL.pas:
     Adicionar a uses:
    uses strutils, synacode, ACBrDFeUtil, ACBrValidador, ACBrUtil, ACBrDFeException, ACBrDFeKinyx...

     Adicionar o novo tipo de biblioteca a ser utilizado:
     TSSLLib = (libNone, libOpenSSL, libCapicom, libCapicomDelphiSoap, libKinyx);

     Adicionar outra condição na função SetSSLib: 
    procedure TDFeSSL.SetSSLLib(ASSLLib: TSSLLib);
    begin
     ...
        libKinyx:
        begin
          FSSLClass := TDFeKinyx.Create(Self);
        end
     ..
    end;

 

 

 

ACBrDFeKinyx.pas

KinyxDFeLib.dll

Link para o comentário
Compartilhar em outros sites

  • Fundadores
uses
  ACBrCAPICOM_TLB, ACBrMSXML2_TLB,
....
...

function TDFeKinyx.SelecionarCertificado: String;
var
  Store: IStore3;
  Certs: ICertificates2;
  Certs2: ICertificates2;
  Cert: ICertificate2;
begin
  Store := CoStore.Create;
  Store.Open(FStoreLocation, CAPICOM_STORE_NAME, CAPICOM_STORE_OPEN_READ_ONLY);

  Certs := Store.Certificates as ICertificates2;
  Certs2 := Certs.Select('Certificado(s) Digital(is) disponível(is)',
    'Selecione o Certificado Digital para uso no aplicativo', False);

  if (Certs2.Count > 0) then
  begin
    Cert := IInterface(Certs2.Item[1]) as ICertificate2;
    FpDFeSSL.NumeroSerie := String(Cert.SerialNumber);
    CarregarCertificado;
    Result := GetCertNumeroSerie;
  end
  else
    Result := '';
end;

Me parece que ainda depende da CAPICOM

 

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Citar

PS3: Não limpei nada no código (sem tempo), utilizei a mesma classe do ACBrDFeCapicom, então está com quase tudo da original.

Daniel, só alterei a rotina de Assinar o XML e Enviar a requisição (partes essenciais) , o restante ainda nem toquei, esse é o objetivo de compartilhar, para que mais colaboradores possam testar e manter.

O meu problema até então foi resolvido, pois o principal erro (the cryptographic service provider type '24' is not supported) foi resolvido não utilizando a CAPICOM para assinar, e por último, meu problema com o envio ao WebService do MT com certificado A3 alterando a função de enviar requisição (Executar).

 

Att,
Jeferson.

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Sinto muito... Não vou incorporar. 

O código de "KinyxDFeLib.dll" não é aberto...  (poderia estar aberto em outro projeto)...

E ainda existem muitas dependências da CAPICOM...

Vamos manter o tópico... Pode ser que outro usuário do fórum, tenha interesse em lhe ajudar com esses problemas...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2628 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.