Olá pessoal, estou com uma situação que antes eram gerados xmls para importação das Declarações de importação, mas eles estão mudando para API e estou com dificuldades em conseguir fazer a comunicação com o servidor. Eu até olhei uma resposta de moderador dizendo pra ver como o acbr faz, mas não consegui achar isso nos fontes, não soube procurar provavelmente.
No postman eu consegui fazer funcionar, configurando o certificado em settings -> Certificates, e o postman me retornou o set-token e x-csrf-token que precisa para fazer as demais requisições.
No portal (https://docs.portalunico.siscomex.gov.br/introducao-api-publica/) é mencionado o handshake SSL, mas eu não compreendi como fazer isso. Eu cheguei a olhar os fontes do acbrnfe, e vi que ele usa AcbrNfe.WebServices.Enviar pra envio das notas, mas não consegui achar a parte que ele configura componentes.
Eu achei um exemplo na internet, que usa openssl, mas só funcionaria com certificado .PEM e nós utilizamos .PFX na empresa.
Conseguem me auxiliar, preciso fazer a conexão com o site basicamente.
Fiz assim e não deu certo por causa do certificado:
var
slPostData: TStringList;
IdHTTP1 : TIdHTTP;
Id_HandlerSocket : TIdSSLIOHandlerSocketOpenSSL;
cRetorno : string;
begin
try
IdHTTP1 := TIdHTTP.Create( nil );
IdHTTP1.Request.BasicAuthentication := False;
// IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0';
IdHTTP1.Request.UserAgent := 'Mozilla/3.0 (compatible;Indy Library)';
IdHTTP1.Request.ContentType := 'utf-8';
Id_HandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create( IdHTTP1 );
Id_HandlerSocket.SSLOptions.CertFile := AcbrNFe.Configuracoes.Certificados.ArquivoPFX; (aqui eu tinha configurado o acbrnfe com o caminho do arquivo pfx)
Id_HandlerSocket.SSLOptions.KeyFile := AcbrNFe.Configuracoes.Certificados.ArquivoPFX; (aqui eu tinha configurado o acbrnfe com o caminho do arquivo pfx)
Id_HandlerSocket.SSLOptions.Mode := sslmClient;
Id_HandlerSocket.SSLOptions.Method := sslvSSLv23;
IdHTTP1.IOHandler := Id_HandlerSocket;
RegistraLog('TGeradorDeclaracaoImportacao.Teste: Id_HandlerSocket.SSLOptions.CertFile -> ' + Id_HandlerSocket.SSLOptions.CertFile, DEBUG);
slPostData := TStringList.Create();
cRetorno := IdHTTP1.Post( 'https://val.portalunico.siscomex.gov.br/portal/api/autenticar', slPostData);
RegistraLog('TGeradorDeclaracaoImportacao.Teste: ' + cRetorno, DEBUG);
finally
Id_HandlerSocket.Free;
IdHTTP1.Free;
if Assigned(slPostData) then
FreeAndNil(slPostData);
end;
end;
---------------------------
Debugger Exception Notification
---------------------------
Project Teste.exe raised exception class EIdOSSLLoadingCertError with message 'Could not load certificate.
error:0906D06C:PEM routines:PEM_read_bio:no start line'.
---------------------------
Break Continue Help
---------------------------