Aprenda como gerar QR Code e Código PIX em PHP

Código pronto para uso de script para gerar QR Code e Código PIX em PHP

28/02/2024

Aprenda como gerar QR Code e Código PIX em PHP

Aprenda como gerar QR Code e Código PIX em PHP

Introdução

Este artigo explica como gerar QR Code e Código PIX usando PHP, especificando, além da chave para pagamento, o valor para pagamento e um identificador de transação.

Código pronto para uso

Segue abaixo o código PHP completo que ilustra como gerar QR Code e Código PIX. Este script inclui funções para formatação de campos, cálculo do CRC16, e geração do código PIX, abordando a especificação da chave para pagamento, o valor do pagamento, e um identificador de transação.

<?php

function formataCampo($id, $valor) {
    return $id . str_pad(strlen($valor), 2, '0', STR_PAD_LEFT) . $valor;
}

function calculaCRC16($dados) {
    $resultado = 0xFFFF;
    for ($i = 0; $i < strlen($dados); $i++) {
        $resultado ^= (ord($dados[$i]) << 8);
        for ($j = 0; $j < 8; $j++) {
            if ($resultado & 0x8000) {
                $resultado = ($resultado << 1) ^ 0x1021;
            } else {
                $resultado <<= 1;
            }
            $resultado &= 0xFFFF;
        }
    }
    return strtoupper(str_pad(dechex($resultado), 4, '0', STR_PAD_LEFT));
}

function geraPix($chave, $idTx = '', $valor = 0.00) {
    $resultado = "000201";
    $resultado .= formataCampo("26", "0014br.gov.bcb.pix" . formataCampo("01", $chave));
    $resultado .= "52040000"; // Código fixo
    $resultado .= "5303986";  // Moeda (Real)
    if ($valor > 0) {
        $resultado .= formataCampo("54", number_format($valor, 2, '.', ''));
    }
    $resultado .= "5802BR"; // País
    $resultado .= "5901N";  // Nome
    $resultado .= "6001C";  // Cidade
    $resultado .= formataCampo("62", formataCampo("05", $idTx ?: '***'));
    $resultado .= "6304"; // Início do CRC16
    $resultado .= calculaCRC16($resultado); // Adiciona o CRC16 ao final
    return $resultado;
}

// Exemplos de chave PIX
//
// E-mail: nome@exemplo.com.br
// CPF: 12345678901 (só números)
// CNPJ: 12345678000123 (só números)
// Celular: +5511912345678 (+55 + DDD + número) 
//
$chave = "nome@exemplo.com.br";

// Valor da transação
$valorTransacao = 1.23; 

// Identificador único da transação, caso exista
$idTransacao = ""; 

// Obtem código copia e cola do PIX
$codigoPix = geraPix($chave, $idTransacao, $valorTransacao);

// Exibe o QRCode com o PIX
echo '<p><img src="https://chart.googleapis.com/chart?cht=qr&chs=300x300&chl=' . urlencode($codigoPix) . '"></p>';

// Exibe o Código PIX (copia e cola)
echo "<p>Código PIX: " . $codigoPix . "<p>";

?>

Explicando o código

Para garantir um entendimento completo, vamos decompor o código fornecido, explicando cada função e como elas interagem para gerar o código PIX e o QR Code.

Formatação de Campo

A função formataCampo() concatena o ID do campo, o tamanho do valor e o valor.

function formataCampo($id, $valor) {
    return $id . str_pad(strlen($valor), 2, '0', STR_PAD_LEFT) . $valor;
}

Cálculo do CRC16

A função calculaCRC16() calcula o CRC16 dos dados para validar o código PIX. Utiliza operações bit a bit para processar cada caractere dos dados.

function calculaCRC16($dados) {
    $resultado = 0xFFFF;
    for ($i = 0; $i < strlen($dados); $i++) {
        $resultado ^= (ord($dados[$i]) << 8);
        for ($j = 0; $j < 8; $j++) {
            if ($resultado & 0x8000) {
                $resultado = ($resultado << 1) ^ 0x1021;
            } else {
                $resultado <<= 1;
            }
            $resultado &= 0xFFFF;
        }
    }
    return strtoupper(str_pad(dechex($resultado), 4, '0', STR_PAD_LEFT));
}

Geração do Código PIX

A função geraPix() gera o código PIX completo, incorporando todos os campos necessários para a transação, incluindo a chave PIX, o valor e o identificador da transação.

function geraPix($chave, $idTx = '', $valor = 0.00) {
    $resultado = "000201";
    $resultado .= formataCampo("26", "0014br.gov.bcb.pix" . formataCampo("01", $chave));
    $resultado .= "52040000"; // Código fixo
    $resultado .= "5303986";  // Moeda (Real)
    if ($valor > 0) {
        $resultado .= formataCampo("54", number_format($valor, 2, '.', ''));
    }
    $resultado .= "5802BR"; // País
    $resultado .= "5901N";  // Nome
    $resultado .= "6001C";  // Cidade
    $resultado .= formataCampo("62", formataCampo("05", $idTx ?: '***'));
    $resultado .= "6304"; // Início do CRC16
    $resultado .= calculaCRC16($resultado); // Adiciona o CRC16 ao final
    return $resultado;
}

Definindo a Chave PIX

Para iniciar uma transação PIX, é essencial definir a chave PIX do destinatário, que identifica a conta para recebimento. A chave pode ser um e-mail, CPF, CNPJ ou número de celular. Neste exemplo, utilizamos um endereço de e-mail como chave PIX.

// Exemplos de chave PIX
//
// E-mail: nome@exemplo.com.br
// CPF: 12345678901 (só números)
// CNPJ: 12345678000123 (só números)
// Celular: +5511912345678 (+55 + DDD + número) 
//
$chave = "nome@exemplo.com.br";

Especificando Valor e Identificador da Transação

Para completar a transação PIX, precisamos definir o valor a ser transferido e, opcionalmente, um identificador único para a transação. O valor é especificado em reais, enquanto o identificador pode ser qualquer string que ajude a associar a transação a uma venda, como um código de pedido ou de identificação do cliente.

// Valor da transação
$valorTransacao = 1.23; 

// Identificador único da transação, caso exista
$idTransacao = ""; 

Gerando e Exibindo o Código PIX e o QR Code

Após definir a chave PIX, o valor da transação e o identificador único, o próximo passo é gerar o código PIX propriamente dito. Utilizamos a função geraPix() para criar esse código. Com o código em mãos, geramos um QR Code para facilitar o pagamento, usando um serviço externo de geração de QR Codes. Finalmente, exibimos tanto o QR Code quanto o código PIX em texto, permitindo que seja facilmente copiado e utilizado em transações.

// Obtem código copia e cola do PIX
$codigoPix = geraPix($chave, $idTransacao, $valorTransacao);

// Exibe o QRCode com o PIX
echo '<p><img src="https://chart.googleapis.com/chart?cht=qr&chs=300x300&chl=' . urlencode($codigoPix) . '"></p>';

// Exibe o Código PIX (copia e cola)
echo "<p>Código PIX: " . $codigoPix . "<p>";

Conclusão

Este artigo demonstrou como gerar QR Code e código PIX para pagamentos em PHP. Antes de implementar em ambientes de produção, teste rigorosamente o código e o QR Code gerado para assegurar a precisão e a segurança das transações com seus clientes.

Este artigo nas redes sociais: Facebook, Twitter/X, LinkedIn, Telegram, Pinterest, Tumblr, Flipboard, Mastodon

Domínios hospedados
Clientes satisfeitos