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