Создание QR кода электронной (цифровой) визитки

Дата: 14.08.2021 Просмотры: 4373

Цифровая визитка в виде QR кода позволяет закодировать контакты пользователя и сохранять в телефон при сканировании.


Чтобы телефон и приложения могли понимать данные как контакты пользователя, они должны быть закодированы в формате vCard, пример исходных данных:


BEGIN:VCARD
VERSION:3.0
FN:к.м.н., пр. Кожокарь Денис Григорьевич
N:Пупкин;Василий;;
ORG:Рога и Копыта
URL:http://ru.wikipedia.org/Денис_Кожокарь
EMAIL;TYPE=INTERNET:Denis.Kojokar@example.com
END:VCARD



Для удобства воспользуемся библиотекой VObject


Установка

composer require sabre/vobject "^4.0"


Код

<?php

$vcard = new VObject\Component\VCard([
  'VERSION' => '3.0',
  'FN' => 'к.м.н., пр. Кожокарь Денис Григорьевич',
  'TEL' => '+7 921 221 12 31',
  'N'  => ['Пупкин', 'Василий', 'Иванович', 'пр.,к.м.н.'],
  'ORG' => 'Рога и Копыта',
  'URL' => 'http://ru.wikipedia.org/Денис_Кожокарь',
  'EMAIL' => 'Denis.Kojokar@example.com',
]);

$vcard->UID = null;
$vcard->PRODID = null;
$string = $vcard->serialize();


Полученную строку передаем в библиотеку генерации QR кода Endroid QR Code


Установка

composer require endroid/qr-code


$result = Builder::create()
  ->writer(new PngWriter())
  ->writerOptions([])
  ->data($string)
  ->encoding(new Encoding('UTF-8'))
  ->errorCorrectionLevel(new ErrorCorrectionLevelHigh())
  ->size(480)
  ->margin(10)
  ->roundBlockSizeMode(new RoundBlockSizeModeMargin())
  ->build();
$result->saveToFile('qrcode.png');



Полный исходный код получается такой:


<?php
require 'vendor/autoload.php';

use Sabre\VObject;
use Endroid\QrCode\Builder\Builder;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelHigh;
use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
use Endroid\QrCode\Writer\PngWriter;

$vcard = new VObject\Component\VCard([
  'VERSION' => '3.0',
  'FN' => 'к.м.н., пр. Кожокарь Денис Григорьевич',
  'TEL' => '+7 921 221 12 31',
  'N'  => ['Пупкин', 'Василий', 'Иванович', 'пр.,к.м.н.'],
  'ORG' => 'Рога и Копыта',
  'URL' => 'http://ru.wikipedia.org/Денис_Кожокарь',
  'EMAIL' => 'Denis.Kojokar@example.com',
]);

$vcard->UID = null;
$vcard->PRODID = null;

$string = $vcard->serialize();

$result = Builder::create()
  ->writer(new PngWriter())
  ->writerOptions([])
  ->data($string)
  ->encoding(new Encoding('UTF-8'))
  ->errorCorrectionLevel(new ErrorCorrectionLevelHigh())
  ->size(480)
  ->margin(10)
  ->roundBlockSizeMode(new RoundBlockSizeModeMargin())
  ->build();
$result->saveToFile('qrcode.png');