注意:
1、不同版本,安装qr code 用法不同。PHP8.0以上用qr code 4.0版本, PHP7.4用 qr code3.0版本
2、项目根目录安装:
//安装3.0版本
composer require endroid/qr-code:^3.0
//检查安装版本
composer show endroid/qr-code
选Y
3、使用方式:
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Writer\PngWriter; // 使用 PngWriter
use Endroid\QrCode\Writer\JpgWriter;
use Endroid\QrCode\Writer\SvgWriter;
public function index()
{
$qrCode = new QrCode($OrderList['invoice_no']); // 使用发票号作为二维码内容
$qrCode->setSize(300); // 设置二维码的大小
$qrCode->setMargin(10); // 设置二维码的边距
$writer = new PngWriter(); // 确保初始化了 PngWriter
// 定义二维码保存路径
$qrCodePath = $_SERVER['DOCUMENT_ROOT'] . '/uploads/qrcodes/' . 'order_' . $OrderList['invoice_no'] . '.png';
// 创建目录(如果目录不存在)
$dirPath = dirname($qrCodePath); // 获取保存路径的父目录
if (!is_dir($dirPath)) {
mkdir($dirPath, 0777, true); // 创建目录并设置权限
}
// 保存二维码图片
$writer->writeFile($qrCode, $qrCodePath); // 保存二维码文件// 保存二维码文件到指定路径
// 更新订单数据,添加二维码图片路径
$orderData['image'] = '/uploads/qrcodes/' . 'order_' . $OrderList['invoice_no'] . '.png';
//更新到数据库指定路径,根据自己逻辑而定
print_r($orderData);exit;
}
4、如果直接使用,会出现错误,这里修改了一下接口文件代码, 根目录搜索 : AbstractWriter.php 文件
//代码第27行左右
public function writeFile(QrCodeInterface $qrCode, string $path): string
{
// 生成二维码字符串(图像内容)
$string = $this->writeString($qrCode);
// 将图像内容保存到指定路径
file_put_contents($path, $string);
// 返回保存二维码图像的路径 ,新增了返回路径,就没报错了
return $path;
}