Jump to content

Nova Loja Oficial
loja.projetoacbr.com.br
Ajude o projeto a crescer, com estilo

Comprar

Balança SM100 performance surpreendente

Tecnologia Japonesa   Teclado e Visor resistentes a água
Consumo inteligente de etiquetas   Baixo custo de manutenção
Comunicação Ethernet e WIFI independentes

Saiba mais

Impressora de Etiquetas ELGIN - L42 PRO

Protocolos PPLA, PPLB, ZPL, EPL (automático)
Porta USB padrão Opcionais: Ethernet, Serial, Paralela
Sensor de Etiquetas Móvel Garantia de 18 meses

Saiba mais

Jwest

Consumir webservice de boleto Santander via XML

Recommended Posts

 

Boa tarde,

Consegui consumir o webservice do santander para emitir boleto via XML, usando THPPRIO com delphi xe8.

Gerei as units do wsdl e tudo trabalha bem.

Mas, meu problema é que com THTTPRIO, toda vez que executo eu tenho que selecionar o certificado.

O ACBr não  trabalha assim. Uma vez configurado o certificado em tempo de projeto ele não fica perguntando.

Preciso consumir o serviço sem que o componente me pergunte pelo certificado em tempo de execução.

Resolvi,então, tentar com os componentes ACBr para ver se dava certo. Andei olhando os fontes do ACBr para Envio de NFS-e como base de estudo, mas não cheguei a nenhuma conclusão.

Tentei algo assim, mas meu conhecimento dos fontes não é suficiente.

Alguem poderia me ajudar com esse codigo para carregar o certificado A1 para usar com TACBrWinHTTPReqResp e enviar o soap?

  Stream:=TMemoryStream.Create;
  ACBrWinHTTPReqResp1:=TACBrWinHTTPReqResp.Create;
  try
   //Como faço para CarregarCertificado;
   ACBrWinHTTPReqResp1.MimeType:='application/soap+xml; charset=utf-8';
   ACBrWinHTTPReqResp1.Url:='https://ymbdlb.santander.com.br:443/dl-ticket-services/TicketEndpointService';
   ACBrWinHTTPReqResp1.SOAPAction:='';
   ACBrWinHTTPReqResp1.EncodeDataToUTF8:=true;
   Stream.Position:=0;
   Request.lines.SaveToStream(Stream);
   Stream.Position:=0;
   ACBrWinHTTPReqResp1.Execute(Stream);
   resp:=ACBrWinHTTPReqResp1.Data;
  finally
    Stream.Free;
    ACBrWinHTTPReqResp1.Free;
  end;

Esse codigo aqui funciona com THPPRIO, mas sempre pede o certificado em tempo de execução.

A unit do wsdl não foi adiciconada aqui, mas quem quiser contribuir, posso compartilhar essa unit.

function TfrmPrincipal.enviaPedidoTicket:string;
var tickend:TicketEndpoint;
    pedido:ticketResponse;
    tickReq:ticketRequest;
    RIO: THTTPRIO;
begin
  RIO := THTTPRIO.Create(nil);
  with RIO.HTTPWebNode do begin
   ClientCertificate.CertName:='XXXXXXXXXXXXXXXXXXXX';
   ClientCertificate.Issuer:='AC Certisign RFB G5';
   ClientCertificate.SerialNum:='XXXXXXXXXX';
   Password:='1234';
   UseUTF8InHeader:=true;
  end;
  tickend := GetTicketEndpoint(true,'',RIO);

  tickReq:=ticketRequest.Create;
  geraArrayTicket(tickReq);
  //geraXmlTicket();
  try
    pedido := tickend.create(tickReq);
    result:='';
    with pedido do begin
      if retCode=0 then begin
        result:=ticket;
      end;
    end;
  except
     on e:exception do begin
       showmessage(e.Message);
     end;
  end;
end;

 

Share this post


Link to post
Share on other sites

Bom dia,

Você tem toda a documentação que apresenta o layout do XML de envio os webservices disponíveis, etc.

Os Schemas (arquivos XSD) utilizados para fazer a validação do XML antes do seu envio.

Sabe dizer se esse meio de envio será também adotado pelas demais instituições financeiras?

Fora o envio de boletos existe também a possibilidade de envio pagamento?

Se você nos fornecer a documentação podemos estudar e quem sabe criar um componente aos moldes dos demais.


Consultor SAC ACBr Italo Jurisato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Share this post


Link to post
Share on other sites

Boa tard, Italo,

Pelo que sei até agora apenas o santander tem esse modelo de envio. Não sei de outros bancos.

São dois webservices. Usa-se um deles primeiro para pegar uma chave de segurança e em seguida, usa-se o outro com essa chave para obter o xml do boleto registrado.

O xsd e o wsdl do YMB do anexo estão com problema de namespace que não combinam e o schemalocation também está apontando o nome do arquivo errado.

Esses são os originais que recebi do banco. 

Fiz os consertos e agora, depois de muito tentar, consegui consumir usando HTTPRio sem problema.

Para usar precisa fazer contato com o Banco e enviar para eles o seu certificado digital para que o banco faça o cadastro do mesmo.

Só então eles liberam o acesso.

20170106_Layout de Código de Barras Santander Janeiro 2017v 31.pdf

Layout XML Cobrança OnLine April v1.8 (English Version).pdf

WSDL V2.0.zip

  • Like 1

Share this post


Link to post
Share on other sites

Bom dia,

Consegui gerar o boleto via webservice para o Santander com THPPRio. Mas não gerei componente para isso pois não tenho muito conhecimento sobre gerar componentes.

Edited by Jwest
  • Like 1

Share this post


Link to post
Share on other sites
12 horas atrás, amadeujunior18 disse:

Teria como colocar o exemplo de uso com o THTTPRIO (Uso do Certificado)

Algo assim: 

Rio := THTTPRIO.Create(Nil);
  Rio.HTTPWebNode.Password := '1234';
  Rio.HTTPWebNode.ClientCertificate.CertName :=
    'saddsf';
  Rio.HTTPWebNode.ClientCertificate.Issuer := 'AC Certisign RFB G5';
  Rio.HTTPWebNode.ClientCertificate.SerialNum :=
    '067BE6A732496BA416sdfsad';

  Rio.HTTPWebNode.URL :='https://ymbdlb.santander.com.br:443/dl-ticket-services/TicketEndpointService';
  // URL do Webservices
  Rio.HTTPWebNode.CheckContentType; // URL do Webservices
  Rio.HTTPWebNode.SoapAction := ''; // URL Methode caso houver
  Rio.HTTPWebNode.Agent := 'Mozilla';
  Rio.Port := '443';

  Result := '';
  Resp := TStringStream.Create('');
  try
    //cria xml de requisição para envio
    s := Request.Lines.Text; // Pega Soap a ser enviado
    
    //faz requsição ao WS
    Req := TStringStream.Create(s);
    try
        recieveID := Rio.HTTPWebNode.Send(Req); // Request
        Rio.HTTPWebNode.Receive(recieveID, Resp, false); // Response

        s := Resp.Datastring;

        //pega ticket de retorno do WS
        xdoc := LoadXMLdata(s);
        tv := find_node(xdoc, 'retCode');
        if tv = '0' then
        begin
          tv := find_node(xdoc, 'ticket');
          //gera boleto via WS passando o ticket
          Result := postGetBoleto(tv, NossoNumeroBoleto);
        end;
    except
      Result:='';
    end;
  finally
    if assigned(Req) then Req.Free;
    Resp.Free;
    Rio.Free;
  end;

 

Share this post


Link to post
Share on other sites

Caro Jwest

Analisei seu código, tentei  implementa-lo, porém tive algumas dificuldades,  se possível você me dar uma ajuda

quando dou o comando :   recieveID := Rio.HTTPWebNode.Send (R eq )

me retorna o erro abaixo pedido para informar o certificado, como você fez para informar o certificado?

'É necessário um certificado para concluir a autenticação do cliente - URL:https://ymbdlb.santander.com.br/dl-ticket-services/TicketEndpointService - SOAPAction:""'

 

Agradeço desde já

Share this post


Link to post
Share on other sites

Banco Bradesco e CEF também estão permitindo uso de WebService. Acredito que deve ser uma adesão comun dos bancos, a demora creio que seja somente acertar na segurança dos dados e processos.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...