一般情况调用phpqrcode第三方插件 会把生成的二维码图片保存到服务器,不保存服务器也会以header头的形式输出到浏览器,(我们不允许把图片文件保存的liunx服务器,只能保存到阿里云OSS存储服务器 不符合我的逻辑)所有经过我的日思夜想,于是想出来的实现方式 。我可不可以跟爬虫一样先把这个图片文件资源先获取到,然后直接在后端上传oss
createQrcode 生成二维码方法
public function createQrcode(){
if(!$_POST['str']) return false;
$str = $_POST['str'];
require_once ROOT.'cube/action/phpqrcode/phpqrcode/qrlib.php'; //包含类文件
$QRcode = new \QRcode();
//允许的错误级别
$errorCorrectionLevel = 'L';
if (isset($level) && in_array($level, array('L','M','Q','H')))
$errorCorrectionLevel = $level;
//二维码大小
$matrixPointSize = 4;
if (isset($_POST['size'])){
$size = $_POST['size'];
$matrixPointSize = min(max((int)$size, 1), 10);
}
if (isset($str)) {
$QRcode->png($str, false, $errorCorrectionLevel, $matrixPointSize);
}else{
return "ERRORDATA";
}
}
uploadqrcode 获取二维码上传OSS
public function uploadqrcode(){
//生成而我加密字符串
$str = 'orderid=111'; // 被加密信息
$key = 'resss'; // 密钥
$strs = A('strlib/basic/encrypt',array($str, $key));//加密后的字符串
$name = date('Y-m-d').A('strlib/basic/randstr',array(6,3));
/*
//模拟get请求
$data = array(
'name'=>'zhezhao',
'age'=>'23'
);
$query = http_build_query($data);
$url = 'http://localhost/get.php';//这里一定要写完整的服务页面地址,否则php程序不会运行
$result = file_get_contents($url.'?'.$query);
*/
//这里为了安全性我选择post请求
$data = array(
'str'=>$strs
);
$query = http_build_query($data);
$options['http'] = array(
'timeout'=>60,
'method' => 'POST',
'header' => 'Content-type:application/x-www-form-urlencoded',
'content' => $query
);
$url = 'http://'.$_SERVER['HTTP_HOST'].'/index.php/order/lineOrder/createQrcode';
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
A('oss/object/putObject',array('bucket',$_SERVER['HTTP_HOST'].'/lineorder/qrcode/'.$name.'.png',$result));
}
这里遇到一个问题就是我需要把二维码的参数传递个createQrcode 所有想到用模拟表单
另附字符串加密方法 (可逆向解密)
//加密
public function encrypt($data, $key)
{
$key = md5($key);
$x = 0;
$len = strlen($data);
$l = strlen($key);
$char = $str = '';
for ($i = 0; $i < $len; $i++)
{
if ($x == $l)
{
$x = 0;
}
$char .= $key{$x};
$x++;
}
for ($i = 0; $i < $len; $i++)
{
$str .= chr(ord($data{$i}) + (ord($char{$i})) % 256);
}
return base64_encode($str);
}
//解密
public function decrypt($data, $key)
{
$key = md5($key);
$x = 0;
$data = base64_decode($data);
$len = strlen($data);
$l = strlen($key);
$char = $str = '';
for ($i = 0; $i < $len; $i++)
{
if ($x == $l)
{
$x = 0;
}
$char .= substr($key, $x, 1);
$x++;
}
for ($i = 0; $i < $len; $i++)
{
if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1)))
{
$str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
}
else
{
$str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
}
}
return $str;
}
生成随机字符串
// 数值型字符串,代号 1
private $cs1 = array('0','1','2','3','4','5','6','7','8','9');
// 纯小写字符串,代号 2
private $cs2 = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
// 多类型字符串,代号 3
private $cs3 = array
(
'0','1','2','3','4','5','6','7','8','9',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
);
public function randstr($len,$type=1)
{
if( $len<1 ) return false;
$RET = '';
switch( $type )
{
case 1:
$RET = $RET.$this->randcs1(false);
for( $i=2; $i<=$len; $i++ ) $RET = $RET.$this->randcs1();
return $RET;
case 2:
for( $i=1; $i<=$len; $i++ ) $RET = $RET.$this->cs2[rand(0,25)];
return $RET;
case 3:
$RET = $RET.$this->randcs3(false);
for( $i=2; $i<=$len; $i++ ) $RET = $RET.$this->randcs3();
return $RET;
default:
return false;
}
}
private function randcs1($zero=true)
{
$from = 1;
if( $zero ) $from = 0;
return $this->cs1[rand($from,9)];
}
private function randcs3($zero=true)
{
$from = 1;
if( $zero ) $from = 0;
return $this->cs3[rand($from,61)];
}
- 根据短链生成二维码并上传七牛云(Java)
通过短链生成二维码并上传七牛云(Java) 前言 网上这种帖子其实也是很多,大部分搜出来的是CSDN的,然后点进去一看都几乎一样:所以这次给个自己实践的例子记录. 这次也是通过搜索得到的一部分能实现这 ...
- PHP生成二维码并上传到七牛云
参考资料 qr-code生成二维码 七牛云上传图片 实现步骤 //拿到插入后的id $res = DB::table('book_book')->insertGetId($data); i ...
- ThinkPHP框架整合phpqrcode生成二维码DEMO
ThinkPHP框架发展到今天功能已经变得是非常强大了,但是ThinkPHP框架中没有二维码相关的库,因此我们可以通过整合phpqrcode来完成生成二维码的功能.想使用phpqrcode首先就要把p ...
- phpqrcode 生成二维码
这个项目需要根据信息来自动生成二维码,到网上搜了下,发现php有生成二维码的类库phpqrcode,所以打算就用这个来生成二维码 从官网下载类库源码http://sourceforge.net/pro ...
- RHEL 5 安装phpqrcode生成二维码
VMWARE中全新安装(默认)RHEL. 之后,yum 安装备apache/php 下载并上传phpqrcode 1.1.4版本,并将其解压至/var/www/html/phpqrcode (去掉ip ...
- thinkphp整合系列之phpqrcode生成二维码
php生成二维码其实挺简单的:当然指的是使用qrcode类库: 因此关于是否要写这篇博客:我是犹豫了再三的: 不过最后还是决定写下吧:如果有童鞋急着用:就可以直接引了: 再个也可以作为即将写的文章微信 ...
- Thinkphp3.2结合phpqrcode生成二维码(含Logo的二维码),附案例
首先,下载phpqrcode,将其解压到项目ThinkPHP\Library\Vendor目录下.Index_index.html(模板可自行配置) <form action="{:U ...
- 使用phpqrcode生成二维码
使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手.然而,我们可以使用php ...
- 使用PHP类库PHPqrCode生成二维码
PHPqrCode是一个PHP二维码生成类库,利用它可以轻松生成二维码,官网提供了下载和多个演示demo, 查看地址:http://phpqrcode.sourceforge.net/. 下载官 ...
随机推荐
- Springcloud报错:java.lang.IllegalStateException: Service id not legal hostname (/a-service)
今天在做springcloud链路追踪的时候,报错java.lang.IllegalStateException: Service id not legal hostname (/a-service) ...
- linux磁盘之回环设备
为什么要讲回环设备,下面看下系统的采样情况 上面图有loop0,loop1等设备标记,这些是什么?看看下面fdisk -l 的结果,乱糟糟的一堆? 什么是回环设备? 上面的loop0, loop1就是 ...
- Java 使用-安装
Java 使用-安装 官方网站 JDK 下载地址 JDK 历史版本 参考资料 CentOS7系统卸载自带的OpenJDK并安装SUNJDK CentOS7卸载 OpenJDK 安装Sun的JDK8 安 ...
- drf的基本使用、APIView源码分析和CBV源码拓展
cbv源码拓展 扩展,如果我在Book视图类中重写dispatch方法 -可以实现,在get,post方法执行之前或者之后执行代码,完成类似装饰器的效果 def dispatch(self, requ ...
- AcWing 165. 小猫爬山 DFS
165. 小猫爬山 https://www.acwing.com/problem/content/description/167/ 题目 思路 dfs每一个小猫,对于要不要开新车的状态再进行dfs(注 ...
- php个人博客搭建第二阶段②
网站正文部分:热门博客的推荐: html代码: <!-- 网站正文部分 --> <div class="content"> < ...
- MKL库矩阵乘法
此示例是利用Intel 的MKL库函数计算矩阵的乘法,目标为:\(C=\alpha*A*B+\beta*C\),由函数cblas_dgemm实现: 其中\(A\)为\(m\times k\)维矩阵,\ ...
- netty系列之:netty中的核心编码器bytes数组
目录 简介 byte是什么 netty中的byte数组的工具类 netty中byte的编码器 总结 简介 我们知道netty中数据传输的核心是ByteBuf,ByteBuf提供了多种数据读写的方法,包 ...
- python学习Day21
目录 今日内容详细 作业讲解 os模块 知识点进修 创建目录(文件夹) 删除目录(文件夹) 查看某个路径下所有的文件名称(文件.文件夹) 删除文件.重命名文件 获取当前路径.切换路径 软件开发目录规范 ...
- Typora使用手册(基础)
Typora使用手册 第一步,你首先得拥有一个Typora,可通过(https://typoraio.cn/)该网址下载. 第二步,安装并打开. 第三步,让我们开始认识并设置自己的Typora吧~ 什 ...