Repositório complementar do canal WDEV para a geração do payload do QR code Pix com PHP.
Nesse repositório você vai encontrar constantes com IDs dos objetos do payload do Pix e método de cálculo da verificação cíclica de redundância (CRC16).
Para assistir o vídeo dessa implementação, acesse: Integração Pix PHP: Gerando payload e QR Code estático do Pix com PHP (YouTube)
Manual de padrões para iniciação do Pix
Para facilitar a implementação do payload Pix, seguem abaixo as constantes que usaremos no projeto:
/**
* IDs do Payload do Pix
* @var string
*/
const ID_PAYLOAD_FORMAT_INDICATOR = '00';
const ID_MERCHANT_ACCOUNT_INFORMATION = '26';
const ID_MERCHANT_ACCOUNT_INFORMATION_GUI = '00';
const ID_MERCHANT_ACCOUNT_INFORMATION_KEY = '01';
const ID_MERCHANT_ACCOUNT_INFORMATION_DESCRIPTION = '02';
const ID_MERCHANT_CATEGORY_CODE = '52';
const ID_TRANSACTION_CURRENCY = '53';
const ID_TRANSACTION_AMOUNT = '54';
const ID_COUNTRY_CODE = '58';
const ID_MERCHANT_NAME = '59';
const ID_MERCHANT_CITY = '60';
const ID_ADDITIONAL_DATA_FIELD_TEMPLATE = '62';
const ID_ADDITIONAL_DATA_FIELD_TEMPLATE_TXID = '05';
const ID_CRC16 = '63';
Para facilitar a implementação do payload Pix, segue abaixo o método de cálculo da hash de verificação CRC16 exigida:
/**
* Método responsável por calcular o valor da hash de validação do código pix
* @return string
*/
private function getCRC16($payload) {
//ADICIONA DADOS GERAIS NO PAYLOAD
$payload .= self::ID_CRC16.'04';
//DADOS DEFINIDOS PELO BACEN
$polinomio = 0x1021;
$resultado = 0xFFFF;
//CHECKSUM
if (($length = strlen($payload)) > 0) {
for ($offset = 0; $offset < $length; $offset++) {
$resultado ^= (ord($payload[$offset]) << 8);
for ($bitwise = 0; $bitwise < 8; $bitwise++) {
if (($resultado <<= 1) & 0x10000) $resultado ^= $polinomio;
$resultado &= 0xFFFF;
}
}
}
//RETORNA CÓDIGO CRC16 DE 4 CARACTERES
return self::ID_CRC16.'04'.strtoupper(dechex($resultado));
}
Canal de tecnologia com conteúdos sobre programação e super dicas para a galera que está começando no mundo dev.
Toda quinta às 20h tem vídeo novo, então inscreva-se para não perder nenhuma novidade: