DU-E autenticar servidor com certificado digital e enviar xml
Vamos direto ao ponto.
Vamos precisar dos seguintes componentes: TIdHTTP (Indy Clients) e TIdSSLIOHandlerSocketOpenSSL (Indy I/O Handlers), TMemo(mmResponse) e TButton (Standard)
O certificado digital deve estar convertido para .pem ( https://www.sslshopper.com/ssl-converter.html )
-> Configurando TIdHTTP
AllowCookies := True
HandleRedirects := True
HTTPOptions
hoKeepOrigProtocol :=True
IOHandler := IdSSLIOHandlerSocketOpenSSL1
ProxyParams
BasicAuthentication :=True
ProxyPassword <senha>
ProxyPort <porta>
ProxyServer <servidor>
ProxyUsername <usuário>
Request
Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
AcceptChasSet := 'pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3'
AcceptLanguage :='pt-BR'
CharSet :='UTF-8'
ContentType := 'application/json'
UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Maxthon; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618);'
-> Configurando idSSLIOHandlerSocketOpenSSL1
SSLOptions
CertFile := 'cert.pem'
KeyFile := 'cert.pem'
Method := 'sslvTLSv1'
Mode := 'sslmClient'
RootCertFile := 'cert.pem'
-> Simplifiquei o código para focar na programação dos objetos envolvidos no processo de autenticação no servidor e envio do arquivo xml.
Variáveis globais
Token, XCSRF, URL : string;
Function Autenticar(): boolean;
var
Response : string;
Request: TStringList;
begin
Result:=True;
URL := 'https://val.portalunico.siscomex.gov.br/portal/api/autenticar'; { url para ambiente de validação }
// URL := 'https://portalunico.siscomex.gov.br/portal/api/autenticar'; { url para ambiente de produção }
Request := TStringList.Create;
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.AddValue('Role-Type', 'IMPEXP');
IdHTTP1.Response.Clear;
IdHTTP1.Response.ContentType := 'application/json';
IdHTTP1.Response.CharSet := 'UTF-8';
IdHTTP1.Response.KeepAlive := True;
Try
try
Response := IdHTTP1.Post(URL, Request);
// mmResponse.Lines.Add(IdHTTP1.Response.RawHeaders.CommaText); { ver os valores do response num memo }
Token := IdHTTP1.Response.RawHeaders.Values['Set-Token']; {recebendo o valor de header Set-Token}
XCSRF := IdHTTP1.Response.RawHeaders.Values['X-CSRF-Token']; {recebendo o valor de header X-CSRF-Token}
except
on E: EIdHTTPProtocolException do
begin
result:=false;
mmResponse.Lines.Add(E.ErrorMessage);
end;
end;
Finally
Request.Free;
End;
end;
Procedure EnviarXML;
var
Response: String;
Arquivo : TMemoryStream;
Begin
Arquivo := TMemoryStream.Create;
Arquivo.LoadFromFile(Trim(<caminho do arquivo .xml>));
URL := 'https://val.portalunico.siscomex.gov.br/due/api/ext/due'; { url para ambiente de validação }
//URL := 'https://portalunico.siscomex.gov.br/due/api/ext/due'; { url para ambiente de produção }
IdHTTP1.Request.ContentType := 'Application/xml';
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.AddValue('Authorization', Token); { valor pego na autenticação }
IdHTTP1.Request.CustomHeaders.AddValue('X-CSRF-Token', XCSRF); { valor pego na autenticação }
Try
try
mmResponse.Lines.Clear;
Response:=IdHTTP1.Post(URL, Arquivo); { enviando arquivo }
mmResponse.Lines.Add(Response);
except
on E:EIdHTTPProtocolException do
begin
mmResponse.Lines.Clear;
mmResponse.Lines.Add(e.ErrorMessage);
end;
end;
Finally
Arquivo.Free();
End;
End;
Evento Botão Enviar
if Autenticar then
EnviarXML;
Se alguém conseguiu com os componentes REST do delphi posta ai.
Vamos precisar dos seguintes componentes: TIdHTTP (Indy Clients) e TIdSSLIOHandlerSocketOpenSSL (Indy I/O Handlers), TMemo(mmResponse) e TButton (Standard)
O certificado digital deve estar convertido para .pem ( https://www.sslshopper.com/ssl-converter.html )
-> Configurando TIdHTTP
AllowCookies := True
HandleRedirects := True
HTTPOptions
hoKeepOrigProtocol :=True
IOHandler := IdSSLIOHandlerSocketOpenSSL1
ProxyParams
BasicAuthentication :=True
ProxyPassword <senha>
ProxyPort <porta>
ProxyServer <servidor>
ProxyUsername <usuário>
Request
Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
AcceptChasSet := 'pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3'
AcceptLanguage :='pt-BR'
CharSet :='UTF-8'
ContentType := 'application/json'
UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Maxthon; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618);'
-> Configurando idSSLIOHandlerSocketOpenSSL1
SSLOptions
CertFile := 'cert.pem'
KeyFile := 'cert.pem'
Method := 'sslvTLSv1'
Mode := 'sslmClient'
RootCertFile := 'cert.pem'
-> Simplifiquei o código para focar na programação dos objetos envolvidos no processo de autenticação no servidor e envio do arquivo xml.
Variáveis globais
Token, XCSRF, URL : string;
Function Autenticar(): boolean;
var
Response : string;
Request: TStringList;
begin
Result:=True;
URL := 'https://val.portalunico.siscomex.gov.br/portal/api/autenticar'; { url para ambiente de validação }
// URL := 'https://portalunico.siscomex.gov.br/portal/api/autenticar'; { url para ambiente de produção }
Request := TStringList.Create;
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.AddValue('Role-Type', 'IMPEXP');
IdHTTP1.Response.Clear;
IdHTTP1.Response.ContentType := 'application/json';
IdHTTP1.Response.CharSet := 'UTF-8';
IdHTTP1.Response.KeepAlive := True;
Try
try
Response := IdHTTP1.Post(URL, Request);
// mmResponse.Lines.Add(IdHTTP1.Response.RawHeaders.CommaText); { ver os valores do response num memo }
Token := IdHTTP1.Response.RawHeaders.Values['Set-Token']; {recebendo o valor de header Set-Token}
XCSRF := IdHTTP1.Response.RawHeaders.Values['X-CSRF-Token']; {recebendo o valor de header X-CSRF-Token}
except
on E: EIdHTTPProtocolException do
begin
result:=false;
mmResponse.Lines.Add(E.ErrorMessage);
end;
end;
Finally
Request.Free;
End;
end;
Procedure EnviarXML;
var
Response: String;
Arquivo : TMemoryStream;
Begin
Arquivo := TMemoryStream.Create;
Arquivo.LoadFromFile(Trim(<caminho do arquivo .xml>));
URL := 'https://val.portalunico.siscomex.gov.br/due/api/ext/due'; { url para ambiente de validação }
//URL := 'https://portalunico.siscomex.gov.br/due/api/ext/due'; { url para ambiente de produção }
IdHTTP1.Request.ContentType := 'Application/xml';
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.AddValue('Authorization', Token); { valor pego na autenticação }
IdHTTP1.Request.CustomHeaders.AddValue('X-CSRF-Token', XCSRF); { valor pego na autenticação }
Try
try
mmResponse.Lines.Clear;
Response:=IdHTTP1.Post(URL, Arquivo); { enviando arquivo }
mmResponse.Lines.Add(Response);
except
on E:EIdHTTPProtocolException do
begin
mmResponse.Lines.Clear;
mmResponse.Lines.Add(e.ErrorMessage);
end;
end;
Finally
Arquivo.Free();
End;
End;
Evento Botão Enviar
if Autenticar then
EnviarXML;
Se alguém conseguiu com os componentes REST do delphi posta ai.
Marcio Almeida
Curtidas 1
Melhor post
Osvaldo Anjo
15/08/2018
Parabéns Castro
Estou procurando também sobre rest.
Se eu conseguir eu posto
Abraços
Estou procurando também sobre rest.
Se eu conseguir eu posto
Abraços
GOSTEI 2
Mais Respostas
Adriano Barbosa
17/07/2018
Eu também preciso disso, vou tentar fazer com REST se conseguir posto aqui.
GOSTEI 1
Rodrigo Pereira
17/07/2018
Vamos direto ao ponto.
Vamos precisar dos seguintes componentes: TIdHTTP (Indy Clients) e TIdSSLIOHandlerSocketOpenSSL (Indy I/O Handlers), TMemo(mmResponse) e TButton (Standard)
O certificado digital deve estar convertido para .pem ( https://www.sslshopper.com/ssl-converter.html )
-> Configurando TIdHTTP
AllowCookies := True
HandleRedirects := True
HTTPOptions
hoKeepOrigProtocol :=True
IOHandler := IdSSLIOHandlerSocketOpenSSL1
ProxyParams
BasicAuthentication :=True
ProxyPassword <senha>
ProxyPort <porta>
ProxyServer <servidor>
ProxyUsername <usuário>
Request
Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
AcceptChasSet := 'pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3'
AcceptLanguage :='pt-BR'
CharSet :='UTF-8'
ContentType := 'application/json'
UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Maxthon; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618);'
-> Configurando idSSLIOHandlerSocketOpenSSL1
SSLOptions
CertFile := 'cert.pem'
KeyFile := 'cert.pem'
Method := 'sslvTLSv1'
Mode := 'sslmClient'
RootCertFile := 'cert.pem'
-> Simplifiquei o código para focar na programação dos objetos envolvidos no processo de autenticação no servidor e envio do arquivo xml.
Variáveis globais
Token, XCSRF, URL : string;
Function Autenticar(): boolean;
var
Response : string;
Request: TStringList;
begin
Result:=True;
URL := 'https://val.portalunico.siscomex.gov.br/portal/api/autenticar'; { url para ambiente de validação }
// URL := 'https://portalunico.siscomex.gov.br/portal/api/autenticar'; { url para ambiente de produção }
Request := TStringList.Create;
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.AddValue('Role-Type', 'IMPEXP');
IdHTTP1.Response.Clear;
IdHTTP1.Response.ContentType := 'application/json';
IdHTTP1.Response.CharSet := 'UTF-8';
IdHTTP1.Response.KeepAlive := True;
Try
try
Response := IdHTTP1.Post(URL, Request);
// mmResponse.Lines.Add(IdHTTP1.Response.RawHeaders.CommaText); { ver os valores do response num memo }
Token := IdHTTP1.Response.RawHeaders.Values['Set-Token']; {recebendo o valor de header Set-Token}
XCSRF := IdHTTP1.Response.RawHeaders.Values['X-CSRF-Token']; {recebendo o valor de header X-CSRF-Token}
except
on E: EIdHTTPProtocolException do
begin
result:=false;
mmResponse.Lines.Add(E.ErrorMessage);
end;
end;
Finally
Request.Free;
End;
end;
Procedure EnviarXML;
var
Response: String;
Arquivo : TMemoryStream;
Begin
Arquivo := TMemoryStream.Create;
Arquivo.LoadFromFile(Trim(<caminho do arquivo .xml>));
URL := 'https://val.portalunico.siscomex.gov.br/due/api/ext/due'; { url para ambiente de validação }
//URL := 'https://portalunico.siscomex.gov.br/due/api/ext/due'; { url para ambiente de produção }
IdHTTP1.Request.ContentType := 'Application/xml';
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.AddValue('Authorization', Token); { valor pego na autenticação }
IdHTTP1.Request.CustomHeaders.AddValue('X-CSRF-Token', XCSRF); { valor pego na autenticação }
Try
try
mmResponse.Lines.Clear;
Response:=IdHTTP1.Post(URL, Arquivo); { enviando arquivo }
mmResponse.Lines.Add(Response);
except
on E:EIdHTTPProtocolException do
begin
mmResponse.Lines.Clear;
mmResponse.Lines.Add(e.ErrorMessage);
end;
end;
Finally
Arquivo.Free();
End;
End;
Evento Botão Enviar
if Autenticar then
EnviarXML;
Se alguém conseguiu com os componentes REST do delphi posta ai.
Vamos precisar dos seguintes componentes: TIdHTTP (Indy Clients) e TIdSSLIOHandlerSocketOpenSSL (Indy I/O Handlers), TMemo(mmResponse) e TButton (Standard)
O certificado digital deve estar convertido para .pem ( https://www.sslshopper.com/ssl-converter.html )
-> Configurando TIdHTTP
AllowCookies := True
HandleRedirects := True
HTTPOptions
hoKeepOrigProtocol :=True
IOHandler := IdSSLIOHandlerSocketOpenSSL1
ProxyParams
BasicAuthentication :=True
ProxyPassword <senha>
ProxyPort <porta>
ProxyServer <servidor>
ProxyUsername <usuário>
Request
Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
AcceptChasSet := 'pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3'
AcceptLanguage :='pt-BR'
CharSet :='UTF-8'
ContentType := 'application/json'
UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Maxthon; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618);'
-> Configurando idSSLIOHandlerSocketOpenSSL1
SSLOptions
CertFile := 'cert.pem'
KeyFile := 'cert.pem'
Method := 'sslvTLSv1'
Mode := 'sslmClient'
RootCertFile := 'cert.pem'
-> Simplifiquei o código para focar na programação dos objetos envolvidos no processo de autenticação no servidor e envio do arquivo xml.
Variáveis globais
Token, XCSRF, URL : string;
Function Autenticar(): boolean;
var
Response : string;
Request: TStringList;
begin
Result:=True;
URL := 'https://val.portalunico.siscomex.gov.br/portal/api/autenticar'; { url para ambiente de validação }
// URL := 'https://portalunico.siscomex.gov.br/portal/api/autenticar'; { url para ambiente de produção }
Request := TStringList.Create;
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.AddValue('Role-Type', 'IMPEXP');
IdHTTP1.Response.Clear;
IdHTTP1.Response.ContentType := 'application/json';
IdHTTP1.Response.CharSet := 'UTF-8';
IdHTTP1.Response.KeepAlive := True;
Try
try
Response := IdHTTP1.Post(URL, Request);
// mmResponse.Lines.Add(IdHTTP1.Response.RawHeaders.CommaText); { ver os valores do response num memo }
Token := IdHTTP1.Response.RawHeaders.Values['Set-Token']; {recebendo o valor de header Set-Token}
XCSRF := IdHTTP1.Response.RawHeaders.Values['X-CSRF-Token']; {recebendo o valor de header X-CSRF-Token}
except
on E: EIdHTTPProtocolException do
begin
result:=false;
mmResponse.Lines.Add(E.ErrorMessage);
end;
end;
Finally
Request.Free;
End;
end;
Procedure EnviarXML;
var
Response: String;
Arquivo : TMemoryStream;
Begin
Arquivo := TMemoryStream.Create;
Arquivo.LoadFromFile(Trim(<caminho do arquivo .xml>));
URL := 'https://val.portalunico.siscomex.gov.br/due/api/ext/due'; { url para ambiente de validação }
//URL := 'https://portalunico.siscomex.gov.br/due/api/ext/due'; { url para ambiente de produção }
IdHTTP1.Request.ContentType := 'Application/xml';
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.AddValue('Authorization', Token); { valor pego na autenticação }
IdHTTP1.Request.CustomHeaders.AddValue('X-CSRF-Token', XCSRF); { valor pego na autenticação }
Try
try
mmResponse.Lines.Clear;
Response:=IdHTTP1.Post(URL, Arquivo); { enviando arquivo }
mmResponse.Lines.Add(Response);
except
on E:EIdHTTPProtocolException do
begin
mmResponse.Lines.Clear;
mmResponse.Lines.Add(e.ErrorMessage);
end;
end;
Finally
Arquivo.Free();
End;
End;
Evento Botão Enviar
if Autenticar then
EnviarXML;
Se alguém conseguiu com os componentes REST do delphi posta ai.
GOSTEI 0
Rodrigo Pereira
17/07/2018
bom dia, vc tem esse projetinho ai, com exemplo do xml q deve ser enviado?
GOSTEI 0
Washington Silva
17/07/2018
Vamos direto ao ponto.
Vamos precisar dos seguintes componentes: TIdHTTP (Indy Clients) e TIdSSLIOHandlerSocketOpenSSL (Indy I/O Handlers), TMemo(mmResponse) e TButton (Standard)
O certificado digital deve estar convertido para .pem ( https://www.sslshopper.com/ssl-converter.html )
-> Configurando TIdHTTP
AllowCookies := True
HandleRedirects := True
HTTPOptions
hoKeepOrigProtocol :=True
IOHandler := IdSSLIOHandlerSocketOpenSSL1
ProxyParams
BasicAuthentication :=True
ProxyPassword <senha>
ProxyPort <porta>
ProxyServer <servidor>
ProxyUsername <usuário>
Request
Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
AcceptChasSet := 'pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3'
AcceptLanguage :='pt-BR'
CharSet :='UTF-8'
ContentType := 'application/json'
UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Maxthon; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618);'
-> Configurando idSSLIOHandlerSocketOpenSSL1
SSLOptions
CertFile := 'cert.pem'
KeyFile := 'cert.pem'
Method := 'sslvTLSv1'
Mode := 'sslmClient'
RootCertFile := 'cert.pem'
-> Simplifiquei o código para focar na programação dos objetos envolvidos no processo de autenticação no servidor e envio do arquivo xml.
Variáveis globais
Token, XCSRF, URL : string;
Function Autenticar(): boolean;
var
Response : string;
Request: TStringList;
begin
Result:=True;
URL := 'https://val.portalunico.siscomex.gov.br/portal/api/autenticar'; { url para ambiente de validação }
// URL := 'https://portalunico.siscomex.gov.br/portal/api/autenticar'; { url para ambiente de produção }
Request := TStringList.Create;
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.AddValue('Role-Type', 'IMPEXP');
IdHTTP1.Response.Clear;
IdHTTP1.Response.ContentType := 'application/json';
IdHTTP1.Response.CharSet := 'UTF-8';
IdHTTP1.Response.KeepAlive := True;
Try
try
Response := IdHTTP1.Post(URL, Request);
// mmResponse.Lines.Add(IdHTTP1.Response.RawHeaders.CommaText); { ver os valores do response num memo }
Token := IdHTTP1.Response.RawHeaders.Values['Set-Token']; {recebendo o valor de header Set-Token}
XCSRF := IdHTTP1.Response.RawHeaders.Values['X-CSRF-Token']; {recebendo o valor de header X-CSRF-Token}
except
on E: EIdHTTPProtocolException do
begin
result:=false;
mmResponse.Lines.Add(E.ErrorMessage);
end;
end;
Finally
Request.Free;
End;
end;
Procedure EnviarXML;
var
Response: String;
Arquivo : TMemoryStream;
Begin
Arquivo := TMemoryStream.Create;
Arquivo.LoadFromFile(Trim(<caminho do arquivo .xml>));
URL := 'https://val.portalunico.siscomex.gov.br/due/api/ext/due'; { url para ambiente de validação }
//URL := 'https://portalunico.siscomex.gov.br/due/api/ext/due'; { url para ambiente de produção }
IdHTTP1.Request.ContentType := 'Application/xml';
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.AddValue('Authorization', Token); { valor pego na autenticação }
IdHTTP1.Request.CustomHeaders.AddValue('X-CSRF-Token', XCSRF); { valor pego na autenticação }
Try
try
mmResponse.Lines.Clear;
Response:=IdHTTP1.Post(URL, Arquivo); { enviando arquivo }
mmResponse.Lines.Add(Response);
except
on E:EIdHTTPProtocolException do
begin
mmResponse.Lines.Clear;
mmResponse.Lines.Add(e.ErrorMessage);
end;
end;
Finally
Arquivo.Free();
End;
End;
Evento Botão Enviar
if Autenticar then
EnviarXML;
Se alguém conseguiu com os componentes REST do delphi posta ai.
Vamos precisar dos seguintes componentes: TIdHTTP (Indy Clients) e TIdSSLIOHandlerSocketOpenSSL (Indy I/O Handlers), TMemo(mmResponse) e TButton (Standard)
O certificado digital deve estar convertido para .pem ( https://www.sslshopper.com/ssl-converter.html )
-> Configurando TIdHTTP
AllowCookies := True
HandleRedirects := True
HTTPOptions
hoKeepOrigProtocol :=True
IOHandler := IdSSLIOHandlerSocketOpenSSL1
ProxyParams
BasicAuthentication :=True
ProxyPassword <senha>
ProxyPort <porta>
ProxyServer <servidor>
ProxyUsername <usuário>
Request
Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
AcceptChasSet := 'pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3'
AcceptLanguage :='pt-BR'
CharSet :='UTF-8'
ContentType := 'application/json'
UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Maxthon; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618);'
-> Configurando idSSLIOHandlerSocketOpenSSL1
SSLOptions
CertFile := 'cert.pem'
KeyFile := 'cert.pem'
Method := 'sslvTLSv1'
Mode := 'sslmClient'
RootCertFile := 'cert.pem'
-> Simplifiquei o código para focar na programação dos objetos envolvidos no processo de autenticação no servidor e envio do arquivo xml.
Variáveis globais
Token, XCSRF, URL : string;
Function Autenticar(): boolean;
var
Response : string;
Request: TStringList;
begin
Result:=True;
URL := 'https://val.portalunico.siscomex.gov.br/portal/api/autenticar'; { url para ambiente de validação }
// URL := 'https://portalunico.siscomex.gov.br/portal/api/autenticar'; { url para ambiente de produção }
Request := TStringList.Create;
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.AddValue('Role-Type', 'IMPEXP');
IdHTTP1.Response.Clear;
IdHTTP1.Response.ContentType := 'application/json';
IdHTTP1.Response.CharSet := 'UTF-8';
IdHTTP1.Response.KeepAlive := True;
Try
try
Response := IdHTTP1.Post(URL, Request);
// mmResponse.Lines.Add(IdHTTP1.Response.RawHeaders.CommaText); { ver os valores do response num memo }
Token := IdHTTP1.Response.RawHeaders.Values['Set-Token']; {recebendo o valor de header Set-Token}
XCSRF := IdHTTP1.Response.RawHeaders.Values['X-CSRF-Token']; {recebendo o valor de header X-CSRF-Token}
except
on E: EIdHTTPProtocolException do
begin
result:=false;
mmResponse.Lines.Add(E.ErrorMessage);
end;
end;
Finally
Request.Free;
End;
end;
Procedure EnviarXML;
var
Response: String;
Arquivo : TMemoryStream;
Begin
Arquivo := TMemoryStream.Create;
Arquivo.LoadFromFile(Trim(<caminho do arquivo .xml>));
URL := 'https://val.portalunico.siscomex.gov.br/due/api/ext/due'; { url para ambiente de validação }
//URL := 'https://portalunico.siscomex.gov.br/due/api/ext/due'; { url para ambiente de produção }
IdHTTP1.Request.ContentType := 'Application/xml';
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.AddValue('Authorization', Token); { valor pego na autenticação }
IdHTTP1.Request.CustomHeaders.AddValue('X-CSRF-Token', XCSRF); { valor pego na autenticação }
Try
try
mmResponse.Lines.Clear;
Response:=IdHTTP1.Post(URL, Arquivo); { enviando arquivo }
mmResponse.Lines.Add(Response);
except
on E:EIdHTTPProtocolException do
begin
mmResponse.Lines.Clear;
mmResponse.Lines.Add(e.ErrorMessage);
end;
end;
Finally
Arquivo.Free();
End;
End;
Evento Botão Enviar
if Autenticar then
EnviarXML;
Se alguém conseguiu com os componentes REST do delphi posta ai.
Boa noite,
O meu código está retornando isso.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><error><message>Ocorreu um erro inesperado. Por favor, tente novamente. Se o problema persistir, acione a Central Serpro de Atendimento anexando todo o conteúdo do response.</message><code>PUCX-ER0001</code><tag>[DUEX-OSOHPO4184]</tag><date>2021-10-03T21:59:29</date><status>500</status><detail/><severity>ERROR</severity><info><ambiente>TRE</ambiente><mnemonico>DUEX</mnemonico><sistema>Declaração Única de Exportação</sistema><trackerId>ZLpprUVVop</trackerId><url>/due/api/ext/due</url><usuario>03011957495</usuario><visao>PRIV</visao></info></error>
GOSTEI 0
Luis Godinho
17/07/2018
Vamos direto ao ponto.
Vamos precisar dos seguintes componentes: TIdHTTP (Indy Clients) e TIdSSLIOHandlerSocketOpenSSL (Indy I/O Handlers), TMemo(mmResponse) e TButton (Standard)
O certificado digital deve estar convertido para .pem ( https://www.sslshopper.com/ssl-converter.html )
-> Configurando TIdHTTP
AllowCookies := True
HandleRedirects := True
HTTPOptions
hoKeepOrigProtocol :=True
IOHandler := IdSSLIOHandlerSocketOpenSSL1
ProxyParams
BasicAuthentication :=True
ProxyPassword <senha>
ProxyPort <porta>
ProxyServer <servidor>
ProxyUsername <usuário>
Request
Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
AcceptChasSet := 'pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3'
AcceptLanguage :='pt-BR'
CharSet :='UTF-8'
ContentType := 'application/json'
UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Maxthon; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618);'
-> Configurando idSSLIOHandlerSocketOpenSSL1
SSLOptions
CertFile := 'cert.pem'
KeyFile := 'cert.pem'
Method := 'sslvTLSv1'
Mode := 'sslmClient'
RootCertFile := 'cert.pem'
-> Simplifiquei o código para focar na programação dos objetos envolvidos no processo de autenticação no servidor e envio do arquivo xml.
Variáveis globais
Token, XCSRF, URL : string;
Function Autenticar(): boolean;
var
Response : string;
Request: TStringList;
begin
Result:=True;
URL := 'https://val.portalunico.siscomex.gov.br/portal/api/autenticar'; { url para ambiente de validação }
// URL := 'https://portalunico.siscomex.gov.br/portal/api/autenticar'; { url para ambiente de produção }
Request := TStringList.Create;
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.AddValue('Role-Type', 'IMPEXP');
IdHTTP1.Response.Clear;
IdHTTP1.Response.ContentType := 'application/json';
IdHTTP1.Response.CharSet := 'UTF-8';
IdHTTP1.Response.KeepAlive := True;
Try
try
Response := IdHTTP1.Post(URL, Request);
// mmResponse.Lines.Add(IdHTTP1.Response.RawHeaders.CommaText); { ver os valores do response num memo }
Token := IdHTTP1.Response.RawHeaders.Values['Set-Token']; {recebendo o valor de header Set-Token}
XCSRF := IdHTTP1.Response.RawHeaders.Values['X-CSRF-Token']; {recebendo o valor de header X-CSRF-Token}
except
on E: EIdHTTPProtocolException do
begin
result:=false;
mmResponse.Lines.Add(E.ErrorMessage);
end;
end;
Finally
Request.Free;
End;
end;
Procedure EnviarXML;
var
Response: String;
Arquivo : TMemoryStream;
Begin
Arquivo := TMemoryStream.Create;
Arquivo.LoadFromFile(Trim(<caminho do arquivo .xml>));
URL := 'https://val.portalunico.siscomex.gov.br/due/api/ext/due'; { url para ambiente de validação }
//URL := 'https://portalunico.siscomex.gov.br/due/api/ext/due'; { url para ambiente de produção }
IdHTTP1.Request.ContentType := 'Application/xml';
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.AddValue('Authorization', Token); { valor pego na autenticação }
IdHTTP1.Request.CustomHeaders.AddValue('X-CSRF-Token', XCSRF); { valor pego na autenticação }
Try
try
mmResponse.Lines.Clear;
Response:=IdHTTP1.Post(URL, Arquivo); { enviando arquivo }
mmResponse.Lines.Add(Response);
except
on E:EIdHTTPProtocolException do
begin
mmResponse.Lines.Clear;
mmResponse.Lines.Add(e.ErrorMessage);
end;
end;
Finally
Arquivo.Free();
End;
End;
Evento Botão Enviar
if Autenticar then
EnviarXML;
Se alguém conseguiu com os componentes REST do delphi posta ai.
Vamos precisar dos seguintes componentes: TIdHTTP (Indy Clients) e TIdSSLIOHandlerSocketOpenSSL (Indy I/O Handlers), TMemo(mmResponse) e TButton (Standard)
O certificado digital deve estar convertido para .pem ( https://www.sslshopper.com/ssl-converter.html )
-> Configurando TIdHTTP
AllowCookies := True
HandleRedirects := True
HTTPOptions
hoKeepOrigProtocol :=True
IOHandler := IdSSLIOHandlerSocketOpenSSL1
ProxyParams
BasicAuthentication :=True
ProxyPassword <senha>
ProxyPort <porta>
ProxyServer <servidor>
ProxyUsername <usuário>
Request
Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
AcceptChasSet := 'pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3'
AcceptLanguage :='pt-BR'
CharSet :='UTF-8'
ContentType := 'application/json'
UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Maxthon; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618);'
-> Configurando idSSLIOHandlerSocketOpenSSL1
SSLOptions
CertFile := 'cert.pem'
KeyFile := 'cert.pem'
Method := 'sslvTLSv1'
Mode := 'sslmClient'
RootCertFile := 'cert.pem'
-> Simplifiquei o código para focar na programação dos objetos envolvidos no processo de autenticação no servidor e envio do arquivo xml.
Variáveis globais
Token, XCSRF, URL : string;
Function Autenticar(): boolean;
var
Response : string;
Request: TStringList;
begin
Result:=True;
URL := 'https://val.portalunico.siscomex.gov.br/portal/api/autenticar'; { url para ambiente de validação }
// URL := 'https://portalunico.siscomex.gov.br/portal/api/autenticar'; { url para ambiente de produção }
Request := TStringList.Create;
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.AddValue('Role-Type', 'IMPEXP');
IdHTTP1.Response.Clear;
IdHTTP1.Response.ContentType := 'application/json';
IdHTTP1.Response.CharSet := 'UTF-8';
IdHTTP1.Response.KeepAlive := True;
Try
try
Response := IdHTTP1.Post(URL, Request);
// mmResponse.Lines.Add(IdHTTP1.Response.RawHeaders.CommaText); { ver os valores do response num memo }
Token := IdHTTP1.Response.RawHeaders.Values['Set-Token']; {recebendo o valor de header Set-Token}
XCSRF := IdHTTP1.Response.RawHeaders.Values['X-CSRF-Token']; {recebendo o valor de header X-CSRF-Token}
except
on E: EIdHTTPProtocolException do
begin
result:=false;
mmResponse.Lines.Add(E.ErrorMessage);
end;
end;
Finally
Request.Free;
End;
end;
Procedure EnviarXML;
var
Response: String;
Arquivo : TMemoryStream;
Begin
Arquivo := TMemoryStream.Create;
Arquivo.LoadFromFile(Trim(<caminho do arquivo .xml>));
URL := 'https://val.portalunico.siscomex.gov.br/due/api/ext/due'; { url para ambiente de validação }
//URL := 'https://portalunico.siscomex.gov.br/due/api/ext/due'; { url para ambiente de produção }
IdHTTP1.Request.ContentType := 'Application/xml';
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.AddValue('Authorization', Token); { valor pego na autenticação }
IdHTTP1.Request.CustomHeaders.AddValue('X-CSRF-Token', XCSRF); { valor pego na autenticação }
Try
try
mmResponse.Lines.Clear;
Response:=IdHTTP1.Post(URL, Arquivo); { enviando arquivo }
mmResponse.Lines.Add(Response);
except
on E:EIdHTTPProtocolException do
begin
mmResponse.Lines.Clear;
mmResponse.Lines.Add(e.ErrorMessage);
end;
end;
Finally
Arquivo.Free();
End;
End;
Evento Botão Enviar
if Autenticar then
EnviarXML;
Se alguém conseguiu com os componentes REST do delphi posta ai.
Bom dia!
Estou seguindo o passo a passo do projeto e quando vou testar esta retornando um erro que não consegui identificar.
Could not load root certificate.
error:0B084002:x509 certificate
routines:X509_load_cert_file:system lib.
Alguem saberia me dar uma dica do que pooderia ser?
Gratp.
GOSTEI 0
Luis Godinho
17/07/2018
Vamos direto ao ponto.
Vamos precisar dos seguintes componentes: TIdHTTP (Indy Clients) e TIdSSLIOHandlerSocketOpenSSL (Indy I/O Handlers), TMemo(mmResponse) e TButton (Standard)
O certificado digital deve estar convertido para .pem ( https://www.sslshopper.com/ssl-converter.html )
-> Configurando TIdHTTP
AllowCookies := True
HandleRedirects := True
HTTPOptions
hoKeepOrigProtocol :=True
IOHandler := IdSSLIOHandlerSocketOpenSSL1
ProxyParams
BasicAuthentication :=True
ProxyPassword <senha>
ProxyPort <porta>
ProxyServer <servidor>
ProxyUsername <usuário>
Request
Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
AcceptChasSet := 'pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3'
AcceptLanguage :='pt-BR'
CharSet :='UTF-8'
ContentType := 'application/json'
UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Maxthon; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618);'
-> Configurando idSSLIOHandlerSocketOpenSSL1
SSLOptions
CertFile := 'cert.pem'
KeyFile := 'cert.pem'
Method := 'sslvTLSv1'
Mode := 'sslmClient'
RootCertFile := 'cert.pem'
-> Simplifiquei o código para focar na programação dos objetos envolvidos no processo de autenticação no servidor e envio do arquivo xml.
Variáveis globais
Token, XCSRF, URL : string;
Function Autenticar(): boolean;
var
Response : string;
Request: TStringList;
begin
Result:=True;
URL := 'https://val.portalunico.siscomex.gov.br/portal/api/autenticar'; { url para ambiente de validação }
// URL := 'https://portalunico.siscomex.gov.br/portal/api/autenticar'; { url para ambiente de produção }
Request := TStringList.Create;
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.AddValue('Role-Type', 'IMPEXP');
IdHTTP1.Response.Clear;
IdHTTP1.Response.ContentType := 'application/json';
IdHTTP1.Response.CharSet := 'UTF-8';
IdHTTP1.Response.KeepAlive := True;
Try
try
Response := IdHTTP1.Post(URL, Request);
// mmResponse.Lines.Add(IdHTTP1.Response.RawHeaders.CommaText); { ver os valores do response num memo }
Token := IdHTTP1.Response.RawHeaders.Values['Set-Token']; {recebendo o valor de header Set-Token}
XCSRF := IdHTTP1.Response.RawHeaders.Values['X-CSRF-Token']; {recebendo o valor de header X-CSRF-Token}
except
on E: EIdHTTPProtocolException do
begin
result:=false;
mmResponse.Lines.Add(E.ErrorMessage);
end;
end;
Finally
Request.Free;
End;
end;
Procedure EnviarXML;
var
Response: String;
Arquivo : TMemoryStream;
Begin
Arquivo := TMemoryStream.Create;
Arquivo.LoadFromFile(Trim(<caminho do arquivo .xml>));
URL := 'https://val.portalunico.siscomex.gov.br/due/api/ext/due'; { url para ambiente de validação }
//URL := 'https://portalunico.siscomex.gov.br/due/api/ext/due'; { url para ambiente de produção }
IdHTTP1.Request.ContentType := 'Application/xml';
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.AddValue('Authorization', Token); { valor pego na autenticação }
IdHTTP1.Request.CustomHeaders.AddValue('X-CSRF-Token', XCSRF); { valor pego na autenticação }
Try
try
mmResponse.Lines.Clear;
Response:=IdHTTP1.Post(URL, Arquivo); { enviando arquivo }
mmResponse.Lines.Add(Response);
except
on E:EIdHTTPProtocolException do
begin
mmResponse.Lines.Clear;
mmResponse.Lines.Add(e.ErrorMessage);
end;
end;
Finally
Arquivo.Free();
End;
End;
Evento Botão Enviar
if Autenticar then
EnviarXML;
Se alguém conseguiu com os componentes REST do delphi posta ai.
Vamos precisar dos seguintes componentes: TIdHTTP (Indy Clients) e TIdSSLIOHandlerSocketOpenSSL (Indy I/O Handlers), TMemo(mmResponse) e TButton (Standard)
O certificado digital deve estar convertido para .pem ( https://www.sslshopper.com/ssl-converter.html )
-> Configurando TIdHTTP
AllowCookies := True
HandleRedirects := True
HTTPOptions
hoKeepOrigProtocol :=True
IOHandler := IdSSLIOHandlerSocketOpenSSL1
ProxyParams
BasicAuthentication :=True
ProxyPassword <senha>
ProxyPort <porta>
ProxyServer <servidor>
ProxyUsername <usuário>
Request
Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
AcceptChasSet := 'pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3'
AcceptLanguage :='pt-BR'
CharSet :='UTF-8'
ContentType := 'application/json'
UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Maxthon; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618);'
-> Configurando idSSLIOHandlerSocketOpenSSL1
SSLOptions
CertFile := 'cert.pem'
KeyFile := 'cert.pem'
Method := 'sslvTLSv1'
Mode := 'sslmClient'
RootCertFile := 'cert.pem'
-> Simplifiquei o código para focar na programação dos objetos envolvidos no processo de autenticação no servidor e envio do arquivo xml.
Variáveis globais
Token, XCSRF, URL : string;
Function Autenticar(): boolean;
var
Response : string;
Request: TStringList;
begin
Result:=True;
URL := 'https://val.portalunico.siscomex.gov.br/portal/api/autenticar'; { url para ambiente de validação }
// URL := 'https://portalunico.siscomex.gov.br/portal/api/autenticar'; { url para ambiente de produção }
Request := TStringList.Create;
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.AddValue('Role-Type', 'IMPEXP');
IdHTTP1.Response.Clear;
IdHTTP1.Response.ContentType := 'application/json';
IdHTTP1.Response.CharSet := 'UTF-8';
IdHTTP1.Response.KeepAlive := True;
Try
try
Response := IdHTTP1.Post(URL, Request);
// mmResponse.Lines.Add(IdHTTP1.Response.RawHeaders.CommaText); { ver os valores do response num memo }
Token := IdHTTP1.Response.RawHeaders.Values['Set-Token']; {recebendo o valor de header Set-Token}
XCSRF := IdHTTP1.Response.RawHeaders.Values['X-CSRF-Token']; {recebendo o valor de header X-CSRF-Token}
except
on E: EIdHTTPProtocolException do
begin
result:=false;
mmResponse.Lines.Add(E.ErrorMessage);
end;
end;
Finally
Request.Free;
End;
end;
Procedure EnviarXML;
var
Response: String;
Arquivo : TMemoryStream;
Begin
Arquivo := TMemoryStream.Create;
Arquivo.LoadFromFile(Trim(<caminho do arquivo .xml>));
URL := 'https://val.portalunico.siscomex.gov.br/due/api/ext/due'; { url para ambiente de validação }
//URL := 'https://portalunico.siscomex.gov.br/due/api/ext/due'; { url para ambiente de produção }
IdHTTP1.Request.ContentType := 'Application/xml';
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.AddValue('Authorization', Token); { valor pego na autenticação }
IdHTTP1.Request.CustomHeaders.AddValue('X-CSRF-Token', XCSRF); { valor pego na autenticação }
Try
try
mmResponse.Lines.Clear;
Response:=IdHTTP1.Post(URL, Arquivo); { enviando arquivo }
mmResponse.Lines.Add(Response);
except
on E:EIdHTTPProtocolException do
begin
mmResponse.Lines.Clear;
mmResponse.Lines.Add(e.ErrorMessage);
end;
end;
Finally
Arquivo.Free();
End;
End;
Evento Botão Enviar
if Autenticar then
EnviarXML;
Se alguém conseguiu com os componentes REST do delphi posta ai.
Bom dia!
Estou seguindo o passo a passo do projeto e quando vou testar esta retornando um erro que não consegui identificar.
Could not load root certificate.
error:0B084002:x509 certificate
routines:X509_load_cert_file:system lib.
Alguem saberia me dar uma dica do que pooderia ser?
Gratp.
Resolvido. Bastaba remover a indicação do campo RootCert.
Att,
GOSTEI 0