ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

webservice Rest bradesco - SSL [RESOLVIDO]
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
rodrigoprado
Colaborador
Colaborador


Registrado: Terça-Feira, 24 de Mai de 2005
Mensagens: 1062
Localização: Curitiba/PR

MensagemEnviada: Qua Set 27, 2017 8:15 pm    Assunto: webservice Rest bradesco - SSL [RESOLVIDO] Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
L1p3
Novato
Novato


Registrado: Terça-Feira, 7 de Dezembro de 2010
Mensagens: 5

MensagemEnviada: Qui Set 28, 2017 9:39 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10490
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Sex Set 29, 2017 1:23 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
rodrigoprado
Colaborador
Colaborador


Registrado: Terça-Feira, 24 de Mai de 2005
Mensagens: 1062
Localização: Curitiba/PR

MensagemEnviada: Sex Set 29, 2017 1:45 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
rodrigoprado
Colaborador
Colaborador


Registrado: Terça-Feira, 24 de Mai de 2005
Mensagens: 1062
Localização: Curitiba/PR

MensagemEnviada: Sex Set 29, 2017 4:31 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10490
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Dom Out 01, 2017 1:40 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
walkerdiniz
Novato
Novato


Registrado: Sábado, 3 de Fevereiro de 2018
Mensagens: 1

MensagemEnviada: Sáb Fev 03, 2018 7:09 pm    Assunto: E a solução, tb estou com o mesmo problema para registrar. Responder com Citação

E a solução, tb estou com o mesmo problema para registrar o boleto usando certificado digital A3, como vc fez?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10490
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Seg Fev 05, 2018 7:07 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
gutonovaes19
Novato
Novato


Registrado: Quarta-Feira, 18 de Junho de 2008
Mensagens: 50

MensagemEnviada: Qui Fev 08, 2018 4:22 pm    Assunto: idHttp Indy10 Error Connecting with ssl Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
dorivansousa
Novato
Novato


Registrado: Quinta-Feira, 18 de Março de 2004
Mensagens: 9
Localização: Açailândia - Ma

MensagemEnviada: Qua Abr 04, 2018 10:04 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Yahoo Messenger MSN Messenger
rodrigoprado
Colaborador
Colaborador


Registrado: Terça-Feira, 24 de Mai de 2005
Mensagens: 1062
Localização: Curitiba/PR

MensagemEnviada: Qui Dez 26, 2019 4:03 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
ozaelsilva
Novato
Novato


Registrado: Quinta-Feira, 26 de Dezembro de 2019
Mensagens: 2

MensagemEnviada: Qui Dez 26, 2019 5:54 pm    Assunto: Post com TRESTRequest e RESTClient Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
ozaelsilva
Novato
Novato


Registrado: Quinta-Feira, 26 de Dezembro de 2019
Mensagens: 2

MensagemEnviada: Sex Dez 27, 2019 9:24 pm    Assunto: Post com TRESTRequest e TRESTClient Responder com Citação

qual configuração feita para TRESTClient ignorar a verificação do SSL?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
rodrigoprado
Colaborador
Colaborador


Registrado: Terça-Feira, 24 de Mai de 2005
Mensagens: 1062
Localização: Curitiba/PR

MensagemEnviada: Dom Fev 02, 2020 8:03 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 8954
Localização: Sinop-MT

MensagemEnviada: Qua Fev 05, 2020 10:11 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Ir à página 1, 2  Próximo
Página 1 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB