进入主要内容

二维码 API:一次调用生成二维码或 SEPA 支付二维码


调用一次 HTTP,你就会收到一张可以直接贴到海报、发票或网站上的二维码图片。文本、链接、Wi-Fi,或者干脆是一笔 SEPA 转账,你的客户只需用银行应用扫描即可。

不用安装库,也不用注册某个会把自己的 logo 贴在二维码中间的服务。API 直接返回 PNG 或 SVG 文件,仅此而已。结果看起来是这样的:

由 Digital3D API 生成的黑白二维码示例

免费版或 PRO 版:你能得到什么

两个方案做的事情完全一样,格式和尺寸也完全相同。没有水印,也没有会过期的二维码。唯一的区别,就是每天的二维码数量。绿色进度条显示的是你一天可以生成多少个。

免费 API

0 欧元,你的账户密钥就够了

10每天
  • 每天 10 个二维码
  • 普通二维码和 SEPA 付款二维码
  • PNG 和 SVG,所有尺寸,无水印
  • 够你制作海报、名片或几张发票

PRO API

每月 12 欧元,包含我的所有软件

每天 1000 个
  • 每天 1000 个二维码
  • 够管理软件在每张发票上放一个付款二维码
  • 11 天完整的电视节目指南,外加我的软件
  • 下一次请求就会生效,使用同一个密钥

升级到 PRO

计数器会在 UTC 午夜重置,所以在法国是凌晨 1 点或 2 点,具体取决于季节。手残党还有个好消息:格式错误的请求(错误的 IBAN、空文本)甚至不会先检查你的密钥就会被拒绝,因此不会消耗额度。

获取你的密钥

只要一分钟:创建一个账户,验证你的电子邮件地址,然后复制账户中显示的密钥。这和我其他服务使用的是同一个密钥。它会放在每次请求的 Authorization 请求头中,替换掉下面示例里的 VotreCleApi。

你之前使用的是带有 URL 或 JSON 中的 userId 的旧版本?这个参数现在不会再被读取,密钥现在只能通过请求头传递。结果就是,你不能再把地址原样粘贴到浏览器地址栏里。想用鼠标测试的话,可以使用 Swagger,下面我会再讲到它。

普通二维码:文本、链接、Wi-Fi

这是 NormalQr 调用,一个简单的 GET。你提供文本,就会收到图像:

curl -H "Authorization: Bearer VotreCleApi" "https://qr.digital3d.com/api/QrCreator/NormalQr?text=https%3A%2F%2Fdigital3d.com&format=Png&size=6" -o qr.png
参数值作用
text必填要编码的内容。记得针对 URL 对它进行编码(:、/ 和 & 都必须进行转义)。
formatPng(默认)或 Svg返回的图像类型。
size从 1 到 20,默认为 4二维码中每个小方块的大小,PNG 中以像素为单位。

有意思的地方在于,文本不一定非得是链接。手机能够识别多种格式。在家里最实用的是 Wi-Fi 的二维码,可以打印出来贴在冰箱上给客人用。要编码的文本是这样的:

WIFI:T:WPA;S:NomDuReseau;P:MotDePasse;;

打开电子邮件可以用同样的原理,使用 mailto:quelquun@example.com,也可以使用 vCard(联系人卡片的格式),让扫描操作把你的联系方式添加到通讯录里。

SEPA 付款二维码

这个我很喜欢。你在发票上放一个二维码,客户用自己的银行应用扫描,转账信息就会预先填好:收款人、IBAN、金额、附言。再也没人会把 IBAN 抄错了。这就是 PaymentQr 调用,一个带有 JSON 请求体的 POST:

curl -X POST "https://qr.digital3d.com/api/QrCreator/PaymentQr" \
  -H "Authorization: Bearer VotreCleApi" \
  -H "Content-Type: application/json" \
  -o paiement.svg \
  -d '{
    "beneficiaryName": "ACME SRL",
    "iban": "BE68539007547034",
    "bic": "GKCCBEBB",
    "amount": 12.34,
    "remittance": "Facture 2026-001",
    "outputFormat": "Svg",
    "size": 8
  }'
字段必填包含内容
beneficiaryName是收款人的姓名,最多 70 个字符。
iban是他的账户。IBAN 会经过验证,无效的号码会被拒绝。
bic否银行代码,8 或 11 个大写字符。
amount否,但建议填写以欧元表示的金额,从 0.01 到 9,999,999.99。
remittance否显示在账户对账单上的自由格式附言,最多 140 个字符。
structuredReference否结构化附言,以 RF 开头。二选一:如果同时填写 remittance,请求会被拒绝。
purpose否表示付款用途的 4 个字母代码,例如表示房租的 RENT。
info否给付款人的一小段消息,最多 140 个字符。并非所有银行都会显示它。
outputFormat 和 size否和普通 QR 码一样:Png 或 Svg,大小为 1 到 20。

先说一个需要注意的地方,因为总得有一个:这个 QR 遵循欧洲标准,但并不是所有银行应用都能读取它。在比利时、荷兰或德国,这种方式非常普遍。在其他地方,先用你自己的银行试一下,再去打印五百张。

底层原理

如果你喜欢了解背后发生了什么,下面就是技术上的选择。

支付 QR 遵循欧洲支付委员会的 EPC069-12 标准。具体来说,它是一小段由几行组成的文本(版本、收款人、IBAN、金额、通信信息),按照规定的顺序排列,然后像任何 QR 一样编码。API 会替你构建这段文本,并提前检查各个字段。

所有代码都使用 M 级错误校正生成。QR 会嵌入重复数据,即使有所损坏也能保持可读:在 M 级别,大约 15%的表面可以被弄脏、折叠或遮住,而不影响读取。这正是支付 QR 标准要求的级别。

说到格式,如果是用于电子邮件或网页,就选择 PNG,并把 size 的值设得足够大,这样就不用再拉伸它。凡是要交给印刷厂的,就选择 SVG:这是矢量图,可以放大到广告横幅那么大而不会变模糊。响应会带有正确的类型,image/png 或 image/svg+xml,而且响应体直接就是文件,不是等着你解码的 JSON。

最后一个细节:这些是静态 QR。有人扫描代码时,不会有任何内容经过我的服务器,所有内容都在图像里。所以十年后它依然能用,不管我的服务还在不在。

查看你的配额

密钥一旦被接受,每个响应都会带有三个标头:X-RateLimit-Limit(你当天的限额)、X-RateLimit-Remaining(你还剩多少)以及 X-RateLimit-Reset(重置时间,以 Unix 秒数表示)。

错误方面,有四种需要预料:

  • 400:请求无效(文本为空、尺寸超出限制、IBAN 错误)。免费,不会扣除任何配额。
  • 401:缺少密钥、密钥写错了,或者账户还没有验证。也是免费的。
  • 429:当天的配额用完了。Retry-After 标头会给出在重置前需要等待的秒数。
  • 503:服务无法验证密钥。30 秒后再试一次。

不写一行代码就能测试

所有内容都记录在API 的 Swagger 文档中(一个列出调用并允许从浏览器发起调用的页面)。点击“Authorize”,粘贴你的密钥,然后用“Try it out”按钮尝试每个调用。图片会显示在页面中。还是要注意:这些尝试会计入你的配额,就像任何请求一样。

为什么要订阅?

因为这一切都运行在一台我付费的服务器上。免费版保留用于测试和轻度使用,每天十个代码足以满足个人用户的需求。如果你把 API 接入计费软件或网站,每月 12 欧元的 PRO 订阅会将限额提高到每天 1000 个代码,包含完整的电视指南和我的所有软件,而这正是让服务继续运行下去的东西。未订阅不得用于商业用途。

加入对话

您必须拥有一个账户才能评论这篇文章。注册免费,耗时不到一分钟。

  • 每天免费下载的 XMLTV 文件
  • 评论文章并回复其他读者
  • 通过电子邮件获知您关注的新文章

目前没有评论。

Une erreur s'est produite. Cette application peut ne plus répondre jusqu'à ce qu'elle soit rechargée.Veuillez contacter l'auteur. Reload 🗙