ThinkPHP5 生成二维码

首先下载这个类:http://phpqrcode.sourceforge.net/

phpqrcode.php 放在extend目录下面,如果有二级目录qrcode/phpqrcode.php就 Loader::import(‘qrcode.phpqrcode’, EXTEND_PATH);

一、上代码:

/**
     * @param $text 文本的内容
     * @param string $logo logo图片
     * @return string TP5-PHP生成二维码
     */
    public function code($text, $logo = '')
    {
        Loader::import('phpqrcode', EXTEND_PATH);
        //二维码图片保存路径
        $pathname = APP_PATH . '/../public/upload/';
        if (!is_dir($pathname)) { //若目录不存在则创建之
            mkdir($pathname);
        }
        //二维码图片保存路径(若不生成文件则设置为false)
        $name = "/qrcode_" . time() . ".png";
        $filename = $pathname . $name;
        //二维码容错率,默认L
        $level = "L";
        //二维码图片每个黑点的像素,默认4
        $size = '10';
        //二维码边框的间距,默认2
        $padding = 2;
        //保存二维码图片并显示出来,$filename必须传递文件路径
        $saveandprint = true;
        //生成二维码图片
        \QRcode::png($text, $filename, $level, $size, $padding, $saveandprint);
        //二维码logo
        $QR = imagecreatefromstring(file_get_contents($filename));
//        $logo = imagecreatefromstring(file_get_contents($logo));
//        $QR_width = imagesx($QR);
//        $QR_height = imagesy($QR);
//        $logo_width = imagesx($logo);
//        $logo_height = imagesy($logo);
//        $logo_qr_width = $QR_width / 5;
//        $scale = $logo_width / $logo_qr_width;
//        $logo_qr_height = $logo_height / $scale;
//        $from_width = ($QR_width - $logo_qr_width) / 2;
//        imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
//        imagepng($QR, $filename);
        return cdnurl('/upload' . $name, true);
    }

第二步:cdnurl函数

/**
     * 获取上传资源的CDN的地址
     * @param string  $url    资源相对地址
     * @param boolean $domain 是否显示域名 或者直接传入域名
     * @return string
     */
    function cdnurl($url, $domain = false)
    {
        $regex = "/^((?:[a-z]+:)?\/\/|data:image\/)(.*)/i";
        $cdnurl = \think\Config::get('upload.cdnurl');
        $url = preg_match($regex, $url) || ($cdnurl && stripos($url, $cdnurl) === 0) ? $url : $cdnurl . $url;
        if ($domain && !preg_match($regex, $url)) {
            $domain = is_bool($domain) ? request()->domain() : $domain;
            $url = $domain . $url;
        }
        return $url;
    }

第三步:使用

/*二维码接口*/
    public function qrcode()
    {
        $data = array();
        $data['productid'] = mt_rand(1, 5);   /*产品id 1-5*/
        $data['user_id'] = mt_rand(1, 200);   /*用户ID*/
        $data['type'] = 1;   /*1未核销 2已核销 3已锁定*/
        $json = json_encode($data);
        $qrcodeurl = self::code($json);
        header("Location: " . $qrcodeurl);
    }
上一篇:thinkphp5 session 过期时间的坑 需要吧 type 驱动方式 改成 redis 或 memcache 才生效


下一篇:基于Thinkphp5框架的易支付网站源码(完整可运行)