PUBLIC
Manual Técnico
Boleto Eletrônico Online
Gateway de Pagamentos HSBC
Cobrança Não Registrada
Versão: 2.5 Julho/2014
Gateway de Pagamentos HSBC – Julho/2014
© Copyright HSBC Bank Brasil S.A. - Banco Múltiplo 2011 – Todos os direitos reservados.
PUBLIC - 2
SUMÁRIO
APRESENTAÇÃO
03
1. NOTAS PRELIMINARES
04
2. LEGISLAÇÃO
05
3. PROCESSOS DE CONTRTAÇÃO DO SERVIÇO
05
4. INTERFACE DO COMÉRCIO ELETRÔNICO DO CLIENTE
06
5. DATA DE VENCIMENTO
07
6. NÚMERO DO DOCUMENTO
08
7. INSTRUÇÕES
08
8. DADOS DO SACADO
08
9. RE-EMISSÃO
08
10. LOGO DO HSBC
08
11. TESTES
08
12. ANEXO I – Check List de Integração
09
13. ANEXO Il – Exemplo de desenvolvimento em ASP
12
14. ANEXO lll – Exemplo de desenvolvimento em PHP
14
15. ANEXO IV – Exemplo de desenvolvimento em JSP
15
16. ANEXO V – Exemplo de desenvolvimento em ASP.NET/C#
17
Gateway de Pagamentos HSBC – Julho/2014
© Copyright HSBC Bank Brasil S.A. - Banco Múltiplo 2011 – Todos os direitos reservados.
PUBLIC - 3
EMISSÃO ONLINE PELO LINK DO HSBC - COBRANÇA NÃO REGISTRADA
NOTAS PRELIMINARES
PREENCHIMENTO DO BLOQUETO
APRESENTAÇÃO
Prezado Cliente.
Nós do HSBC Bank Brasil S.A. – Banco Múltiplo estamos lhe entregando o Manual Técnico
Módulo da Cobrança Não Registrada - Emissão On-line pelo Link do HSBC, pois através
dele, aqueles que lhe prestam suporte em Informática terão as orientações necessárias
para manter a integração com a qualidade e agilidade de nossos serviços.
O Manual Técnico da Cobrança Não Registrada - Emissão On-line pelo Link do HSBC
fornece todas as informações para que a emissão dos bloquetos de cobrança possa ser
realizada em nosso ambiente de processamento, o que lhe proporcionará agilidade e
eficiência no momento de cobrar suas vendas on-line.
Gateway de Pagamentos HSBC – Julho/2014
© Copyright HSBC Bank Brasil S.A. - Banco Múltiplo 2011 – Todos os direitos reservados.
PUBLIC - 4
1. NOTAS PRELIMINARES
O QUE É A COBRANÇA NÃO REGISTRADA?
A Cobrança Não Registrada Emissão On-line pelo link do HSBC é uma modalidade da
Cobrança do HSBC, e objetiva atender aos clientes que efetuam vendas on-line e querem
oferecer essa forma de pagamento a seus clientes.
Assim, a emissão do bloqueto on-line é realizada nos sistemas do HSBC, com dados
fornecidos pelo Cliente, disponibilizando uma imagem de bloqueto na Internet, para ser
impressa por seus clientes sem que o Cliente tenha que desenvolver em seus sistemas a
inteligência de formatação do boleto e do código de barras.
Para operacionalizar o intercâmbio de informações pelas quais o Cliente saberá
quais boletos emitidos pelo Link do HSBC foram pagos, este manual é
complementado pelo Manual Técnico Padrão CNAB 400 ou CNAB 240.
Gateway de Pagamentos HSBC – Julho/2014
© Copyright HSBC Bank Brasil S.A. - Banco Múltiplo 2011 – Todos os direitos reservados.
PUBLIC - 5
2. LEGISLAÇÃO
A padronização do bloqueto de Cobrança, especificamente da Ficha de Compensação,
obedece ao modelo CADOC 24044-4, instituído pelo Banco Central do Brasil, através da
Carta Circular nº 2.414, de 07.10.93. e alterado pela Carta-Circular nº 2790 de 04.03.98.
A alteração nas especificações do Código de Barras, com a introdução do Dígito de
Auto-conferência (DAC), ocorreu pela Carta Circular nº 2.531 do Bacen, de 24.02.95.
A alteração nas especificações do Código de Barras, com a introdução do “Fator de
vencimento” nos bloquetos de cobrança, ocorreu pela Carta Circular nº 125/2000 do
Bacen, de 02.05.2000.
3. PROCESSO DE CONTRATAÇÃO DO SERVIÇO
O Cliente deve contratar a Cobrança Não Registrada ofertada pelo HSBC. Esse módulo da
cobrança é o mais recomendado porque em vendas pela Internet a mercadoria só é
entregue ou o serviço só é realizado após a confirmação do pagamento realizado. O não
pagamento do boleto emitido na internet não caracteriza dívida, portanto não pode
haver processo de protesto do comprador.
O Cliente assina também o Contrato de Prestação de Serviços para Disponibilização de
Boletos de Cobrança por Meio Eletrônico.
Após a contratação da Cobrança Não Registrada o HSBC definirá o CÓDIGO DE CEDENTE e
o informará ao Cliente.
O Cliente deverá informar o(s) número(s) de IP de seu(s) servidor(es) para o banco, que
o(s) utiliza como parâmetro(s) de segurança. Não há limitação de quantidade de IPs que
podem ser cadastrados.
O motivo é que a solução exige que o servidor Web do Cedente abra uma conexão direta
(Server-to-Server) com o servidor do HSBC. Esta conexão só é aceita se o IP de origem
estiver cadastrado. (Ver item INTERFACE DO COMÉRCIO ELETRÔNICO DO CLIENTE COM O
HSBC).
Gateway de Pagamentos HSBC – Julho/2014
© Copyright HSBC Bank Brasil S.A. - Banco Múltiplo 2011 – Todos os direitos reservados.
PUBLIC - 6
4. INTERFACE DO COMÉRCIO ELETRÔNICO DO CLIENTE COM O HSBC
O processo de Emissão On-line funciona da seguinte maneira (ver figura):
1. SACADO acessa o site da empresa e realiza sua compra,
2. SACADO, após cadastrar-se no site do cedente, seleciona forma de pagamento
"Boleto de compensação".
3. SACADO efetua um submit para um link hospedado no servidor do CEDENTE
4. O Servidor do CEDENTE efetua uma conexão direta (Server-to-Server) via post (ver
item observações abaixo do item 9) para o endereço:
https://wwws5.hsbc.com.br/OFB-BOL-CNR/servlets/GeraBoleto?ServletState=10
5. O POST enviado pelo Servidor do Cliente para o link do HSBC deve conter os
seguintes dados para que a geração do boleto ocorra com sucesso:
Nome do Campo
Tipo de Dado
Tamanho
Formato
Preenchimento
Obrigatório?
Obs.
codigoCedente
NUMÉRICO
7
9999999
S
dataVencimento
DATA
10
DD/MM/AAAA
S
valorDocumento
ALFANUMÉRICO
10
9999999.99
S
numeroParcela
NUMERICO
02
99
N
totalParcelas
NUMERICO
02
99
N
numeroDocumento
NUMERICO
13
9999999999999
S
L1
ALFANUMÉRICO
66
N
Mensagens
que serão
mostradas no
boleto
L2
ALFANUMÉRICO
66
N
L3
ALFANUMÉRICO
66
N
L4
ALFANUMÉRICO
66
N
L5
ALFANUMÉRICO
66
N
unidadeCedente
ALFANUMÉRICO
54
N
nomeSacado
ALFANUMÉRICO
30
S
cpfCnpjSacado
NUMERICO
14
99999999999999
S
enderecoSacado
ALFANUMÉRICO
40
N
numeroSacado
NUMERICO
05
N
complementoSacado
ALFANUMÉRICO
10
N
cepSacado
ALFANUMÉRICO
10
99.999-999
N
bairroSacado
ALFANUMÉRICO
15
N
cidadeSacado
ALFANUMÉRICO
15
N
estadoSacado
ALFANUMÉRICO
02
N
Atenção: os caracteres maiúsculos e minúsculos têm de ser respeitados, tanto os da URL
quanto os do nome dos parâmetros do post. Os campos indicados na tabela acima com
Preenchimento obrigatório “n” devem ser gerados com conteúdo “branco”.
6. HSBC valida se o cedente está cadastrado e se a requisição tem como origem os
servidores do cedente.
Gateway de Pagamentos HSBC – Julho/2014
© Copyright HSBC Bank Brasil S.A. - Banco Múltiplo 2011 – Todos os direitos reservados.
PUBLIC - 7
7. HSBC obtém informações do cedente, linha digitável e código de barras e monta o
boleto.
8. HSBC devolve o boleto gerado em PDF para o Servidor do Cliente.
9. O Servidor do Cedente captura o PDF gerado e apresenta o mesmo em uma página
própria (hospedada no seu servidor).
Observações
- Os dados informados pelo CEDENTE não são validados pelo HSBC (sacado, valor,
data de vencimento, etc.). Portanto é responsabilidade do Cliente enviá-los com
correção
- IMPORTANTE: A chamada para a URL do HSBC, deve ser efetuada internamente
através de conexão Server-to-Server do servidor do CEDENTE para o Servidor do HSBC.
Caso o cedente disponibilize o link do HSBC em sua própria página (ex: se colocar a URL
do HSBC como “Action” de um “Form” HTML), o boleto não será gerado, pois neste caso
a requisição / conexão estará partindo do IP do sacado e não do IP do Servidor do
CEDENTE.
Vide figura abaixo:
5. Data de Vencimento
Recomendamos que a data de vencimento definida pelo Cliente seja sempre a do dia
posterior à compra ou maior, para possibilitar a seu cliente o pagamento, caso ele realize
a compra após o horário do expediente bancário.
CEDENTE
HSBC
SACADO
2. Cedente efetua uma REQUISIÇÃO
INTERNA para o link de geração de boleto do HSBC
3. HSBC devolve PDF com o boleto gerado
4. Cedente captura PDF retornado e o apresenta em uma página hospedada no seu servidor 1. Efetua requisição para uma página hospedada no servidor do cedente
5. Cedente apresenta boleto gerado como se o mesmo fosse gerado em seu servidor
Gateway de Pagamentos HSBC – Julho/2014
© Copyright HSBC Bank Brasil S.A. - Banco Múltiplo 2011 – Todos os direitos reservados.
PUBLIC - 8
6. Número do Documento - campo “
numeroDocumento”
Este número é único para o título, deve ser controlado pelo Cliente e será utilizado na
conciliação dos pagamentos liquidados, pois será enviado ao Cliente no arquivo retorno
de liquidação.
7. Instruções
O campo instruções tem por finalidade orientar o Caixa quanto ao recebimento do
bloqueto. Para compor o conjunto de mensagens, o Cliente poderá utilizar como modelo
as instruções padrões listadas na seção Tabela de Notas Explicativas - nota 9, do Manual
Técnico - Módulo I, Padrão CNAB 400.
As instruções serão enviadas nos campos “L1”, “L2”, “L3”, “L4” e “L5” da mensagem.
8. Dados do sacado
Como o boleto será emitido pelo site, dados do sacado além de nome e CPF/CNPJ não
são obrigatórios.
9. RE-EMISSÃO
Sugerimos ao Cliente que coloque em seu site, de forma acessível ao consumidor, a
possibilidade de emitir novamente o boleto bancário referente à sua compra, evitando
assim que perdas de boleto transformem-se em perdas de vendas para o Cliente.
O link de re-emissão deve repetir o processo de chamada do site do HSBC, com nova data
de vencimento, se necessário, de forma a possibilitar o pagamento em qualquer agência
de qualquer banco.
10. LOGO DO HSBC
Eventualmente é possível utilizar o logo do HSBC para indicar a opção de forma de
pagamento com boleto. Caso o Cliente deseje utilizá-lo, deve entrar em contato com o
gerente para que esse o oriente.
11. TESTES
Antes de colocar a opção de pagamento por boleto bancário em seu site, o Cliente
deverá aguardar a sinalização de seu gerente para iniciar os testes de conexão, para que
haja a devida homologação técnica.
Este procedimento é indispensável para se garantir a qualidade da conexão e da geração
do boleto. Recomendamos ao cliente que se certifique de que o Check list de integração
(Anexo I) foi verificado.
Gateway de Pagamentos HSBC – Julho/2014
© Copyright HSBC Bank Brasil S.A. - Banco Múltiplo 2011 – Todos os direitos reservados.
PUBLIC - 9
12. ANEXO I -
Check List de Integração
1 A conexão deve obrigatoriamente ser SSL (Porta 443)
2
Os nomes de parâmetros, principalmente o ServletState e o código do cedente,
devem respeitar a nomenclatura definida no documento de integração, inclusive
maiúsculas e minúsculas. O ServletState deve ser passado juntamente do endereço
(URL), e os demais na linha do POST.
3
Quando o HSBC recebe a solicitação HTTP Post, valida se o IP de origem da conexão
é o IP que está cadastrado no sistema, ou seja, o IP do servidor Web do cliente.
Não funciona se for feito um redirect ou qualquer outro tipo de chamada que parta
diretamente do browser do cliente para o nosso sistema. (Referrer, JavaScript,
etc.).
(Vide as figuras ao final deste documento)
4
Valores de parâmetro na queryString do POST devem estar “URLEncoded” conforme
formato MIME application/x-www-form-urlencoded. Ex: Espaços são convertidos
para ‘+’, Caracteres especiais são convertidos para “%xy”, onde xy é o código
hexadecimal do caractere, etc.
Detalhamento/Exemplo de solução
O programa da loja, que roda no servidor (JSP, ASP, CGI) terá que ter lógica semelhante
à seguinte:
var resultadoHSBC = executaPOSTParaURLdoHSBC(parâmetros,...);
printOutputParaCliente(resultadoHSBC);
Neste exemplo, a variável resultadoHSBC, após executado o trecho em questão, estaria
carregada com a resposta da URL do HSBC.
Desta forma, quem faz o POST para o HSBC é o servidor de hospedagem da loja, e não o
browser do cliente.
O resultado do POST é incluído dinamicamente, pelo sistema da loja, no conteúdo da
página para o cliente.
Gateway de Pagamentos HSBC – Julho/2014
Gateway de Pagamentos HSBC – Julho/2014
Gateway de Pagamentos HSBC – Julho/2014
© Copyright HSBC Bank Brasil S.A. - Banco Múltiplo 2011 – Todos os direitos reservados.
PUBLIC - 12
13. ANEXO II - Exemplo de desenvolvimento ASP
<%@language=VBScript%>
<html> <head>
<title>gera_boleto</title> <style>
body { margin: 20px; font: 11pxsans-serif; color: #000; }
th { font: bold11pxsans-serif; color: #000; padding: 4px10px; border-bottom: 1pxsolid#9E9E9E; }
td { font: 11pxsans-serif; color: #000; text-align: right; padding: 4px10px; border-bottom: 1pxsolid#9E9E9E; }
hr { border: 10px020px0; color: #9E9E9E; background-color: #9E9E9E; height: 1px; width: 100%; }
#erro { font: bold16pxsans-serif; color: #F00 }
.tit { font: bold16pxsans-serif; color: #000; }
</style> </head> <body> <% Server.ScriptTimeout = 300 '####################################################### '### CONEXÃO MSXML2 PARA BUSCAR DADOS
'####################################################### set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")
on error resume next
'####################################################### '### CONEXÃO PARA PASSAR PARAMETROS E RECEBER O HTML '####################################################### codigoCedente = "3752950" dataVencimento = "10/02/2008" valorDocumento = "0001043.67" numeroParcela = "01" totalParcelas = "02" numeroDocumento = "0000000000001"
L1 = "Senhor(a) Caixa, favor seguir as instruções abaixo:"
L2 = "1. Não receber este documento após a data de seu vencimento" L3 = "2. Valores expressos em Reais"
L4 = "3. Não receber por depósito bancário" L5 = "Reader's Digest Brasil"
unidadeCedente = "NOME FAKE DO BRASIL" nomeSacado = "NOME FAKE DA SILVA" cpfCnpjSacado = "12345678901234" enderecoSacado = "RUA DO CARMO" numeroSacado = "43"
complementoSacado = "10 ANDAR" cepSacado = "22.222-222" bairroSacado = "CENTRO" cidadeSacado = "RIO DE JANEIRO" estadoSacado = "RJ"
url = "https://wwws5.hsbc.com.br/OFB-BOL-CNR/servlets/GeraBoleto?ServletState=10" xmlhttp.open "POST", url, false
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xmlhttp.send "codigoCedente=" & codigoCedente& "&dataVencimento=" & dataVencimento & "&valorDocumento=" & valorDocumento & "&numeroParcela=" & numeroParcela& "&totalParcelas=" & totalParcelas & "&numeroDocumento=" & numeroDocumento & "&L1=" & L1 & "&L2=" & L2 & "&L3=" & L3 & "&L4=" & L4 & "&L5=" & L5 & "&unidadeCedente=" & unidadeCedente & "&nomeSacado=" & nomeSacado & "&cpfCnpjSacado=" & cpfCnpjSacado & "&enderecoSacado=" & enderecoSacado & "&numeroSacado=" & numeroSacado & "&complementoSacado=" & complementoSacado & "&cepSacado=" & cepSacado & "&bairroSacado=" & bairroSacado &
"&cidadeSacado=" & cidadeSacado & "&estadoSacado=" & estadoSacado
//boleto = xmlhttp.responseText //Response.Write "retorno: " & boleto
Response.ContentType = "application/pdf"
//Para abrir o arquivo no navegador, definir a propriedade abaixo como "inline" //Para forçar o download do arquivo, definir a propriedade abaixo como "attachment"
//Para definir o nome do arquivo, definir a propriedade filename abaixo com o nome desejado, // no caso está definido como BoletoHSBC.pdf mas pode ser qualquer nome de arquivo que melhor // atenda à necessidade do cliente
//Para não definir nome do arquivo, apenas deixar em branco ou apagar a propriedade filename abaixo Response.AppendHeader("content-disposition", "inline;filename=BoletoHSBC.pdf ");
Gateway de Pagamentos HSBC – Julho/2014
© Copyright HSBC Bank Brasil S.A. - Banco Múltiplo 2011 – Todos os direitos reservados.
PUBLIC - 13
set xmlhttp = nothing%>
</body> </html>
Observação: O exemplo acima se destina ao entendimento da solução a ser desenvolvida,
e não à utilização exatamente como está.
Gateway de Pagamentos HSBC – Julho/2014
© Copyright HSBC Bank Brasil S.A. - Banco Múltiplo 2011 – Todos os direitos reservados.
PUBLIC - 14
14. ANEXO III - Exemplo de desenvolvimento PHP
<?php
$sock = fsockopen("ssl://wwws5.hsbc.com.br", 443, $errno, $errstr, 30); if(!$sock) die ("$errstr ($errno)\n");
$data = "ServletState=10&codigoCedente=3709590
&dataVencimento=30/08/2007&valorDocumento=1.00&numeroParcela=1&totalParcelas=1&numeroDocumento=0000000000159&L1=Inst rução1&L2=Instrução 2&L3=Instrução 3&L4=Instrução
4&L5=Instrução5&unidadeCedente=01&nomeSacado=Alexandre&cpfCnpjSacado=01848547927&enderecoSacado=Rua Cel. de tal, 397 - Apto.2&numeroSacado=&complementoSacado=&cepSacado=04.676-010&bairroSacado=Belenzinho&cidadeSacado=São
Paulo&estadoSacado=SP"; $d1 = explode('&', $data); $data = "";
for($i=0;$i<sizeof($d1);$i++) {
list($field, $value) = explode('=', $d1[$i]); $data .= $field . "=" . urlencode($value) . "&"; }
fputs($sock, "POST /OFB-BOL-CNR/servlets/GeraBoleto HTTPS/1.0\r\n"); fputs($sock, "Host: wwws5.hsbc.com.br\r\n");
fputs($sock, "Content-type: application/x-www-form-urlencoded\r\n"); fputs($sock, "Content-length: " . strlen($data) . "\r\n");
fputs($sock, "Accept: */*\r\n"); fputs($sock, "\r\n"); fputs($sock, "$data\r\n"); fputs($sock, "\r\n"); $headers = ""; while ($str = trim(fgets($sock, 4096))) { $headers .= "$str\n"; } $body = ""; while (!feof($sock)) { $body .= fgets($sock, 4096); } fclose($sock); /** * Cabeçalho de resposta * */ //print "<!--\n" . $headers . "\n-->\n\n"; /**
* Corpo do documento retornado *
*/
print $body; ?>
Observação: O exemplo acima se destina ao entendimento da solução a ser desenvolvida,
e não à utilização exatamente como está.
Gateway de Pagamentos HSBC – Julho/2014
© Copyright HSBC Bank Brasil S.A. - Banco Múltiplo 2011 – Todos os direitos reservados.
PUBLIC - 15
15. ANEXO IV - Exemplo de desenvolvimento JSP
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@page import="java.net.URL" %>
<%@page import="java.net.URLEncoder" %> <%@page import="java.net.URLConnection" %> <%@page import="java.io.OutputStreamWriter" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="java.io.DataInputStream"%>
<html>
<head>
<title>JSP Form Demo</title>
<style type="text/css">
label{ margin-right:20px;} input{ margin-top:5px;} </style> </head> <body> <b>Página Encontrada!</b> <%
System.out.println("Preparando chamada..."); String val = request.getParameter("isSubmitted"); int isSubmitted = 0;
if (val != null) {
System.out.println("Preparando dados..."); isSubmitted = Integer.parseInt(val); if (isSubmitted == 1) { String codigoCedente = "3752950"; String dataVencimento = "10/02/2008"; String valorDocumento = "0001043.67"; String numeroParcela = "01"; String totalParcelas = "02"; String numeroDocumento = "0000000000001";
String L1 = "Senhor(a) Caixa, favor seguir as instruções abaixo:";
String L2 = "1. Não receber este documento após a data de seu vencimento"; String L3 = "2. Valores expressos em Reais";
String L4 = "3. Não receber por depósito bancário"; String L5 = "Reader's Digest Brasil";
String unidadeCedente = "NOME FAKE DO BRASIL"; String nomeSacado = "NOME FAKE DA SILVA"; String cpfCnpjSacado = "12345678901234"; String enderecoSacado = "RUA DO CARMO"; String numeroSacado = "43";
String complementoSacado = "10 ANDAR"; String cepSacado = "22.222-222"; String bairroSacado = "CENTRO"; String cidadeSacado = "RIO DE JANEIRO"; String estadoSacado = "RJ";
String data = URLEncoder.encode("codigoCedente", "UTF-8") + "=" + URLEncoder.encode(codigoCedente, "UTF-8"); data += "&" + URLEncoder.encode("dataVencimento", "UTF-8") + "=" + URLEncoder.encode(dataVencimento, "UTF-8"); data += "&" + URLEncoder.encode("valorDocumento", "UTF-8") + "=" + URLEncoder.encode(valorDocumento, "UTF-8"); data += "&" + URLEncoder.encode("numeroParcela", "UTF-8") + "=" + URLEncoder.encode(numeroParcela, "UTF-8"); data += "&" + URLEncoder.encode("totalParcelas", "UTF-8") + "=" + URLEncoder.encode(totalParcelas, "UTF-8"); data += "&" + URLEncoder.encode("numeroDocumento", "UTF-8") + "=" + URLEncoder.encode(numeroDocumento, "UTF-8");
data += "&" + URLEncoder.encode("L1", "UTF-8") + "=" + URLEncoder.encode(L1, "UTF-8"); data += "&" + URLEncoder.encode("L2", "UTF-8") + "=" + URLEncoder.encode(L2, "UTF-8"); data += "&" + URLEncoder.encode("L3", "UTF-8") + "=" + URLEncoder.encode(L3, "UTF-8"); data += "&" + URLEncoder.encode("L4", "UTF-8") + "=" + URLEncoder.encode(L4, "UTF-8"); data += "&" + URLEncoder.encode("L5", "UTF-8") + "=" + URLEncoder.encode(L5, "UTF-8");
data += "&" + URLEncoder.encode("unidadeCedente", "UTF-8") + "=" + URLEncoder.encode(unidadeCedente, "UTF-8"); data += "&" + URLEncoder.encode("numeroDocumento", "UTF-8") + "=" + URLEncoder.encode(numeroDocumento, "UTF-8");
data += "&" + URLEncoder.encode("nomeSacado", "UTF-8") + "=" + URLEncoder.encode(nomeSacado, "UTF-8"); data += "&" + URLEncoder.encode("cpfCnpjSacado", "UTF-8") + "=" + URLEncoder.encode(cpfCnpjSacado, "UTF-8"); data += "&" + URLEncoder.encode("enderecoSacado", "UTF-8") + "=" + URLEncoder.encode(enderecoSacado, "UTF-8");
Gateway de Pagamentos HSBC – Julho/2014
© Copyright HSBC Bank Brasil S.A. - Banco Múltiplo 2011 – Todos os direitos reservados.
PUBLIC - 16
data += "&" + URLEncoder.encode("numeroSacado", "UTF-8") + "=" + URLEncoder.encode(numeroSacado, "UTF-8"); data += "&" + URLEncoder.encode("complementoSacado", "UTF-8") + "=" + URLEncoder.encode(complementoSacado,"UTF-8");
data += "&" + URLEncoder.encode("cepSacado", "UTF-8") + "=" + URLEncoder.encode(cepSacado, "UTF-8"); data += "&" + URLEncoder.encode("bairroSacado", "UTF-8") + "=" + URLEncoder.encode(bairroSacado, "UTF-8"); data += "&" + URLEncoder.encode("cidadeSacado", "UTF-8") + "=" + URLEncoder.encode(cidadeSacado, "UTF-8"); data += "&" + URLEncoder.encode("estadoSacado", "UTF-8") + "=" + URLEncoder.encode(estadoSacado, "UTF-8"); // Enviado Dados para a emissão do boleto
System.out.println("Montando URL de conexão...");
URL url = new URL("https://wwws5.hsbc.com.br/OFB-BOL-CNR/servlets/GeraBoleto?ServletState=10"); // Montando a conexão com o Servidor
URLConnection conn = url.openConnection(); conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); DataInputStream input;
System.out.println("Enviando dados..."); wr.write(data);
wr.flush(); // Get response data.
System.out.println("Retorno da chamada ...");
input = new DataInputStream (conn.getInputStream ());
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(response.getOutputStream()); int bytesRead = 0;
byte[] buffer = new byte[1024];
response.setContentLength(connection.getContentLength()); response.setContentType("application/pdf");
//Para abrir o arquivo no navegador, definir a propriedade abaixo como "inline" //Para forçar o download do arquivo, definir a propriedade abaixo como "attachment"
//Para definir o nome do arquivo, definir a propriedade filename abaixo com o nome desejado, // no caso está definido como BoletoHSBC.pdf mas pode ser qualquer nome de arquivo que melhor // atenda à necessidade do cliente
//Para não definir nome do arquivo, apenas deixar em branco ou apagar a propriedade filename abaixo response.setHeader("Content-Disposition", "inline; filename=BoletoHSBC.pdf");
response.setHeader("Cache-Control", "cache, must-revalidate"); response.setHeader("Pragma", "public");
while ((bytesRead = bufferedInputStream.read(buffer)) != -1) { bufferedOutputStream.write(buffer, 0, bytesRead); } bufferedOutputStream.flush(); input.close (); } } %> </body> </html>
Observação: O exemplo acima se destina ao entendimento da solução a ser desenvolvida,
e não à utilização exatamente como está.
Gateway de Pagamentos HSBC – Julho/2014
© Copyright HSBC Bank Brasil S.A. - Banco Múltiplo 2011 – Todos os direitos reservados.
PUBLIC - 17
16. ANEXO V - Exemplo de desenvolvimento ASP.NET/C#
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace TesteWeb {
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e) {
}
protected void Button1_Click(object sender, EventArgs e) {
if (txtTeste.Text != "") {
string url = "https://wwws5.hsbc.com.br/OFB-BOL-CNR/servlets/GeraBoleto?ServletState=10"; chamaURL(url);
} }
private void chamaURL(string url) { String codigoCedente = "3752950"; String dataVencimento = "10/02/2008"; String valorDocumento = "0001043.67"; String numeroParcela = "01"; String totalParcelas = "02"; String numeroDocumento = "0000000000001";
String L1 = "Senhor(a) Caixa, favor seguir as instruções abaixo:";
String L2 = "1. Não receber este documento após a data de seu vencimento"; String L3 = "2. Valores expressos em Reais";
String L4 = "3. Não receber por depósito bancário"; String L5 = "Reader's Digest Brasil";
String unidadeCedente = "NOME FAKE DO BRASIL"; String nomeSacado = "NOME FAKE DA SILVA"; String cpfCnpjSacado = "12345678901234"; String enderecoSacado = "RUA DO CARMO"; String numeroSacado = "43";
String complementoSacado = "10 ANDAR"; String cepSacado = "22.222-222"; String bairroSacado = "CENTRO"; String cidadeSacado = "RIO DE JANEIRO"; String estadoSacado = "RJ";
String data = "codigoCedente" + "=" + codigoCedente ; data += "&" + "dataVencimento" + "=" + dataVencimento; data += "&" + "valorDocumento" + "=" + valorDocumento; data += "&" + "numeroParcela" + "=" + numeroParcela; data += "&" + "totalParcelas" + "=" + totalParcelas;
data += "&" + "numeroDocumento" + "=" + numeroDocumento; data += "&" + "L1" + "=" + L1;
data += "&" + "L2" + "=" + L2; data += "&" + "L3" + "=" + L3; data += "&" + "L4" + "=" + L4; data += "&" + "L5" + "=" + L5;
data += "&" + "unidadeCedente" + "=" + unidadeCedente; data += "&" + "numeroDocumento" + "=" + numeroDocumento; data += "&" + "nomeSacado" + "=" + nomeSacado;
data += "&" + "cpfCnpjSacado" + "=" + cpfCnpjSacado; data += "&" + "enderecoSacado" + "=" + enderecoSacado; data += "&" + "numeroSacado" + "=" + numeroSacado;
Gateway de Pagamentos HSBC – Julho/2014
© Copyright HSBC Bank Brasil S.A. - Banco Múltiplo 2011 – Todos os direitos reservados.
PUBLIC - 18
data += "&" + "complementoSacado" + "=" + complementoSacado;data += "&" + "cepSacado" + "=" + cepSacado; data += "&" + "bairroSacado" + "=" + bairroSacado; data += "&" + "cidadeSacado" + "=" + cidadeSacado; data += "&" + "estadoSacado" + "=" + estadoSacado; Encoding encoding = Encoding.ASCII;
byte[] dados = encoding.GetBytes(data); // Prepara chamada
HttpWebRequest oRequest = (HttpWebRequest)WebRequest.Create(url); oRequest.Method = "POST";
oRequest.ContentType = "application/x-www-form-urlencoded"; oRequest.ContentLength = dados.Length;
Stream oReqStream = oRequest.GetRequestStream(); //Envia os dados
oReqStream.Write(dados, 0, dados.Length); oReqStream.Close();
//Recupera resposta
HttpWebResponse oResponse = (HttpWebResponse)oRequest.GetResponse(); Stream oRespStream = oResponse.GetResponseStream();
int buffer = 1024;
byte[] dataBuffer = new byte[buffer]; int count = 0;
MemoryStream ms = new MemoryStream();
while ((count = oRespStream.Read(dataBuffer, 0, buffer)) > 0) {
ms.Write(dataBuffer, 0, count); }
oRespStream.Close();
Response.AddHeader("Content-Type", "application/pdf");
//Para abrir o arquivo no navegador, definir a propriedade abaixo como "inline" //Para forçar o download do arquivo, definir a propriedade abaixo como "attachment"
//Para definir o nome do arquivo, definir a propriedade filename abaixo com o nome desejado, // no caso está definido como BoletoHSBC.pdf mas pode ser qualquer nome de arquivo que melhor // atenda à necessidade do cliente
//Para não definir nome do arquivo, apenas deixar em branco ou apagar a propriedade filename abaixo Response.AddHeader("Content-Disposition", "inline; filename=BoletoHSBC.pdf;");
Response.AddHeader("Content-Length", ms.Length.ToString()); Response.BinaryWrite(ms.ToArray()); Response.Flush(); Response.End(); } } }