Cómo generar un código QR con PHP utilizando la API de Google Chart

El código QR es un código legible por maquinas que se compone de cuadrados negros sobre un fondo blanco. Por norma general, los códigos QR se utilizan para albergar información que sea legible por una cámara. Es posible que a raíz de algún proyecto, te veas obligado a generar códigos QR dinámicamente para productos, usuarios u otros elementos de tu aplicación. Si navegas por Internet encontrarás miles de librerías capaces de generar código QR en PHP. Pero la API de Google Chart nos otorga una manera sencilla de generar códigos QR en PHP sin necesidad de utilizar librerías o plugins.

En este tutorial, veremos cómo generar códigos QR dinámicamente con PHP utilizando la API de Google Chart y cURL. Nuestro generador de códigos QR en PHP nos permitirá generar códigos QR para URLs, textos, email, teléfonos, SMS, información de contacto y demás contenido.

Para ello utilizo una clase en PHP que genera códigos QR llamada QR_BarCode, que ayuda a generar imágenes de códigos QR en formato PNG, que después puedes descargar o albergar en tu máquina.

<?php
/**
 * QR_BarCode - Barcode QR Code Image Generator
 * @author CodexWorld
 * @url http://www.codexworld.com
 * @license http://www.codexworld.com/license/
 */
class QR_BarCode{
    // Google Chart API URL
    private $googleChartAPI = 'http://chart.apis.google.com/chart';
    // Code data
    private $codeData;
    
    /**
     * URL QR code
     * @param string $url
     */
    public function url($url = null){
        $this->codeData = preg_match("#^https?://#", $url) ? $url : "http://{$url}";
    }
    
    /**
     * Text QR code
     * @param string $text
     */
    public function text($text){
        $this->codeData = $text;
    }
    
    /**
     * Email address QR code
     *
     * @param string $email
     * @param string $subject
     * @param string $message
     */
    public function email($email = null, $subject = null, $message = null) {
        $this->codeData = "MATMSG:TO:{$email};SUB:{$subject};BODY:{$message};;";
    }
    
    /**
     * Phone QR code
     * @param string $phone
     */
    public function phone($phone){
        $this->codeData = "TEL:{$phone}";
    }
    
    /**
     * SMS QR code
     *
     * @param string $phone
     * @param string $text
     */
    public function sms($phone = null, $msg = null) {
        $this->codeData = "SMSTO:{$phone}:{$msg}";
    }
    
    /**
     * VCARD QR code
     *
     * @param string $name
     * @param string $address
     * @param string $phone
     * @param string $email
     */
    public function contact($name = null, $address = null, $phone = null, $email = null) {
        $this->codeData = "MECARD:N:{$name};ADR:{$address};TEL:{$phone};EMAIL:{$email};;";
    }
    
    /**
     * Content (gif, jpg, png, etc.) QR code
     *
     * @param string $type
     * @param string $size
     * @param string $content
     */
    public function content($type = null, $size = null, $content = null) {
        $this->codeData = "CNTS:TYPE:{$type};LNG:{$size};BODY:{$content};;";
    }
    
    /**
     * Generate QR code image
     *
     * @param int $size
     * @param string $filename
     * @return bool
     */
    public function qrCode($size = 200, $filename = null) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $this->googleChartAPI);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, "chs={$size}x{$size}&cht=qr&chl=" . urlencode($this->codeData));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        $img = curl_exec($ch);
        curl_close($ch);
    
        if($img) {
            if($filename) {
                if(!preg_match("#.png$#i", $filename)) {
                    $filename .= ".png";
                }
                
                return file_put_contents($filename, $img);
            } else {
                header("Content-type: image/png");
                print $img;
                return true;
            }
        }
        return false;
    }
}
?>

Para crear la imagen PNG para el código QR, utilizamos la clase QR_BarCode tal que así:

// include QR_BarCode class 
include "QR_BarCode.php"; 

// QR_BarCode object 
$qr = new QR_BarCode(); 

// create text QR code 
$qr->text('Programacion.net'); 

// display QR code image
$qr->qrCode();

El anterior ejemplo genera y muestra un código QR según los parámetros que le hayamos pasado. Si quieres guardar la imagen de tu código QR, utiliza la clase QR_BarCode de este modo:

<?php
// save QR code image
$qr->qrCode(350,'images/cw-qr.png');

La clase QR_BarCode genera diferentes tipos de códigos QR en PHP.

<?php
// create url QR code 
$qr->url('URL');

// create text QR code 
$qr->text('textContent');

// create email QR code 
$qr->email('emailAddress', 'subject', 'message');

// create phone QR code 
$qr->phone('phoneNumber');

// create sms QR code 
$qr->sms('phoneNumber', 'message');

// create contact QR code 
$qr->contact('name', 'address', 'phone', 'email');

// create content QR code 
$qr->content('type', 'size', 'content');

La clase QR_BarCode hace que la creación de códigos QR sea fácil y sencilla. Solo necesitas incluir un fichero (QR_BarCode.php) para generar distintos tipos de códigos QR. Utilizamos cURL para que funcione la clase QR_BarCode, así que, antes de poner en práctica la clase, asegúrate que cURL está habilitado en tu máquina. Por cierto, la clase es obra de Codexworld. Desde aquí mi agradecimiento por tal magnífica clase, que seguro que nos sacará de más de un apuro a más de uno.

Fuente: codexworld.com

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP