二维码 API:一次调用生成二维码或 SEPA 支付二维码
调用一次 HTTP,你就会收到一张可以直接贴到海报、发票或网站上的二维码图片。文本、链接、Wi-Fi,或者干脆是一笔 SEPA 转账,你的客户只需用银行应用扫描即可。
不用安装库,也不用注册某个会把自己的 logo 贴在二维码中间的服务。API 直接返回 PNG 或 SVG 文件,仅此而已。结果看起来是这样的:
免费版或 PRO 版:你能得到什么
两个方案做的事情完全一样,格式和尺寸也完全相同。没有水印,也没有会过期的二维码。唯一的区别,就是每天的二维码数量。绿色进度条显示的是你一天可以生成多少个。
免费 API
0 欧元,你的账户密钥就够了
- 每天 10 个二维码
- 普通二维码和 SEPA 付款二维码
- PNG 和 SVG,所有尺寸,无水印
- 够你制作海报、名片或几张发票
计数器会在 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 对它进行编码(:、/ 和 & 都必须进行转义)。 |
format | Png(默认)或 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 个代码,包含完整的电视指南和我的所有软件,而这正是让服务继续运行下去的东西。未订阅不得用于商业用途。

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