Генератор 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');
Вы также можете задать нужный размер изображения.
Благодарю, что прочитали мой мини-доклад на столь простую тему.
Прошу поставить ниже лайк, для личной статистики 😊
Всем хорошего дня и интересных проектов 🚀