TP6接口二维码生成的实现

老瑶酱_4422

老瑶酱_4422

2026-08-17

1030人浏览

原创

tp6中生成二维码接口需安装simplesoftwareio/qrcode扩展,控制器通过qrcode门面生成png图片流或base64数据,支持参数自定义与异常处理,配合路由配置及安全校验,适用于多端调用。

tp6接口二维码生成的实现

ThinkPHP6(TP6)中生成二维码接口,核心是借助第三方库(如 endroid/qr-codesimplesoftwareio/qrcode),结合控制器返回图片流或 Base64 数据。不依赖前端 JS,纯后端生成,适合小程序、APP、H5 等场景调用。

安装兼容的二维码扩展包

TP6 基于 PHP 7.2+,推荐使用轻量、维护活跃的 simplesoftwareio/qrcode(Laravel 生态常用,TP6 兼容良好):

  • 执行命令安装:composer require simplesoftwareio/qrcode
  • 该包底层基于 bacon/bacon-qr-code,支持 PNG/SVG 输出、纠错等级、尺寸、颜色等自定义
  • 无需额外配置服务提供者(TP6 无 service provider 自动注册机制),直接在控制器中 use 即可

编写二维码生成接口控制器

新建控制器(如 app\controller\QrCode.php),实现一个接收参数并输出二维码图片的接口:

来画
来画

来画是一款AI文本写作工具,AI漫剧全网内测 创作不再受限。

下载
  • 支持 GET 参数传入 text(要编码的内容)、size(宽高像素,默认 300)、level(纠错等级 L/M/Q/H)
  • 设置响应头为 image/png,防止浏览器下载或乱码
  • 捕获异常(如空内容、非法字符),返回统一错误提示(如 JSON 格式)

示例代码片段:

use SimpleSoftwareIO\QrCode\Facades\QrCode;
use think\Response;

public function index()
{
    $text = input('text', '');
    $size = (int)input('size', 300);
    $level = input('level', 'M');

    if (empty($text)) {
        return json(['code' => 400, 'msg' => 'text 参数不能为空'])->code(400);
    }

    try {
        $png = QrCode::size($size)
                     ->errorCorrection($level)
                     ->generate($text);

        return Response::create($png, 'image/png');
    } catch (\Exception $e) {
        return json(['code' => 500, 'msg' => '生成失败:' . $e->getMessage()])->code(500);
    }
}

路由与安全注意事项

route/app.php 中注册简洁路由(避免暴露过多参数):

  • 推荐使用 GET /api/qrcode?text=xxx&size=200,便于调试和跨域调用
  • 生产环境建议加简单校验,如限制 text 长度(≤ 500 字符)、过滤特殊控制字符(防止 XSS 或协议滥用)
  • 若用于登录或支付等敏感场景,text 应为加密 token 或短期有效链接,不可直接暴露用户 ID 等明文信息
  • 考虑配合 Nginx 缓存静态二维码(如对相同参数做 10 分钟缓存),减轻 PHP 重复生成压力

进阶:返回 Base64 供前端直接渲染

部分前端(如 Vue/React 小程序)更倾向接收 Base64 字符串而非图片流:

  • 修改控制器逻辑:不返回 Response,而是 base64_encode($png),再包装成 JSON
  • 注意设置合适的 Content-Type 为 application/json
  • 前端可用 <img :src="'data:image/png;base64,' + data.base64"> 直接显示
  • 注意 Base64 体积比原始 PNG 大约 33%,大尺寸或高频请求建议走图片流方式

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

2023.10.19

3028

3

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

2025.10.17

4189

12

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2025.12.29

3649

9

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

2026.01.19

366

15

Vibeknow在线使用入口合集
Vibeknow在线使用入口合集

本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

2026.09.21

0

20

NumPy随机数文件读写与dtype数据类型
NumPy随机数文件读写与dtype数据类型

本专题整理 NumPy 随机数、文件读写与 dtype 数据类型相关教程,覆盖 Generator/random、随机数种子、正态分布采样、npy/npz/CSV/TXT 保存读取、loadtxt/savetxt、memmap、大文件处理、astype 类型转换、结构化 dtype、整数溢出和精度丢失等场景。

2026.09.21

0

24

NumPy矩阵运算与线性代数计算
NumPy矩阵运算与线性代数计算

本专题整理 NumPy 矩阵运算与线性代数计算相关教程,覆盖矩阵乘法、dot 与 @ 运算符、逆矩阵、行列式、特征值与特征向量、SVD、线性方程组、欧氏距离、矩阵分解和大规模矩阵性能优化等内容,帮助读者掌握 np.linalg 与矩阵计算实战。

2026.09.21

0

20

NumPy广播机制数学运算与统计分析
NumPy广播机制数学运算与统计分析

本专题整理 NumPy 广播机制、数组数学运算与统计分析相关教程,覆盖广播规则、维度对齐、矩阵与数组加减除法、向量化计算、均值方差、分位数、中位数、直方图和 unique 频次统计等场景,帮助读者掌握 ndarray 高效计算与统计处理方法。

2026.09.21

0

17

NumPy数组创建索引切片与数据选择
NumPy数组创建索引切片与数据选择

本专题整理 NumPy 数组创建、索引、切片与数据选择相关教程,覆盖 np.array、zeros/ones、多维数组形状、基础切片、花式索引、布尔索引、条件筛选、视图与副本等常用场景,帮助读者系统掌握 ndarray 数据构造与高效提取方法。

2026.09.21

0

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.1万人学习