6495

Emissão de Boletos - API GerenciaNet

Olá Dev´s, dando continuidade a minha meta em compartilhar um pouco do meu conhecimento estou disponilibizando mas uma classe para emissão de boletos e carnês, agora da plataforma Gerencianet.

O objetivo não é ensinar como utilizar o sistema da Gerencianet e sim como integrar com a sua aplicação PHP.

Vamos lá:

1) Primeiro baixe o SDK-PHP da Gerencianet clicando aqui.

2) Baixe a classe PHP clicando aqui.

Utilização:

require_once __DIR__ . '/../Library/GerenciaNet/api/vendor/autoload.php'; 
Diretório da API do gerencianet.

Deve ser criado duas constantes obrigatórios com os códigos Client_id e Secret_id que são fornecidos pela Gerencianet e mas uma constante que define se esta utilizando o SANDBOX ou PRODUÇÂO.

Apenas essas alterações devem ser feitas na classe. A plataforma da Gerencianet trata de forma diferente a emissão de boletos e carnês sendo assim a classe já estar preparada para fazer esse tratamento, quando for informado o número de boletos emitos e gera um carne ou apenas um boleto.

Vamos ao que interessa:

Deve ser criado dois arrays com os seguintes dados

$Dados = [
  'name' => 'Nome do Cliente',
  'document' => 'CPF ou CNPJ do cliente', //apenas numeros
  'phone' => 'telefone do cliente', //apenas numeros
  'due_date' => 'Data de Vencimento do Boleto' //Padrão Y-m-d
];

$Item = [
  'description' => 'Descrição do Boleto',
  'amount' => 1, //Quantidade do Produto
  'value' => '1000', valor do produto (1000 == 10,00 / 12550 = 125,50)
  'repeats' => 1,//Quantidade de Parcelas
  'notification' => 'URL de notificacao' // URL que a plataforma enviará as notificações de mudança de Status
];

$BoletoGerencia = new ApiGerenciaNet;
$Retorno = $BoletoGerencia->emitiBoleto($Dados, $Item);

Como a uma diferencia na criação de Boletos e Carnês não seria diferente o retorno do arquivo e dever ser tratado de forma diferentes.

- Caso seja emitido apenas um boleto trata-se os dados de retorno da seguinte forma:

 $VariavelDeRetorno = [
  'code' => $Retorno['data']['charge_id'],
  'duedate' => Check::Data($PostData['tic_duedate']),
  'link_boleto' => $Retorno['data']['link'],
  'barcode' => $Retorno['data']['barcode'],
  'payment_status' => $Retorno['data']['status']
];

Caso emita um carne:

foreach ($Retorno['data']['charges'] as $R):
  extract($R);

  //se faz necessario, pois a plataforma retorna um INT sem semparação de casas decimais
  $Decimal = substr($value, -2);
  $vParcel = strlen($value) - strlen($Decimal);
  $vTotal = substr($value, 0, $vParcel) . "." . $Decimal;

  $VariavelDeRetorno = [
      'value' => $vTotal,
      'code' => $charge_id,
      'duedate' => date('Y-m-d H:i:s', strtotime($expire_at)),
      'link_boleto' => $url,
      'barcode' => $R['barcode'],
      'payment_status' => $status, // $Retorno['data']['status']
  ];
endforeach;

A plataforma retona um POST para URL que for determinada no paramentro de "notification" e para receber as informações siga os seguintes passos:

//notificações de retorno dos boletos
if($_POST):
  $Gerencianet = new ApiGerenciaNet;
  $Retorno = $Gerencianet->getNotification($_POST["notification"]);

  $PostData = [
    'cod_transaction' => $_POST["notification"], // codigo da notificação
    'payment_status' => $Retorno['statusAtual']]; //status de pagamento (paid, waiting);

  if($Retorno['statusAtual'] == 'paid'):
     $PostData['payment_date'] = date('Y-m-d H:i:s'); //validação se o pagamento foi realizado
  endif;
endif;

Espero que gostem e desde já agradeço o apoio.