Генератор QR кода (Google Chart API)

Доброго времени суток!

Сегодня мы с Вами научимся создавать QR-коды с помощью Google Chart API.

Собственно, учится то и не чему, все же сделали до нас! Я лишь написал простейший класс, реализующий взаимодействие с Google Chart API. Необходимо лишь создать объект класса, установить в свойство строковое значение, которое необходимо «зашифровать» и вызвать основной метод класса.

<?php

/**
 * Class QRCodeGenerator
 */
class QRCodeGenerator
{

    const GOOGLE_CHART_URL = 'https://chart.apis.google.com/chart';

    /**
     * @var string $data
     */
    private $data;

    /**
     * @param string $text
     * @return void
     */
    public function setText(string $text) : void
    {
        $this->data = $text;
    }

    /**
     * @param int $size
     * @param null $path
     */
    public function getQrCode($size = 350, $path = null)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, self::GOOGLE_CHART_URL);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, "chs={$size}x{$size}&cht=qr&chl=" . urlencode($this->data));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);

        $qrCode = curl_exec($ch);

        curl_close($ch);

        if($qrCode) {
            if($path) {
                if(!preg_match("#\.png$#i", $path)) {
                    $path .= ".png";
                }

                return file_put_contents($path, $qrCode);
            } else {
                header("Content-type: image/png");
                print $qrCode;
                return true;
            }
        }
        return false;
    }
}

Ниже показано два варианта использования данного класса:

  • Просто отобразить полученный QR-код
  • Сохранить QR-код в указанную папку и дать имя, которое соответствует последнему «сегменту» (у меня это my-site-qr)
<?php

include "QRCodeGenerator.php";
 
$qrCode = new QRCodeGenerator(); 
$qrCode->setText('den4ela.txtlife.com');

# Отображаем QR-код, но не сохраняем
$qrCode->getQrCode();

# Просто сохраняем QR-код
$qrCode->getQrCode(450, 'images/my-site-qr');

Вы также можете задать нужный размер изображения.


Благодарю, что прочитали мой мини-доклад на столь простую тему.

Прошу поставить ниже лайк, для личной статистики 😊

Всем хорошего дня и интересных проектов 🚀