We are implementing "Pay with Polkadot" Point-of-Sale feature here:
https://github.com/metaspan/metapay
The solution is opensource and can be self-hosted by any vendor / merchant.
Use cases
-
Point-of-sale / Kiosk: generate QRcode with all relevant data - user scans with wallet and approves payment
substrate://<address>:<genesisHash>:amount=1&reference=ref123
The POS module can watch the address
for any payment with reference
, and mark the payment as complete.
-
Webshop: Send a link to user to request payment
https://pay.metaspan.io/paymentRequest/<address>:<genesisHash>?amount=1&reference=ref123
(to be implemented shortly ;)
The browser will display a QRcode for wallet to scan
Also, if available, will connect to polkadot.js
(in the browser)
An optional callback will notify the webshop that payment is done / error.
Broadly, it will embrace similar work already done at Solana Pay
https://github.com/solana-labs/solana-pay/blob/master/SPEC.md
Fearless Wallet should support additional fields via URL encoding in the comment
Current support - a QR code with:
substrate:<walletid>:<genesisHash>[:<comment>]
- is supported
We need support for:
substrate:[//]<walletid>:<genesisHash>:[?]<url-encoded-fields>
Options for detecting additional fields
const parts = decodedQRString.split(':')
const protocol = parts[0]
const address = parts[1]
const genesisHash = parts[2]
const comment = parts[3]
// Option 1
if (address.startsWith('//')) {}
// Option 2
if (comment && comment.startsWith('?')) {}
Example handler:
const parts = decodedQRString.split(':')
const protocol = parts[0]
if (protocol === 'substrate') {
const address = parts[1]
const comment = parts[3]
if (address.startsWith('//') || ( comment && comment.startsWith('?') ) ) {
// we have URL-encoded `comment` field
/*
[?]amount=<amount>
&reference=<reference>
&label=<label>
&message=<message>
&memo=<memo>
*/
} else {
// simple QR format
}
} else {
console.error('Invalid protocol')
}