Ir para conteúdo
  • Cadastre-se

dev botao

Consumir webservice de boleto Santander via XML


Jwest
  • Este tópico foi criado há 849 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

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;

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Consultores

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 Giurizzato 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

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros 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

  • Curtir 1
Link para o comentário
Compartilhar em outros 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;

 

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...

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á

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • 3 anos depois...
  • Este tópico foi criado há 849 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.