阿星的空间

使用七牛构建一个通用的二维码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等)

当然,大家也可以顺着这个思路继续改造,比如文字+自定义签名的方式来实现防盗用功能,此处就不作展开啦。

原文来自阿星的空间:https://wanyaxing.com/blog/20190717162829.html

X