前段时间做项目时要用到二维码接口,到网上一搜,不是收费的,就是特别慢的。这么常用的东西竟然没有一个好接口。自己搭建一个!用个人的服务器肯定响应速度很慢,于是我换了一种思路。。。

简述

二维码接口分为GET、POST两种。接口并不会直接返回二维码图像,其中GET接口会重定向至二维码,POST接口会返回二维码URL。
接口演示:https://aoaoao.me/api/
GET方式接口URL:https://aoaoao.me/api/qr.php?t=something&l=H
POST方式接口URL:https://aoaoao.me/api/qr_p.php

GET方式接口使用说明

GET接口需要发送两个参数,具体如下表:

参数名

参数说明

详情

t

内容

二维码主题内容,编码UTF-8,出现“&”符号时,请使用#26代替

l

冗余度

可选值L(7%)、M(15%)、Q(25%),H(30%),默认为L。冗余度百分比越大,二维码体积越大,识别容差率越大。更多介绍请参考维基百科



比如,生成一个内容为“你好,世界”,冗余度最高的二维码,可以请求下面URL:https://aoaoao.me/api/qr.php?t=something&l=H 然后接口会自定重定向至二维码真实url:http://7jpowa.com1.z0.glb.clouddn.com/qr_14523268515325?qrcode/1/level/H
二维码就这样生成了:

如果遇到错误,接口会返回如下格式数据:

{“code”:”500”,”message”:”individual value”}

code代表错误代码,message为错误信息。目前主要会返回两种错误,分别是:individual value(输入的值不合法),failed to upload file to qiniu无法生成二维码。
具体大家可以到Demo中体验
360截图20160109161231388
360截图20160109161231388

GET方式接口特点是调用简单,快捷

POST方式接口使用说明

如果想要生成大量数据,推荐使用POST接口。使用时将各参数的值POST到接口就行了。POST接口各项参数与GET大体相同,只是“&”符号不需要再转义!
请求成功后,接口会返回如下数据:

{“code”:”200”,”url”:”http:\/\/7jpowa.com1.z0.glb.clouddn.com\/qr_14523274774705?qrcode\/1\/level\/L”}

其中url的值即为二维码的URL,/被转义成了\/
如果处理失败,返回结果与GET方式类似!

实现原理&源代码

生成这个二维码用自己的服务器速度肯定达不到要求。某天在看七牛文档时发现七牛提供了一个接口可以把空间中的文本内容转换为二维码,速度很快。这个API的工作原理就是把用户输入的文本以字符串上传到七牛然后生成二维码。
核心代码如下:

<?php
require_once(“src/qiniu/io.php”);
require_once(“src/qiniu/rs.php”);
$text=””;
$level=””;
$text=$_GET[‘t’];
$level=$_GET[‘l’];
if(empty($text)||empty($level)){
header(“Content-Type: application/json; charset=utf-8”);
$result[“code”]=”500”;
$result[“message”]=”individual value”;
echo json_encode($result);
exit();
}
$bucket = “空间名”;
$accessKey = ‘你的AK’;
$secretKey = ‘你的SK’;
$rand=”qr_”.time().rand(1,10000);
Qiniu_SetKeys($accessKey, $secretKey);
$putPolicy = new Qiniu_RS_PutPolicy($bucket);
$upToken = $putPolicy->Token(null);
list($ret, $err) = Qiniu_Put($upToken, $rand, $text, null);
if ($err !== null) {
header(“Content-Type: application/json; charset=utf-8”);
$result[“code”]=”500”;
$result[“message”]=”failed to upload file to qiniu”;
echo json_encode($result);
} else {
$url=”http://7jpowa.com1.z0.glb.clouddn.com/".$rand."?qrcode/1/level/".$level;
Header(“Location: $url”);
}
?>

这里使用的是6.1的PHP SDK ,没有使用7.X是因为7.x在我这跑不起来啊!!一直500(有知道原因的求指教。。)
百度云:http://pan.baidu.com/s/1mh26Kzu