QRで支払いを受ける

王林
リリース: 2024-07-26 16:58:44
オリジナル
798 人が閲覧しました

Get paid in QR

いいえ、ピクセル単位ではなく、ユーロ単位です。

いいえ、クレジット カードでは使用できません。

はい、電話で。

モチベーション

製品やサービスを販売する場合、報酬を受け取ることは明らかな要件です。

最近では、オンラインでもクレジット カードが王様です。

クレジット カード、Google、Apple Pay を処理する支払いゲートウェイが豊富にあります。

もちろん有料です。

実店舗では、クレジット カード端末を入手できます。

一部の銀行では、携帯電話を CC 端末に変える Android アプリをはるかに安価で販売できます。

特に 1 日に数回の支払いしか処理しない場合は、検討する価値があります。

これらのオプションは、一般的な消費者シナリオのほぼすべての状況をカバーします。

人がオンラインまたは実店舗にアクセスして、大量の商品を購入したり、散髪をしたりする場所。

しかし、それだけではありません。

  1. 少額の支払いを処理する必要がある非営利団体または市民団体の場合はどうでしょうか。
  2. あなたが B2B 企業で、顧客が直接送金での支払いを希望していない場合はどうでしょうか。
  3. クレジット カードでの支払いにかかる 2 ~ 3% の諸経費を支払いたくない場合はどうすればよいでしょうか。

これらすべてのケースにおいて、欧州連合における答えは SEPA です。

より具体的には、SEPA クレジット転送。

または、より若いですが、はるかに高速な兄弟の SEPA Instant Credit Transfer です。

SEPA 単位転送

名前に詳しくなくても、心配しないでください。これは昔と同じ電信送金です。

例えば。あなたは銀行に、自分の口座からお金を引き出して他の人に預けるように指示します。

これまで紙のフォームに記入する必要がありましたが、最近ではモバイル バンキング アプリで数回クリックするだけで済みます。

しかし、現在では国際銀行口座番号、つまり IBAN が標準化されています。

EU 内、さらには世界中への送金が非常に簡単になります。

SEPA インスタントを使用すると、数秒でお金が届きます。

しかし、IBAN は非常に長いので、ほとんど恐ろしいものです。

そして、人々は何かを入力するのが苦手であることで有名なので、追加のメモのことは忘れて、適切な量を入力できれば満足できます。

これらの問題はすべて QR コードで簡単に解決できます。

顧客は携帯電話でこれらをスキャンし、金額を確認し、バンキング アプリで [支払い] をクリックできます。

SEPA 即時信用送金スキームに参加する銀行のリストが増えているため、お金が瞬く間に到着する可能性が高くなります。

今後のブログでは、銀行口座への入金を監視する方法について説明します。

たとえば、請求書の生成と送信を自動化します。

スロバキアとチェコ共和国の QR コードを生成する方法を説明します。

このリストをさらに長くしたいので、あなたの国で QR コードがどのように作られているかをご存知の場合は、お知らせください。

QR スロバキア

スロバキアの銀行は、Pay by Square と呼ばれる共通基準に合意しました。

オンライン シナリオで使用できる URL スキーマもあります。

例えば。ユーザーがリンクをクリックすると、すべての支払い情報が入力された状態でバンキング アプリが起動します。

残念ながら、これらは相互運用可能ではありません (2024 年には)。

NodeJS で QR コードを生成する方法を説明します。

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);
    }
});
ログイン後にコピー

生成メソッドは 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 <img style={{ width: "120px", height: "120px" }} src={"/api/paybysquare?content=" + encodeURIComponent(JSON.stringify(payModel))} />
}

ログイン後にコピー

支払いに説明的なメッセージを追加すると、非常に役立ちます。

以下はクライアント名を正規化する簡単なコードです。

これにより、発音記号が削除され、Ján KováčJan Kovac に変換されます。

まだ完全に読み取れるはずであり、銀行システムがそれを台無しにしないようにします。

    const paymentMessage = customerName?.normalize("NFKD").replace(/[\u0300-\u036f]/g, "").substring(0, 100) || "";
ログイン後にコピー

QR チェコ共和国

チェコ共和国またはチェコはこれまで(2024年)ユーロに抵抗していましたが、彼らもQRコードスキームを持っています。

彼らは、私たちが使用できるロイヤリティフリーのコードジェネレーターさえ持っています。
ただし、セキュリティ上の理由から、自分で生成することもできます。

const czQrLink = "https://api.paylibo.com/paylibo/generator/image?iban=" + iban + "&amount=" + 
czkPrice + "&currency=CZK&vs=" + vsym + 
"&message=" + message;

const CzQrImage = (czQrLink: string) => {
    return <img style={{ width: "120px", height: "120px" }} src={czQrLink} />
}
ログイン後にコピー

国際的

残念なことに、国際的またはヨーロッパの QR 標準はまだ存在しません。

したがって、ユーザーの国に基づいて適切な QR コードを表示する必要があります。

チェコ共和国からの支払いを期待している場合は、チェコの QR コードはチェコ クラウン (チェコの通貨 CZK) でのみ機能することに注意してください。

または、チェコ共和国に拠点を置き、スロバキアからの支払いを予定している場合、QR はユーロでのみ機能します。

The code below can help you calculate the right currency amount.

First we get the current reference exchange rate from the central bank.

Then we calculate the euro and czk prices, depending on the product price and currency.

const getExchangeRate = async () => {
    const now = new Date();
    const dt = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1).toISOString().substring(0, 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);
ログイン後にコピー

Get Paid

Trying to read badly printed IBANs from invoices or even typing in the horribly long IBANs is super annoying.

That you have to be very careful and check three times, because it is money, makes it even more so.

We make software to make our lives easier, and QR codes for payments fit this goal nicely.

I hope you found the information useful, and if you have some pointers about your national QR code schemes, please shoot them my way.

Happy hacking!

以上がQRで支払いを受けるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート