menu
Fórum Adianti
menu Menu
Integrando a BoletoPHP ao Adianti Framework Algumas vezes já me perguntaram como integrar a BoletoPHP (http://boletophp.com.br/) ao Adianti Framework. Infelizmente a biblioteca não é orientada a objetos, o que permitiria uma integração mais elegante. Mas isso não impede que venhamos a utilizar. Neste artigo mostrarei como integrá-la ao framework. Em primeiro lugar, precisamos integrar a biblioteca ao framework. Para tal, estou dis...
PD
Integrando a BoletoPHP ao Adianti Framework  
Fechado
Algumas vezes já me perguntaram como integrar a BoletoPHP (boletophp.com.br/) ao Adianti Framework. Infelizmente a biblioteca não é orientada a objetos, o que permitiria uma integração mais elegante. Mas isso não impede que venhamos a utilizar. Neste artigo mostrarei como integrá-la ao framework.

Em primeiro lugar, precisamos integrar a biblioteca ao framework. Para tal, estou disponibilizando o arquivo em anexo (ver link no final do artigo), que trata-se da biblioteca já preparada para ser descompactada no diretório app/lib, formando a estrutura: app/lib/boleto/images e app/lib/boleto/include. Realizei pequenas substituições de caminhos na biblioteca para ela buscar as imagens em app/lib/boleto/images, e não no diretório principal da aplicação.

Depois de descompactar o arquivo em anexo, vamos criar um formulário para fornecer alguns dados dinâmicos para geração do boleto, como número, valor, vencimento, endereço e outros. Este formulário terá um botão que acionará o método onGenerate(). Este método, por sua vez, acionará o método onGenerate() da classe BoletoView, que exibirá o boleto em tela. Os dados do formulário são convertidos em array e passados como parâmetro de BoletoView::onGenerate().

  1. <?php
  2. class BoletoForm extends TPage
  3. {
  4.     private $form;
  5.     function __construct()
  6.     {
  7.         parent::__construct();
  8.         
  9.         $this->form = new TQuickForm;
  10.         $this->form->class 'tform';
  11.         $this->form->style 'width:640px';
  12.         $this->form->setFormTitle('Gerar Boleto');
  13.         
  14.         $numero       = new TEntry('nosso_numero');
  15.         $vencimento   = new TDate('data_vencimento');
  16.         $valor        = new TEntry('valor_boleto'); // Com vírgula e sempre com duas casas depois da virgula
  17.         $sacado       = new TEntry('sacado');
  18.         $endereco1       = new TEntry('endereco1');
  19.         $endereco2       = new TEntry('endereco2');
  20.         $demonstrativo   = new TText('demonstrativo');
  21.         $instrucoes        = new TText('instrucoes');
  22.         $numero->setValue('1234');
  23.         $valor->setNumericMask(2',''.');
  24.         $valor->setValue('100,00');
  25.         $vencimento->setMask('dd/mm/yyyy');
  26.         $vencimento->setValuedate('d/m/Y'mktime(000date("m")  , date("d")+30date("Y")) ));
  27.         $sacado->setValue('Pedro');
  28.         $endereco1->setValue('Rua Júlio de Castilhos');
  29.         $endereco2->setValue('Porto Alegre, CEP: 88.888-888');
  30.         $demonstrativo->setValue("Pagamento inscrição ...\nMensalidade referente a .. \nBoleto Automático");
  31.         $instrucoes->setValue("- Sr. Caixa, cobrar multa de 2% após o vencimento\n- Receber até 10 dias após o vencimento\n- Em caso de dúvidas entre em contato conosco: email@email.com");
  32.         $this->form->addQuickField('Número',        $numero,    40);
  33.         $this->form->addQuickField('Vencimento',    $vencimento100);
  34.         $this->form->addQuickField('Valor',         $valor100);
  35.         $this->form->addQuickField('Sacado',        $sacado200);
  36.         $this->form->addQuickField('Endereço 1',    $endereco1400);
  37.         $this->form->addQuickField('Endereço 2',    $endereco2400);
  38.         $this->form->addQuickField('Demonstrativo'$demonstrativo400);
  39.         $this->form->addQuickField('Instruções',    $instrucoes400);
  40.         $demonstrativo->setSize(400,100);
  41.         $instrucoes->setSize(400,100);
  42.         
  43.         $this->form->addQuickAction('Gerar', new TAction(array($this'onGenerate')), 'ico_apply.png');
  44.         parent::add($this->form);
  45.     }
  46.     public function onGenerate($param)
  47.     {
  48.         $data $this->form->getData();
  49.         
  50.         TApplication::loadPage('BoletoView''onGenerate', (array) $data);
  51.     }
  52. }
  53. ?>



A classe Boleto View tem como responsabilidade incluir as bibliotecas necessárias para geração do boleto e exibir ele em tela. Para tal, ela recebe um vetor de parâmetros com os dados vindos do formulário BoletoForm. É importante lembrar que este método pode ser executado de qualquer ponto do sistema por meio da chamada TApplication::loadPage(), como realizado no BoletoForm, sem necessariamente termos de construir um formulário para tal. No início do método, recebemos o vetor de parâmetros, contendo os dados do formulário e realizamos algumas transformações, além de acrescentar outros dados como número de convênio, endereço do sacador e outros, que são fixos, mas que deveriam vir de alguma tabela contendo configurações do sistema.

  1. <?php
  2. class BoletoView extends TPage
  3. {
  4.     public function onGenerate($param)
  5.     {
  6.         $dadosboleto $param;
  7.         $dadosboleto["numero_documento"] = $dadosboleto["nosso_numero"];
  8.         $dadosboleto["valor_boleto"] = str_replace(".""",$dadosboleto["valor_boleto"]);
  9.         $dadosboleto["valor_boleto"] = str_replace(","".",$dadosboleto["valor_boleto"]);
  10.         $dadosboleto["valor_boleto"] = number_format($dadosboleto["valor_boleto"], 2',''');
  11.         $dadosboleto["data_documento"] = date("d/m/Y"); // Data de emissão do Boleto
  12.         $dadosboleto["data_processamento"] = date("d/m/Y"); // Data de processamento do boleto (opcional)
  13.         $demonstrativo explode("\n"$dadosboleto['demonstrativo']);
  14.         for ($n=0$n<=2$n++)
  15.         {
  16.             $key $n+1;
  17.             $texto = isset($demonstrativo[$n]) ? $demonstrativo[$n] : '';
  18.             $dadosboleto["demonstrativo{$key}"] = $texto;
  19.         }
  20.         $instrucoes explode("\n"$dadosboleto['instrucoes']);
  21.         for ($n=0$n<=3$n++)
  22.         {
  23.             $key $n+1;
  24.             $texto = isset($instrucoes[$n]) ? $instrucoes[$n] : '';
  25.             $dadosboleto["instrucoes{$key}"] = $texto;
  26.         }
  27.         
  28.         // DADOS OPCIONAIS DE ACORDO COM O BANCO OU CLIENTE
  29.         $dadosboleto["quantidade"] = "";
  30.         $dadosboleto["valor_unitario"] = "";
  31.         $dadosboleto["aceite"] = "N";        
  32.         $dadosboleto["especie"] = "R$";
  33.         $dadosboleto["especie_doc"] = "DM";
  34.         
  35.         
  36.         // ---------------------- DADOS FIXOS DE CONFIGURAÇÃO DO SEU BOLETO --------------- //
  37.         
  38.         // DADOS DA SUA CONTA - BANCO DO BRASIL
  39.         $dadosboleto["agencia"] = "8888";
  40.         $dadosboleto["conta"] = "88888888";
  41.         
  42.         // DADOS PERSONALIZADOS - BANCO DO BRASIL
  43.         $dadosboleto["convenio"] = "888888";
  44.         $dadosboleto["contrato"] = "888888";
  45.         $dadosboleto["carteira"] = "88";
  46.         $dadosboleto["variacao_carteira"] = "-019";
  47.         
  48.         // TIPO DO BOLETO
  49.         $dadosboleto["formatacao_convenio"] = "7";
  50.         $dadosboleto["formatacao_nosso_numero"] = "2";
  51.         // SEUS DADOS
  52.         $dadosboleto["identificacao"] = "Sacador";
  53.         $dadosboleto["cpf_cnpj"] = "12.222.333/0001-24";
  54.         $dadosboleto["endereco"] = "Av. Bento Gonçalves, 123. Bairro Centro - Cep 88.888-888";
  55.         $dadosboleto["cidade_uf"] = "Porto Alegre - RS";
  56.         $dadosboleto["cedente"] = "Empresa LTDA - ME";
  57.         ob_start();
  58.         if (!isset($_GET['print']) OR ($_GET['print'] !== '1'))
  59.         {
  60.             $url $_SERVER['QUERY_STRING'];
  61.             echo "<center> <a href='' onclick='window.open(\"engine.php?{$url}&print=1\")'> <h1>Clique aqui para Imprimir</h1></a> </center>";
  62.         }
  63.         include("app/lib/boleto/include/funcoes_bb.php"); 
  64.         include("app/lib/boleto/include/layout_bb.php");
  65.         if (isset($_GET['print']) AND ($_GET['print'] === '1'))
  66.         {
  67.             echo '<script>window.print();</script>';
  68.         }
  69.         $content ob_get_clean();
  70.         
  71.         parent::add($content);
  72.     }
  73. }
  74. ?>

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (18)


IL

Boa Tarde

Pablo

Ficou otimo esta integracao Adianti + BoletoPHP esta me ajudando muito, parabens!!!

Testando o exemplo desenvolvido por voce, percebi que quando envio, esta aparecendo esta string no browser.

localhost/intracob/index.php?class=BoletoView&method=onGenerate&


Se o usuario alterar algum valor no browser (http://) vai alterar os dados do boleto.



A ideia seria fazer esta requisição com POST para nao ser vista ou alterada pelo usuario.

Como faço para fazer esta requisição com POST no framework?



No aguardo


Obrigado
PD

TApplication::postData();

Att,
Pablo
PD

Ou melhor ainda, conecte diretamente o botão do primeiro formulário ao método onGenerate() da BoletoView, assim:

  1. <?php
  2. $this->form->addQuickAction('Gerar', new TAction(array( 'BoletoView''onGenerate')), 'ico_apply.png');
  3. ?>
AS

mas se ligar direto como pegar os dados?
PD

Pelos parâmetros:

function onGenerate($param)

Os parâmetros são $_REQUEST, que engloba $_GET e $_POST.
PD

Pessoal,

Como o fórum eliminou alguns caracteres de controle, como backslashes, coloquei no pastebin:
pastebin.com/GezSuhDh
pastebin.com/gthATcGp

Att,
Pablo
IL

Bom Dia

Caro Amigo

Alterei meu botao para

  1. <?php
  2. $this->form->addQuickAction('Gerar', new TAction(array( 'BoletoView''onGenerate')), 'ico_apply.png');
  3. ?>


No BoletoView os dados sao carregados corretamente

Mas quando clico no link "clique aqui para imprimir"

Da erro de variaveis;

nosso_numero
data_vencimento
valor_boleto

como pego estes valores ja que agora estou passando com POST. ?


Fico no aguardo

Obrigado
PD

Substituir no BoletoView, agregando http_build_query...:

  1. <?php
  2.         if (!isset($_GET['print']) OR ($_GET['print'] !== '1'))
  3.         {
  4.             $url $_SERVER['QUERY_STRING'] . '&'.http_build_query($_POST); // !!! AQUI
  5.         }
  6. ?>


Att,
Pablo
DS

Pablo, tentei fazer esta integração no adianti 3 e não esta funcionando será preciso realizar algua alteração?
PL

Apesar de não ter tantas opções de banco e um nome um tanto esquisito, o projeto
umbrellaTech/ya-boleto-php

https://packagist.org/packages/umbrella/retorno-boleto
https://github.com/umbrellaTech/ya-boleto-php/tree/v1.7.0

é muito bem contruido, e tem outro projeto
https://packagist.org/packages/umbrella/retorno-boleto

Todos projetado de forma simples e Orientada a Objetos. Seguindo os padrões PSR-0, PSR-1 e PSR-2.

Ambos podem ser instalados via composer.


Fica a dica.
JA

o botão "Gerar" cria a tela com o boleto e colocar o link "Clique aqui para Imprimir", quando é dado o click parece que a tela é redesenhada (desculpa, não sei o nome correto"), neste momento o boleto passa a ter um formato perfeito, antes tinha falhas no desenho.

Como faço para que quando der o click no botão Gerar ele vá direto para ultima tela, alguém passou por isso?
JA

Resumindo, quando der um click em Gerar ele vai direto para a impressora, sem fazer preview
JA

Pessoal, como faço a chamada do boleto sem fazer preview ? mandar direto para a impressora!
AR

Como fazer geração de boletos em lote pelo Adianti?
AM

Bom dia, a visualização dos dados do boleto na url ainda continuam, alguém resolveu esse problema?

localhost/pharma/engine.php?class=BoletoView&method=onGenerate&a

Ai qquer esperto com um pouco de conhecimento pode alterar os dados na url e imprimir o boleto com novos dados.
EB

Muito bom artigo.
Parabens!!
EB

Boa noite pessoal.
Alguem conseguiu gerar os boletos em lote?

Att.,
Edimar Barbosa
EB

Resolvi pessoal.
Coloquei o
  1. <?php include ?>
fora do loop e chamei as funcoes necessarias dentro do loop.

Obrigado a todos.