在php请求地址,后面跟上一段需要生成二维码的网址,比如:https://e.tqge.com/ajax/get_qrcodeimg.php?url=http://www.baidu.com

在浏览器里打开就能看到一张二维码图片,方便简单。需要生成别的网址,只需要

将参数部分的,url=替换成你的网址。

这是怎么做到的呢,先在控制器里添加一个方法,然后构建一个访问路径能访问到这个方法,比如https://e.tqge.com/user/myqrcode/getqrcode

这个方法的目的就是输出一段html包裹着img的标签,当然里面还有生成的二维码的图片based64地址。

记得在thinkphp里先引入phpqcode库

public function getQrcode(Request $request)
{
    $url = $request->get('url');

    // 实例化验证器
    $Validate = new \think\Validate();

    // 设置验证规则
    $Validate->rule([
        'url' => 'require|url',
    ]);

    // 设置验证失败时的消息
    $Validate->message([
        'url.require' => '目标网址不能为空',
        'url.url'     => '请填写正确的网址',
    ]);

    // 进行验证
    if (!$Validate->check(['url' => $url])) {
        // 直接输出错误信息
        echo "Error: " . $Validate->getError();
        return;
    }

    require "../vendor/phpqrcode/phpqrcode.php";
    $qRcode = new \QRcode();
    $data = $url;
    $level = 'L';
    $size = 6;

    $dir = __DIR__ . '/../../../public/phpqrcode/';
    if (!file_exists($dir)) {
        mkdir($dir, 0777, true);
    }

    $filename = date('Ymd_His') . '.png';
    $outfile = $dir . $filename;
    $qRcode->png($data, $outfile, $level, $size);

    $imgData = file_get_contents($outfile);
    $imgBase64 = 'data:image/png;base64,' . base64_encode($imgData);

    // 直接输出Base64编码的图片数据
   echo  '<img class="qrimg" style="width: 400px; display: block; margin-left: auto; margin-right: auto;" src="'.$imgBase64.'" />';
}

当然还需要一个php文件可以使用 cURL 获取的上面方法的响应内容,通常是从远程服务器获得的数据

<?php
// 获取前端传递的参数
$url = $_GET['url'] ?? '';

// 检查是否提供了 URL 参数
if (empty($url)) {
echo "Error: No URL provided.";
exit;
}

// 初始化 cURL 会话
$curl = curl_init();

// 设置 cURL 选项
curl_setopt($curl, CURLOPT_URL, "https://e.tqge.com/user/myqrcode/getqrcodeimg?url=" . urlencode($url));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);

// 执行 cURL 会话
$response = curl_exec($curl);

// 检查是否有错误发生
if (curl_errno($curl)) {
echo 'Error:' . curl_error($curl);
} else {
// 输出响应内容
header("Access-Control-Allow-Origin: *"); // 设置 CORS 头部
echo $response;
}

// 关闭 cURL 会话
curl_close($curl);


如果要获取链接的响应结果,还需要用ajax的方式

例如

//html结构
<div class="layui-col-md6">
<h3 class="footer-item-title">官方交流群</h3>
<p class="img-group"><img id="qrcode" src="../images/logo.png" alt="二维码" />扫码免费加入{{ config('sys.web.name') }}官方交流QQ群,与各位大佬一起交流技术、讨论问题。</p>

</div>
//引入Jquery
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>

//Ajax具体实现
<script>
$(document).ready(function() {
$.ajax({
type: "GET",
url: "https://e.tqge.com/user/myqrcode/getqrcode",
data: {
url: "https://qm.qq.com/q/FIxrlaWK8E" // 这里假设您已经有了要生成二维码的 URL
},
dataType: "text",
success: function(obj) {

if (obj) {
// 假设 obj 就是二维码图片的 URL
$('#qrcode').attr('src', obj);

} else {
// 如果没有获取到二维码图片,显示错误信息
alert('未能获取到二维码图片');
}
},
error: function(jqXHR, textStatus, errorThrown) {
console.error("Error fetching QR code:", textStatus, errorThrown);
alert('无法获取二维码,请稍后再试');
}
});
});
</script>

一个可以直接在html标签里输出图片的链接接口:

https://khzl2.fakazhan.com/qrcode.php?content=https://www.tqge.com/

下面这种就不能直接在html标签里显示,只能直接输出图片:

https://e.tqge.com/user/myqrcode/getqrcodeimg?url=https://www.tqge.com/206752
转载注意保留原文链接:https://www.tqge.com/206752