Conteúdos

Escrevendo QrCode com PHP

![QrCode](/images/qrcode.png)

Olá pessoas,

Hoje vou mostrar como usar a biblioteca endroid/qrcode para criar qrcode usando PHP. Não encontrei uma documentação muito vasta da biblioteca, então vou compartilhar aqui algumas coisas que aprendi.

Primeiramente, o que qrcode?

Qr code é um código de barra em duas dimensões, criado no Japão, no qual o código é convertido para texto, a partir de programas de leituras.

No Android eu indico dois softwares:

  • Barcode Scanner - Um scanner mais simples e rápido
  • Powerful QR Code Scanner A+ - Um scanner mais completo, que permite inclusive, visualizar os resultado do scan em texto puro (muito util quando formos trabalhar com contatos e agenda).

Para iniciarmos, tenha certeza de ter a extensão GD, instalada. No debian e derivados é sudo apt-get install php5-gd.

Então vamos por a mão no código.

Vamos começar, crie uma pasta do projeto e utilize o composer para adicionar o pacote do endroid/qrcode com: composer require endroid/qrcode

Não vamos criar um aplicativo muito completo, a ideia é usar o endroid/qrcode para criar qrcode, e não sobre as melhores práticas de programação.

Crie o arquivo index.php usando touch index.php. E deixe um servidor embutido do PHP rodando: php -S localhost:8000 &

Agora edite o arquivo index.php com o seguinte trecho:

Até aqui será o bastante para ter um Qrcode do conteudo do metodo “setText”. Mas vamos incrementar um pouco mais as coisas.

Vocẽ pode criar um arquivo de imagem, e então salvar essa imagem em disco. Bastando substituir o getDataUri() por render($filename), onde $filename e o caminho completo e nome do arquivo.

Ajuste o setErrorCorrection('low') até encontrar um que funcione bem. Por aqui, em testes em Androids e iPhones, o ‘low’ foi o que funcionou melhor.

Para compartilhar contatos e eventos do calendário, utilize o template abaixo:

Contato

1
2
3
4
5
6
7
MECARD:
N:$sobrenome,$primeiro_nome;
TEL:$telefone;
EMAIL:$email;
NOTE:$empresa;
ADR:$endereco,$uf,$cidade,$cep,$pais;
URL:$site;;

Evento

1
2
3
4
5
6
7
BEGIN:VEVENT
SUMMARY:$nome_evento
LOCATION:$localizacao
DESCRIPTION:$desc
DTSTART:$data_inicio
DTEND:$data_termino
END:VEVENT"

Aqui as datas devem estar formatadas assim: AnoMesDiaTHoraMinutoSegundo. Por exemplo, um evento que será dia 31/01/2017 às 9:35 ficará : 20170131T093500.

Caso utilize o DateTime do PHP a saída será:

1
2
$data_inicio = $data_inicio_datetime->format("Ymd") . "T" . $data_inicio_datetime->format("Hi00");
$data_termino = $data_termino_datetime->format("Ymd") . "T" . $data_termino_datetime->format("Hi00");

Qualquer dúvida, deixe aí nos contatos.

Até a próxima.