Como utilizar o OpenBoleto com Composer e CodeIgniter
Existe uma biblioteca no GitHub chamada OpenBoleto que foi criada para ser instalada via composer no seu sistema ou no seu Framework.
Hoje vou ensinar a como instalar esta biblioteca no CodeIgniter via composer para que você possa imprimir boletos bancários de um jeito super simples.
O único inconveniente da biblioteca é que ela não suporta muitos bancos.
Na versão que ela está suporta apenas:
- Banco de Brasília (BRB)
- Banco do Brasil
- Bradesco
- Caixa (SIGCB)
- Itaú
- Santander
- Unicred
Eu não acredito que eles vão adicionar novos bancos, pois a última atualização foi em agosto de 2014. Mas talvez sirva de inspiração para você criar a possibilidade de novos bancos e adicioná-los ao GitHub.
O primeiro passo é instalarmos o CodeIgniter utilizando o composer, depois, incluiremos o OpenBoleto no composer.json para ele ser instalado no CodeIgniter.
Primeiro passo: instalando o CodeIgniter via Composer
Se você não conhece o composer, veja este meu post sobre o assunto.
A partir de um terminal ou prompt de comando do dos no Windows, acesse a pasta do seu servidor web local e digite o seguinte comando:
composer create-project bcit-ci/codeigniter open_boleto_ci --prefer-dist
Onde “open_boleto_ci” é o nome da pasta que o composer irá criar na raiz do seu servidor web local.
Feito isso, após alguns segundos o CodeIgniter já deverá estar instalado no seu computador.
Abra seu navegador e acesse o endereço que talvez seja: http://localhost/open_boleto_ci e veja se o CodeIgniter está rodando normalmente.
Após esta etapa, vamos agora instalar o OpenBoleto.
Usando seu editor de textos preferido ou sua IDE, abra o arquivo composer.json que está na raiz da pasta open_boleto_ci e vamos acrescentar “kriansa/openboleto”: “dev-master” que irá instruir o composer a instalar o OpenBoleto.
Seu composer.json ficará assim:
{ "description" : "The CodeIgniter framework", "name" : "codeigniter/framework", "license": "MIT", "require": { "php": ">=5.2.4" }, "require-dev": { "mikey179/vfsStream": "1.1.*", "kriansa/openboleto": "dev-master" } }
Feito isto, salve o arquivo e volte ao terminal ou ao prompt do DOS, entre na pasta open_boleto_ci, caso já não esteja lá, e digite a seguinte linha:
composer update
Este comando irá chamar o composer que irá verificar se existe alguma alteração. Como acrescentamos uma nova linha no composer.json o composer irá agora procurar por esta nova biblioteca e instalá-la para você automaticamente após alguns segundos.
Terminada esta etapa, vamos agora informar ao CodeIgniter que ele deverá carregar também o autoload.php do composer.
Para isto, acesse: application/config/config.php e na linha 134 deixe assim:
$config['composer_autoload'] = FCPATH.'vendor/autoload.php';
Como é dito nos comentários acima desta linha, deveríamos apenas informar TRUE para que o CodeIgniter carregue o autoload.php do composer, porém, se fizermos somente isto, o CodeIgniter irá procurar pelo autoload neste caminho: application/vendor/autoload.php e assim não irá funcionar, porque além desta pasta não existir, por mais que você a crie, não vai ser o autoload padrão do composer.
Então, o que devemos fazer é em vez de informarmos TRUE vamos indicar o caminho completo até o autoload original do composer, que é como mostrei acima.
Feito isto, é para tudo estar funcionando.
Segundo passo: configurando e usando o OpenBoleto
Vamos agora usar o OpenBoleto.
Note que eu usei aqui a instalação original do CodeIgniter e que vamos precisar de muito poucas mudanças.
Vamos colocar o código que instancia o OpenBoleto e faz a geração do mesmo no método index do controller Welcome_message.php. Deixe-o assim:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); use OpenBoleto\Banco\BancoDoBrasil; use OpenBoleto\Agente; class Welcome extends CI_Controller { public function index() { $sacado = new Agente('Fernando Maia', '023.434.234-34', 'ABC 302 Bloco N', '72000-000', 'Brasília', 'DF'); $cedente = new Agente('Empresa de cosméticos LTDA', '02.123.123/0001-11', 'CLS 403 Lj 23', '71000-000', 'Brasília', 'DF'); $boleto = new BancoDoBrasil(array( // Parâmetros obrigatórios 'dataVencimento' => new DateTime('2013-01-24'), 'valor' => 23.00, 'sequencial' => 1234567, // Para gerar o nosso número 'sacado' => $sacado, 'cedente' => $cedente, 'agencia' => 1724, // Até 4 dígitos 'carteira' => 18, 'conta' => 10403005, // Até 8 dígitos 'convenio' => 1234, // 4, 6 ou 7 dígitos )); $dados['boleto'] = $boleto->getOutput(); $this->load->view('welcome_message', $dados); } }
Antes da classe ser criada, repare que existem duas linhas:
use OpenBoleto\Banco\BancoDoBrasil; use OpenBoleto\Agente;
Aqui estamos dizendo ao CodeIgniter para buscar os métodos e propriedades do OpenBoleto que estão naquele local. Estamos usando o namespace do OpenBoleto.
É aqui que você deverá dizer com qual banco irá trabalhar.
Para ver o nome exato dos bancos, abra esta pasta: vendor/kriansa/openboleto/src/OpenBoleto/Banco
Estes são os nomes que você irá alterar. Por exemplo, se quiser trabalhar com a Caixa Econômica, use a seguinte linha:
use OpenBoleto\Banco\Caixa;
O próximo passo é instanciarmos a classe e preenchê-la com as informações necessárias.
Aqui estou usando o próprio exemplo dado pelo desenvolvedor da biblioteca:
$sacado = new Agente('Fernando Maia', '023.434.234-34', 'ABC 302 Bloco N', '72000-000', 'Brasília', 'DF'); $cedente = new Agente('Empresa de cosméticos LTDA', '02.123.123/0001-11', 'CLS 403 Lj 23', '71000-000', 'Brasília', 'DF'); $boleto = new BancoDoBrasil(array( // Parâmetros obrigatórios 'dataVencimento' => new DateTime('2013-01-24'), 'valor' => 23.00, 'sequencial' => 1234567, // Para gerar o nosso número 'sacado' => $sacado, 'cedente' => $cedente, 'agencia' => 1724, // Até 4 dígitos 'carteira' => 18, 'conta' => 10403005, // Até 8 dígitos 'convenio' => 1234, // 4, 6 ou 7 dígitos ));
Certo, agora, para imprimirmos o boleto, basta chamarmos o método getOutput() que está dentro da variável $boleto.
Como não devemos imprimir nada a partir de um controller, vamos então enviar esta informação para a nossa view, que neste caso é a mesma que o CodeIgniter nos disponibilizou.
Então após o código acima, digite assim:
$dados['boleto'] = $boleto->getOutput(); $this->load->view('welcome_message', $dados);
Aqui eu vinculo a uma variável chamada “boleto” o boleto gerado pelo método getOutput() da classe e em seguida, passo isto para a view.
A única alteração que fiz na view, foi só excluir o código não utilizado e apenas imprimi o conteúdo da variável. Veja:
<?php defined('BASEPATH') OR exit('No direct script access allowed');?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>OpenBoleto e CodeIgniter</title> </head> <body> <? echo $boleto; ?> </body> </html>
E é isto. Se você abrir sua aplicação no navegador, deverá ver um boleto do banco do Brasil aparecendo.
Dúvidas e sugestões usem os comentários abaixo.
Abraços
Fábio