 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
rodrigoprado Colaborador

Registrado: Terça-Feira, 24 de Mai de 2005 Mensagens: 1074 Localização: Curitiba/PR
|
Enviada: Qua Set 27, 2017 8:15 pm Assunto: webservice Rest bradesco - SSL [RESOLVIDO] |
|
|
Boa noite a todos, neste ano teve um aumento de serviços de alguns bancos para registros de boletos eletrônicamente, ao invés de enviar a remessa no famoso txt, estão agora fazendo via webservice.
Bom vou citar 1 exemplo de caso de sucesso para melhor entenderem minha dúvida.
Houve um caso de Santa Catarina usando Banco do Brasil, webservice SOAP com SSL(sslvTLSv1_2), utilizei muito o SOAPUI para testar.
Usei o Delphi XE7 e o Indy, IdHTTP1 e IdSSLIOHandlerSocketOpenSSL1, usando POST fiz as alterações no sistema e ocorreu tudo bem, já esta funcionando em mais de 15 clientes, como os sistema são em versões do Delphi inferiores foi feito uma DLL pra integração para consumir o serviço. Aqui foi o caso de sucesso.
Agora vamos ao transtorno.
Tenho um caso do Banco Bradesco da Bahia, seria a mesma coisa, mas com algumas camadas a mais de dificuldade, webservice REST/json com SSL(sslvTLSv1_2), e Usando certificado digital pra assinar o "json" no envio.
Vou compartilhar com vcs o link da homologação, funciona perfeitamente no browser ou mesmo no soapui usando rest.
Ao acessar o link do rest ele tem dar um retorno de erro, é este erro q eu espero no meu delphi pra funcionar ("cdErro":"810", "msgErro":"Erro Certificado)
https://cobranca.bradesconetempresa.b.br/ibpjregistrotitulows/registrohomologacao
EU NÃO CONSIGO PELO DELPHI XE7 retornar a mensagem de erro pelo webservice, sempre para no erro "HTTP/1.0 500 Internal Server Error", já alterei os protocolos IdSSLIOHandlerSocketOpenSSL1, atualizei as dlls ssleay e libeay fiz de tudo e não consegui a comunicação ainda, eu sei que preciso assinar o envio, mas nesse caso ele deveria apenas retorno o erro vinculado ao 810, ele nem conecta no ws, pq não passa pelo https.
Todavia este webservice rest abaixo da api do google https, funciona perfeitamente. Alguém já passou por isso, tem alguma idéia? será que dependendo do ws o nosso delphi teria uma limitação e não conseguiria fazer.
https://maps.googleapis.com/maps/api/distancematrix/json?destinations=shoopping%20estacao&origins=shopping%20curitiba
Na net tem um pessoal que conseguiu com Java ou CSharp, mas preciso esgotar as possibilidades no delphi antes, pois há muitos serviços funcionando bem no xe7, será que esse seria um caso de limitação mesmo?
Link do java e csharp casos de sucesso
https://github.com/BoletoNet/boletonet/issues/306 _________________ - Compartilhe seus conhecimentos -
Editado pela última vez por rodrigoprado em Sex Set 29, 2017 4:32 pm, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
L1p3 Novato

Registrado: Terça-Feira, 7 de Dezembro de 2010 Mensagens: 5
|
Enviada: Qui Set 28, 2017 9:39 am Assunto: |
|
|
Amigo,
Acredito que você usando o HTTPREQRESP você consiga fazer.
Eu consegui fazer, na mesma estrutura que você precisa, porém, não consigo pegar o retorno do HEADER.
Você ja tentou usando ele? te ajuda ? |
|
| Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Sex Set 29, 2017 1:23 pm Assunto: |
|
|
Você utiliza qual versão do TLS na configuração do componente da Indy?
No meu dá erro, porque estou utilizando a indy original do delphi 2010, assim eu tenho problema, pois não tem suporte a TLS1_2
bye _________________ P.O.W.E.R B.Y D.E.L.P.H.I |
|
| Voltar ao Topo |
|
 |
rodrigoprado Colaborador

Registrado: Terça-Feira, 24 de Mai de 2005 Mensagens: 1074 Localização: Curitiba/PR
|
Enviada: Sex Set 29, 2017 1:45 pm Assunto: |
|
|
Blz pessoal, então o webservice do banco aceita somente: sslvTLSv1_2, mas ja tentei também com sslvSSLv23, já atualizei o indy https://indy.fulgan.com/SSL/ usei o que tem de mais recente da lista.
No soapUI utilizei para base de teste e funciona, este ws utiliza os dados de homologação
https://cobranca.bradesconetempresa.b.br/ibpjregistrotitulows/registrohomologacao
assinatura de teste no body:
MIISngYJKoZIhvcNAQcCoIISjzCCEosCAQExDzANBglghkgBZQMEAgEFADCCB6.....
** este ws utiliza json no envio, mas assinado em base64, a assinatura é validada neste site: https://certlogik.com/decoder/
Ali ele vai e retorna corretamente no soapUI.
Usando o REST DEBUGGER, ele esta retornando o seguinte erro:
<xml>
<env>
<env>
<env>
<faultcode>env:Client</faultcode>
<faultstring>Internal Error</faultstring>
</env>
</env>
</env>
que curiosamente é o mesmo erro retornado do componente: HTTPReqResp1, e o teste pelo indy mesmo no delphi mais recente atualizado ele ainda ocorre o erro "HTTP/1.0 500 Internal Server Error"
** Este mesmo parametro funciona no soapui.
Alguma idéia amigos? algum componente de terceiro que faça? ja tentei pela acbr tb e ainda n tem suporte https://www.projetoacbr.com.br/forum/topic/39036-webservicerest-bradesco-bahia/ _________________ - Compartilhe seus conhecimentos - |
|
| Voltar ao Topo |
|
 |
rodrigoprado Colaborador

Registrado: Terça-Feira, 24 de Mai de 2005 Mensagens: 1074 Localização: Curitiba/PR
|
Enviada: Sex Set 29, 2017 4:31 pm Assunto: |
|
|
Pessoal, resolvido a comunicação
Foi configurado o TRestClient e deu certo, agora somente criar um dll para integração no sistema antigo, o indy n pegou mesmo e nem pelo HTTPReqResp1.
Obrigado pessoal.
***Para quem tiver duvida via delphi, usei o XE7
*** tem muita ajuda no site
https://github.com/BoletoNet/boletonet/issues/306
procurar pelo meu nick: rodrigoprado2305 se não encontrar, deu um pesquisar na página pela palavra "hidden", deve ter texto ocultado.
usei no primeiro momento um hash gerado, para eu testar, depois fui ajustando no meu programa
Havia tópicos de pessoas, com java, cshar, php, todos em desenvolvimento, o lado bom é que em todas a plataformas tiveram sucesso.
Usei os componentes
restClient: TRESTClient;
restRequest: TRESTRequest;
restResponse: TRESTResponse;
Lembrando que se vc usar um postman ou soapui
usar apenas o link https://cobranca.bradesconetempresa.b.br/ibpjregistrotitulows/registrotitulohomologacao
para testar ele volta o seguinte: ("cdErro":"810", "msgErro":"Erro Certificado)
ou seja para seu delphi ter exito, ele deve voltar corretamente essa mensagem, é o primeiro teste, se conseguiu isso, o próximo passo é cuidar do seu json.
1-assinar ele com um certificado digital que seja aceito pelo bradesco, gerar o .p7s, vc tem que ter um meio do sistema selecionar o seu certificado, usei uma biblioteca paga chamada: BRYSIGNER
2-.p7s, fazer este arquivo virar base64
criei uma classe para monstar o json, depois assinando com o código abaixo:
| Código: | function EncodeBase64(wsDir: WideString): WideString; stdcall; export;
var
Stream : TMemoryStream;
begin
Stream := TMemoryStream.Create;
try
Stream.LoadFromFile(wsDir);
try
Result := WideString(Soap.EncdDecd.EncodeBase64(Stream.Memory, Stream.Size));
except
on e: Exception do
begin
result := 'Erro retornado pelo webservice: '+ e.Message;
end
end;
finally
Stream.Free;
end;
end; |
depois de obter o hash, monto o link final https://cobranca.bradesconetempresa.b.br/ibpjregistrotitulows/registrotitulohomologacao
o hash vai dentro do body, por isso que vc deve entender o envio antes pelo soapui ou postman, ai fica mais facil de enviar pelo delphi _________________ - Compartilhe seus conhecimentos -
Editado pela última vez por rodrigoprado em Ter Jun 25, 2019 4:46 pm, num total de 5 vezes |
|
| Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Dom Out 01, 2017 1:40 pm Assunto: |
|
|
Um Adendo para quem quer utilizar o datasnap quando da atualização da indy, infelizmente quando se atualiza a Indy, tem-se problemas com estes componentes, pois o ponto de entrada de chamada do procedimento muda, aí o seu problema, pois o datasnap passa a não funcionar, pois este foi compilado com a indy que veio com o delphi.
Bem, a embarcadero infelizmente não colaborou quanto a atualização da indy.
Após estes infortúnios, estou seriamente inclinado a utilizar synapse, deixando a indy de lado.
Ou trabalhar com uma dll de outros delphis ou mesmo lazarus.
bye _________________ P.O.W.E.R B.Y D.E.L.P.H.I |
|
| Voltar ao Topo |
|
 |
walkerdiniz Novato

Registrado: Sábado, 3 de Fevereiro de 2018 Mensagens: 1
|
Enviada: Sáb Fev 03, 2018 7:09 pm Assunto: E a solução, tb estou com o mesmo problema para registrar. |
|
|
| E a solução, tb estou com o mesmo problema para registrar o boleto usando certificado digital A3, como vc fez? |
|
| Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Seg Fev 05, 2018 7:07 pm Assunto: |
|
|
Tentou com ACBr boleto?
Hoje em dia o ACbr utiliza Synpse, eu aconselho a todo mundo utilizar, pois com Indy a coisa não funciona.
bye _________________ P.O.W.E.R B.Y D.E.L.P.H.I |
|
| Voltar ao Topo |
|
 |
gutonovaes19 Novato

Registrado: Quarta-Feira, 18 de Junho de 2008 Mensagens: 50
|
Enviada: Qui Fev 08, 2018 4:22 pm Assunto: idHttp Indy10 Error Connecting with ssl |
|
|
Pessoal,
Estou tentando criar uma funçao para enviar arquivos à um servidor https. Ocorre o erro mencionado.
Já atualizei o Indy10, baixei última versão do openssl e nada.
Para HTTP funcionou.
O código abaixo baixei do github e adaptei para SSL. Acho que falta informação.
var iohandler : TIdSSLIOHandlerSocketOpenSSL;
formData : TIdMultiPartFormDataStream;
i: integer;
begin
//https://httpbin.org/
if (ListBox_Filelist.Items.Count = 0) then
exit;
IdSSLOpenSSLHeaders.Unload;
iohandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
iohandler.PassThrough := false;
iohandler.DefaultPort := iSSL_PORT;
iohandler.SSLOptions.Mode := sslmClient;
IdHTTP1.IOHandler := iohandler;
formData := TIdMultiPartFormDataStream.Create;
IdSSLOpenSSLHeaders.Load;
IdHTTP1.Request.Referer := Edit_URLAddress.Text;
try
for i := 0 to ListBox_FileList.Items.Count -1 do
begin
formData.AddFile('File'+IntToStr(i), ListBox_FileList.Items[i], 'plain/text');
end;
try
memo_log.Lines.Text := idHTTP1.Post(Edit_URLAddress.Text, formData);
except
on e: exception do
begin
memo_log.Lines.Text := e.Message;
end;
end; |
|
| Voltar ao Topo |
|
 |
dorivansousa Novato

Registrado: Quinta-Feira, 18 de Março de 2004 Mensagens: 9 Localização: Açailândia - Ma
|
Enviada: Qua Abr 04, 2018 10:04 am Assunto: |
|
|
alguem teve sucesso no registro do boleto que poderia fornecer suporte pra que eu implemente esse recurso no meu sistema? _________________ Voçê ensina melhor aquilo que mais precisa aprender |
|
| Voltar ao Topo |
|
 |
rodrigoprado Colaborador

Registrado: Terça-Feira, 24 de Mai de 2005 Mensagens: 1074 Localização: Curitiba/PR
|
Enviada: Qui Dez 26, 2019 4:03 pm Assunto: |
|
|
| dorivansousa escreveu: | | alguem teve sucesso no registro do boleto que poderia fornecer suporte pra que eu implemente esse recurso no meu sistema? |
Resolvi com as instruções acima, tenho recebido algumas mensagens nos particulares relacionado a essa integração recentemente.
Tendo dúvidas, postem aqui e especifiquem qual o ponto, o processo ali tem algumas etapas. _________________ - Compartilhe seus conhecimentos - |
|
| Voltar ao Topo |
|
 |
ozaelsilva Novato

Registrado: Quinta-Feira, 26 de Dezembro de 2019 Mensagens: 2
|
Enviada: Qui Dez 26, 2019 5:54 pm Assunto: Post com TRESTRequest e RESTClient |
|
|
Ao fazer post utilizando os componentes TRESTRequest e RESTClient
no webservice do Bradesco recebo a seguinte mensagem "HTTP/1.1 500 Internal Server Error", quem poder ajudar agradeço.
procedure TForm1.Button1Click(Sender: TObject);
begin
RESTClient1.BaseURL := 'https://cobranca.bradesconetempresa.b.br/ibpjregistrotitulows/registrotitulohomologacao';
RESTRequest1.Method := rmPOST;
RESTRequest1.Accept := 'text/plain';
RESTClient1.ContentType := 'text/plain';
try
RESTRequest1.Execute();
except on E: Exception do
Memo1.Lines.Add(E.ToString)
end;
end; |
|
| Voltar ao Topo |
|
 |
ozaelsilva Novato

Registrado: Quinta-Feira, 26 de Dezembro de 2019 Mensagens: 2
|
Enviada: Sex Dez 27, 2019 9:24 pm Assunto: Post com TRESTRequest e TRESTClient |
|
|
| qual configuração feita para TRESTClient ignorar a verificação do SSL? |
|
| Voltar ao Topo |
|
 |
rodrigoprado Colaborador

Registrado: Terça-Feira, 24 de Mai de 2005 Mensagens: 1074 Localização: Curitiba/PR
|
Enviada: Dom Fev 02, 2020 8:03 am Assunto: |
|
|
Deixa assim o objeto do client, usei na versão delphi tokyo, funciona desde 2017 assim dentro de uma dll, nesse caso eu passo os parametros e resulto o response pra aplicação, lah eu trato o result com uma classe.
Hoje em 2020 talvez o serviço deve ter atualizado, talvez de ate para tirar algumas propriedades abaixo deixando ela mais enxugada...
lembrando faça isso funcionar no postman ou soapui antes para terem a base de configuração do delphi e todo o funcionamento eu extrai de umas comunicações feitas em Java, php e c# do forum: https://github.com/BoletoNet/boletonet/issues/306
procurar pelo meu nick: rodrigoprado2305 se não encontrar, deu um pesquisar na página pela palavra "hidden", deve ter texto ocultado.
usei no primeiro momento um hash gerado, para eu testar, depois fui ajustando no meu programa
https://cobranca.bradesconetempresa.b.br/ibpjregistrotitulows/registrotitulohomologacao
parte 1 = baseurl
https://cobranca.bradesconetempresa.b.br
parte 2 = resource
/ibpjregistrotitulows/registrotitulohomologacao
| Código: | function wsBradescoNet(wsEndpoint, wsResource, wsBody: WideString): WideString; stdcall; export;
var
restClient: TRESTClient;
restRequest: TRESTRequest;
restResponse: TRESTResponse;
begin
restClient := TRESTClient.Create(wsEndpoint);
restRequest := TRESTRequest.Create(restClient);
restResponse := TRESTResponse.Create(restClient);
try
try
restClient.Accept := 'application/json, text/plain; q=0.9, text/html;q=0.8,';
restClient.AcceptCharset := 'UTF-8, *;q=0.8';
restClient.AcceptEncoding := 'identity';
restClient.AutoCreateParams := False;
restClient.AllowCookies := True;
restClient.BaseURL := wsEndpoint;
restClient.ContentType := 'application/x-www-form-urlencoded';
restClient.FallbackCharsetEncoding := 'UTF-8';
restClient.HandleRedirects := True;
restResponse.ContentType := 'text/xml';
restRequest.Accept := 'application/json, text/plain; q=0.9, text/html;q=0.8,';
restRequest.AcceptCharset := 'UTF-8, *;q=0.8';
restRequest.AcceptEncoding := '';
restRequest.Client := restClient;
restRequest.Method := rmPOST;
restRequest.Resource := wsResource;
restRequest.SynchronizedEvents := False;
restRequest.Response := restResponse;
restRequest.Params.Clear;
restRequest.Params.Add;
restRequest.Params[0].ContentType := ctAPPLICATION_JSON;
restRequest.Params[0].Kind := pkREQUESTBODY;
restRequest.Params[0].Value := wsBody;
restRequest.Execute;
result := restResponse.Content;
except
on e: Exception do
begin
result := 'Erro: ' + e.Message + ' XML: ' + restResponse.Content;
end
end;
finally
restClient.Free;
end;
end; |
_________________ - Compartilhe seus conhecimentos -
Editado pela última vez por rodrigoprado em Sex Fev 07, 2020 8:58 am, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
Enviada: Qua Fev 05, 2020 10:11 am Assunto: |
|
|
alguem pode postar o link onde baixa o manual? _________________ <b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/ |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|