PHP生成二维码【endroid/qr-code 4.x】

1. 前言

packagist 传送门: endroid/qr-code - Packagist

使用该扩展前,先确认其 PHP 版本要求,endroid/qr-code 4.x 需要 PHP 版本 7.4+

使用前需要检查下是否启用了 gd2 扩展,对于 endroid/qr-code 版本选择,参考扩展包文档对 PHP 版本的要求

2. 安装扩展

执行 composer 命令安装 endroid/qr-code 扩展

 
  1. composer require endroid/qr-code

会生成如下目录结构内容

 
  1. ├─vendor
  2. │ ├─autoload.php
  3. │ ├─ ...
  4. ├─composer.json
  5. ├─composer.lock

如果当前项目架构没有基于任何框架,只需要引入 composer 的自动加载文件即可

如果当前项目是基于 ThinkPHP,Laravel 等主流框架,这些框架都支持 composer,执行安装扩展包命令后可以直接使用

 
  1. require 'vendor/autoload.php';
3. 生成二维码

使用 Builder 生成器:

 
  1. use Endroid\QrCode\Builder\Builder;
  2. use Endroid\QrCode\Encoding\Encoding;
  3. use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelHigh;
  4. use Endroid\QrCode\Label\Alignment\LabelAlignmentCenter;
  5. use Endroid\QrCode\Label\Font\NotoSans;
  6. use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
  7. use Endroid\QrCode\Writer\PngWriter;
  8. $result = Builder::create()
  9. ->writer(new PngWriter())
  10. ->writerOptions([])
  11. // 二维码文本
  12. ->data('https://www.itqaq.com')
  13. // 内容编码
  14. ->encoding(new Encoding('UTF-8'))
  15. // 容错等级(越高二维码越密集)
  16. ->errorCorrectionLevel(new ErrorCorrectionLevelHigh())
  17. // 二维码内容区域大小
  18. ->size(300)
  19. // 二维码内容外边距大小
  20. ->margin(10)
  21. // 二维码内容圆形块尺寸模型
  22. ->roundBlockSizeMode(new RoundBlockSizeModeMargin())
  23. // 二维码中间区域logo图片
  24. ->logoPath(__DIR__ . '/3.png')
  25. ->logoResizeToWidth(100)
  26. ->logoResizeToHeight(100)
  27. // 二维码下方文字
  28. ->labelText('长按识别二维码')
  29. ->labelFont(new NotoSans(20))
  30. ->labelAlignment(new LabelAlignmentCenter())
  31. // 验证读取器(默认情况下禁用)
  32. ->validateResult(false)
  33. // 执行生成器
  34. ->build();

不使用 Builder 生成器:

 
  1. use Endroid\QrCode\Color\Color;
  2. use Endroid\QrCode\Encoding\Encoding;
  3. use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelLow;
  4. use Endroid\QrCode\QrCode;
  5. use Endroid\QrCode\Label\Label;
  6. use Endroid\QrCode\Logo\Logo;
  7. use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
  8. use Endroid\QrCode\Writer\PngWriter;
  9. $writer = new PngWriter();
  10. $qrCode = QrCode::create('https://www.itqaq.com')
  11. // 内容编码
  12. ->setEncoding(new Encoding('UTF-8'))
  13. // 容错等级
  14. ->setErrorCorrectionLevel(new ErrorCorrectionLevelLow())
  15. // 内容区域大小
  16. ->setSize(300)
  17. // 内容区域外边距
  18. ->setMargin(10)
  19. // 内容圆形块尺寸模型
  20. ->setRoundBlockSizeMode(new RoundBlockSizeModeMargin())
  21. // 内容颜色
  22. ->setForegroundColor(new Color(0, 0, 0))
  23. // 背景颜色
  24. ->setBackgroundColor(new Color(255, 255, 255));
  25. // 二维码logo logo
  26. $logo = Logo::create(__DIR__ . '/3.png')
  27. ->setResizeToWidth(50);
  28. // 二维码下方文字 label
  29. $label = Label::create('Label')
  30. ->setTextColor(new Color(255, 0, 0));
  31. // 生成二维码数据对象(后面两个参数都是可选的)
  32. $result = $writer->write($qrCode, $logo, $label);

实际开发中,使用最多的是根据一串普通文本生成字符串,所以我将代码做了简化,方便以后快速使用

 
  1. use Endroid\QrCode\QrCode;
  2. use Endroid\QrCode\Writer\PngWriter;
  3. use Endroid\QrCode\Encoding\Encoding;
  4. $qrCode = QrCode::create('https://www.itqaq.com')
  5. // 内容编码
  6. ->setEncoding(new Encoding('UTF-8'))
  7. // 内容区域大小
  8. ->setSize(200)
  9. // 内容区域外边距
  10. ->setMargin(10);
  11. // 生成二维码数据对象
  12. $result = (new PngWriter)->write($qrCode);
4. 输出二维码

以下是三种输出二维码的方式,根据项目场景选择合适的方式即可

 
  1. // 直接输出在浏览器中
  2. // ob_end_clean(); //处理在TP框架中显示乱码问题
  3. // header('Content-Type: ' . $result->getMimeType());
  4. // echo $result->getString();
  5. // 将二维码图片保存到本地服务器
  6. // $result->saveToFile(__DIR__ . '/qrcode.png');
  7. // 返回 base64 格式的图片
  8. $dataUri = $result->getDataUri();
  9. echo "<img src='{$dataUri}'>";
  10. https://www.lengleng.net
  • 30
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在TP5框架中,你可以使用第三方库生成小程序二维码,并设置二维码的过期时间。以下是一个简单的示例代码: 1.首先,你需要在composer.json中添加第三方库: ```json { "require": { "endroid/qr-code": "~3.0" } } ``` 2.在控制器中添加以下代码: ```php use Endroid\QrCode\QrCode; use Endroid\QrCode\Writer\PngWriter; class QrcodeController extends Controller { public function index() { $expireSeconds = 60 * 60 * 24; // 过期时间为1天 $scene = 'test'; // 小程序页面参数 $accessToken = 'your_access_token'; // 小程序access_token $url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={$accessToken}"; $data = [ 'scene' => $scene, 'page' => 'pages/index/index', // 小程序页面路径 'width' => 430, // 二维码宽度 'auto_color' => false, 'line_color' => [ 'r' => '0', 'g' => '0', 'b' => '0' ], 'is_hyaline' => false, 'expire_seconds' => $expireSeconds, // 过期时间 ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $result = curl_exec($ch); curl_close($ch); // 生成二维码并输出到浏览器 $qrCode = new QrCode($result); $qrCode->setSize(300); $qrCode->setMargin(10); $qrCode->setWriterByName('png'); $qrCode->setEncoding('UTF-8'); header('Content-Type: ' . $qrCode->getContentType()); header('Content-Disposition: inline; filename="qrcode.png"'); echo $qrCode->writeString(); } } ``` 以上代码中,`$expireSeconds` 变量是二维码的过期时间,单位是秒。`$scene` 变量是小程序页面的参数,可以根据实际情况修改。`$accessToken` 变量是小程序的 access_token,需要替换为你自己的。 最后,你可以在浏览器中访问该控制器的路由,即可生成小程序二维码并输出到浏览器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超酷的站长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值