不,不是以像素为单位,而是以欧元为单位。
不,不能用信用卡。
是的,用电话。
如果您销售产品或服务,获得报酬是一个明显的要求。
如今信用卡为王,反正网上也很好。
您拥有大量的支付网关,可以为您处理信用卡、谷歌或苹果支付。
当然是要收费的。
在实体店,你会得到一个信用卡终端。
有些银行可以向您出售更便宜的 android 应用程序,将您的手机变成 cc 终端。
这是值得考虑的,特别是如果您每天只处理几笔付款。
这些选项几乎涵盖了典型消费场景中的所有情况。
一个人上网或进入实体店购买一堆产品或理发。
但是,还有更多。
在所有这些情况下,欧盟的答案是 sepa。
更具体地说,sepa 信用转账。
或者它更年轻,但速度更快的兄弟 sepa 即时信用转账。
如果你不熟悉这个名字,别担心,还是老样子的电汇。
例如。你告诉你的银行从你的账户中取出钱并存入别人的账户。
过去需要填写纸质表格,现在只需在手机银行应用程序中点击几下即可。
但是,我们现在有了标准化的国际银行帐号 - iban。
使汇款变得超级容易在欧盟甚至世界各地的任何地方。
通过 sepa instant,您的钱几秒钟内就能到账。
但是,但是iban太长了,简直可怕。
众所周知,人们不擅长输入东西,所以如果你得到正确的数量,你会很高兴,忘记额外的注释。
所有这些问题都可以通过二维码轻松解决。
您的客户可以用手机扫描它们,检查金额并在银行应用程序中单击付款。
随着 sepa 即时信用转账计划中的银行名单不断增加,您的钱眨眼间就到账的机会很高。
在以后的博客中,我们将介绍如何监视您的银行帐户上的收款。
例如,自动生成和发送发票。
我来教你如何生成斯洛伐克和捷克的二维码。
我想让这个列表更长,所以如果您知道在您的国家如何制作二维码,请告诉我。
斯洛伐克银行已就名为 pay by square 的通用标准达成一致。
甚至还有一个 url schema 可以用于在线场景。
例如。用户单击链接,他们的银行应用程序将启动,并填写所有付款信息。
遗憾的是,这些无法互操作(2024 年)。
让我向您展示如何在 nodejs 中生成二维码。
app.get("/api/paybysquare", mustauth, async (req, res, next) => { try { const body = req.query.content as string; const model = json.parse(body); const content = await generate(model); const qrstream = new passthrough(); const result = await tofilestream(qrstream, content, { type: 'png', width: 200, errorcorrectionlevel: 'h' } ); qrstream.pipe(res); } catch (ex) { next(ex); } });
generate方法来自bysquare库。
你可以像往常一样使用 npm 安装它 npm i bysquare
要获取可以在浏览器或发票文档中使用的 png 图像,我们调用如下方法。
interface ibysquaremodel { iban: string; amount: number; currencycode: string; // must be "eur", variablesymbol: string; payments: number; // must be 1, paymentoptions: number; // must be 1, bankaccounts: number; // must be 1, paymentnote?: string; // optional note } const bysquareqr = (paymodel: ibysquaremodel) => { return @@##@@ }
在付款中添加描述性消息通常非常有帮助。
这是一些简单的代码,可以规范客户端名称。
这将去掉变音符号,将 ján kováč 变成 jan kovac。
应该仍然完全可读,并确保银行系统不会搞砸。
const paymentmessage = customername?.normalize("nfkd").replace(/[\u0300-\u036f]/g, "").substring(null, 100) || "";
尽管捷克共和国或捷克共和国迄今为止(2024年)抵制欧元,但他们也有二维码计划。
他们甚至还有我们可以使用的免版税代码生成器。
现在,出于安全原因,您可能仍然想自己生成它。
const czqrlink = "https://api.paylibo.com/paylibo/generator/image?iban=" + iban + "&amount=" + czkprice + "&currency=czk&vs=" + vsym + "&message=" + message; const czqrimage = (czqrlink: string) => { return @@##@@ }
遗憾的是,目前还没有国际或欧洲的二维码标准。
因此,您必须根据用户所在的国家/地区显示正确的二维码。
如果您希望从捷克共和国付款,请记住捷克二维码仅适用于捷克克朗(捷克货币 czk)。
或者,如果您位于捷克共和国,并且希望从斯洛伐克付款,则二维码仅适用于欧元。
下面的代码可以帮助您计算正确的货币金额。
首先我们从央行获取当前的参考汇率。
然后我们根据产品价格和货币计算欧元和捷克克朗的价格。
const getExchangeRate = async () => { const now = new Date(); const dt = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1).toISOString().substring(null, 10); const url = "https://nbs.sk/export/sk/exchange-rate/" + dt + "/xml"; const dat = { url: url } const opts = { headers: { 'Content-Type': 'application/json' }, method: "POST", body: JSON.stringify(dat) } const resp = await fetch("/api/httpfetch", opts); const xml = await resp.text(); const parser = new DOMParser(); const xmlDoc = parser.parseFromString(xml, "text/xml"); const node = xmlDoc.querySelector("Cube [currency='CZK']"); if (node) { const attr = node.getAttribute("rate"); if (attr) { const num = attr.replace(/\s/, "").replace(",", "."); return +num; } } return undefined; } // basePrice is the amount to be paid, for the products or services // currencyCode is the currency the products or services are sold in. const czkRate = await getExchangeRate(); const eurPrice = currencyCode === "EUR" ? basePrice : (Math.ceil(basePrice / czkRate * 100) / 100).toFixed(2); const czkPrice = currencyCode === "CZK" ? basePrice : (Math.ceil(basePrice * czkRate * 100) / 100).toFixed(2);
尝试从发票中读取印刷错误的 iban,甚至输入超长的 iban 都是非常烦人的。
你必须非常小心,检查三遍,因为这是钱,更是如此。
我们开发软件是为了让我们的生活更轻松,而用于支付的二维码非常适合这个目标。
我希望您发现这些信息有用,如果您对您的国家二维码方案有任何建议,请按照我的方式拍摄。
黑客快乐!
<img style="max-width:90%" width: height: src="%7B%22/api/paybysquare?content=%22" encodeuricomponent alt="通过二维码获得付款"><img style="max-width:90%" width: height: src="%7Bczqrlink%7D" alt="通过二维码获得付款">