使用七牛构建一个通用的二维码API
前言
二维码大家都不陌生,在很多项目的开发过程中也会接触到二维码的生成需求,虽然有很多各语言生成二维码的实现方案,不过与之相比,最简单快捷的方式是直接将内容拼接成一个URL用于展示二维码图片即可。
市面上也有很多的免费的二维码API可用,比如这个 或者 这个。
遇到了点问题
前两天我这儿的一个项目就遇到了个问题,一直在用的api.qrserver.com
挂了(现在已经又正常了),对应的二维码图片全部都不能展示,虽然立刻改了代码换成了qr.topscan.com
,这也为笔者敲了个警钟,看看能否再备几个二维码实现方案呢。
七牛也有二维码API
在整理资料的时候,发现七牛家也提供了一个二维码API(链接),仔细研读发现这是用于七牛存储空间资源的二维码下载方式。
笨办法
如果先将目标文本存到七牛,再用这个API生成二维码,这个笨办法好像也还行。
难道我想要配一个二维码还得调七牛接口先存一个文件上去?这也太麻烦了吧。
虽然这样做也能做,封装成接口后也可以一劳永逸,但我就是觉得,还是麻烦啊。
可以取巧
我曾经在做 php-blog 的时候用过七牛的一个镜像功能(链接在这里)。
简单的说,访问七牛空间的地址如果资源不存在,七牛就会尝试访问对应的镜像地址获取资源。
所以,问题就简单了。
访问七牛地址(带二维码API)->七牛访问镜像获取资源->七牛保存资源并转化成二维码输出
操作实例
- 首先我们创建一个专用的七牛存储空间。
- 然后给这个空间绑定一个固定域名,并配置好cname.
- 给这个空间设置一个镜像地址,比如
https://wanyaxing.com/qrcode?text=
- 这时候cname应该也生效了。
- 那么访问
http://qrcode.wanyaxing.com/helloworld
应该就等于访问https://wanyaxing.com/qrcode?text=/helloworld
- 所以我们需要写点代码让
https://wanyaxing.com/qrcode?text=/helloworld
出打印helloworld
即可。<?php if (isset($_GET['text'])) { $text = $_GET['text']; if (substr($text, 0, 1) =='/') { $text = substr($text,1); } echo $text; } else { echo 'no text found'; }
- OK,搞定,http://qrcode.wanyaxing.com/helloworld可以访问。
- http://qrcode.wanyaxing.com/helloworld?qrcode/1 就是二维码了。
后语
写到最后发现自己也等于开发了一个二维码API了呢, http://qrcode.wanyaxing.com/helloworld?qrcode/1
,将其中的 helloworld
改成任意文字即可使用,(注:汉字的话需要编码一下,比如urlencode/encodeURIComponent等)
当然,大家也可以顺着这个思路继续改造,比如文字+自定义签名
的方式来实现防盗用功能,此处就不作展开啦。
X