Bezahlcode
Back in 2012, I proposed a “pay:” URL
scheme, which looks like this:
pay:amount=57.65;currency=EUR;i=FR76.4100.4133.7601.0505.1161.123;order=ANM11-1210;name=Dupont+%26+Cie
or with abbreviated syntax:
pay:a=57.65;c=EUR;i=FR7641004133760105051161123;o=ANM11-1210;n=Dupont+%26+Cie
Some shops in Germany now support a similar URL scheme, which
looks like this:
bank://singlepaymentsepa?name=Dupont+%26_Cie&reason=ANM11-1210&iban=FR7641004133760105051161123&bic=BNPAFRPPXXX&amount=57,65
According to the specification (in German), the “bank:” scheme was invented
in 2010 at German company Stoeger IT. The Web site explaining the system has been online
since 2011.
My pay scheme and the bank scheme are obviously very similar,
but there are some interesting differences:
- The bank scheme requires the amount to be written with a
comma instead of a period before the decimals: 32,10 rather
than 32.10. That may lead to some bugs, because programmers
are used to the English style. ☺
- The BIC (Bank Identification Code) is required. One would
think the IBAN on its own is sufficient, but the BIC may be a
way to verify that the IBAN is correct.
- The bank scheme starts with “//keyword?” to indicate the
type of transaction. Apart from single payments, there are
also periodic payments (“bank://periodicsinglepaymentsepa?…”
with parameters for start/end date and frequency in
weeks/months) and contact information (“bank://contact_v2?…”),
which omits the amount to provide just a name and account
number.
- The bank scheme allows to omit the currency, in which case
EUR (€) is assumed.
- The bank scheme is designed to fit in a QR code and thus has
upper limits on the size of each field. In particular, the
free text field is limited to 140 character. Presumably, those
are Unicode characters, not bytes. After encoding as UTF-8 and
percent-escaping, this may indeed get close to the size of the
largest QR code (version 40), which can hold some 2K bytes. I
mentioned QR codes as a way to display short “pay:” URLs, but
I didn't require all URLs to be short.
- The bank scheme doesn't have room for a URL (e.g., to link
back to an online purchase, where you can see if the seller
has already received your money).
The specification for the bank scheme doens't talk about
protecting against double payments, but presumably the software
and/or the user's bank should warn the user when the same
combination of IBAN, amount and payment reason are seen twice.
The reason field (called order number in my scheme) is free
text. It's up to the seller to put something there that is unique
enough to recognize a payment.
Both my pay scheme and the bank scheme rely on payment into a
bank account. There is no provision for paying cash (with
bitcoins, e.g.)
(Thanks to Christian Weiske for alerting me to the BezahlCode.)
Bert Bos <bert at phonk.net>
Created: 20 December 2016