Tap to receipt
What happensbetween the tapand the receipt.
About twenty seconds pass, most of them spent typing a PIN. Here is everything that happens inside them: what the tag holds, what the server checks before it touches a database, and what each of the two people involved sees.
Before anything happens
The tag storesa URL. That isall it stores.
There is no account number on the tag, no balance, no customer data and nothing that could be lifted off it and used. The chip is an NTAG 424 DNA: a passive device with no battery, no power supply and no network connection of its own. It does nothing at all until a phone’s NFC field wakes it.
What it does then is the interesting part. It increments a read counter, encrypts that counter together with its own serial number, computes a signature over the result using a key held inside the silicon, and appends both to the end of the stored URL. The phone opens whatever URL comes out.
So the tag does not hold a secret worth stealing. It holds an address, and it signs the way it was read.
On the tag
- A URL, and the keys that never leave the chip
- A counter that only ever increases
- No battery, no power, no network
- Nothing a reader can extract and reuse
On the server
- Which merchant a tag belongs to
- The highest counter that tag has ever reported
- Every tap, accepted or refused, with its reason
- No stored key material of any kind
Four steps, end to end
Each step, fromboth sides ofthe counter.
- 01 / 04
The tap
- The customer sees
- They hold the phone near the tag. The phone buzzes, a notification appears, and the browser they already have opens a page. Nothing is installed and nothing is signed into.
- The server does
- The request lands on one endpoint. Before any database row is read, the encrypted block is decrypted and the signature is recomputed and compared. A signature that does not verify ends there: no lookup, no counter, no session.
- The merchant sees
- Nothing yet. A tap that fails its signature check never becomes a payment, so it never becomes a line on your statement either. It does become a line in your fraud trail.
- 02 / 04
Confirming who you are
- The customer sees
- Your shop name, your trading name, your merchant code and your street, in large type, with a green outline saying the tag proved itself. There is no amount field on this screen, deliberately: the identity question is asked on its own, before money is in anyone’s head.
- The server does
- The read counter is advanced with a single atomic compare-and-set, and only the one operation that actually moved the counter proceeds. That is what opens the payment session.
- The merchant sees
- The tap appears in your dashboard as an accepted read against your tag, with its counter value and the time.
- 03 / 04
The amount and the number
- The customer sees
- One screen, one keypad: the amount, and the mobile money number they want debited. The network is worked out from the prefix, so nobody has to pick MTN, AirtelTigo or Telecel from a list.
- The server does
- The amount is held as an integer number of pesewas from the moment it is parsed. There is no floating point anywhere in the money path, because a rounding error in a payment system is not a display bug.
- The merchant sees
- Still nothing. The charge row is written before the provider is called, so a payment that starts and never finishes is visible rather than absent.
- 04 / 04
Approve, and the receipt
- The customer sees
- The mobile money prompt arrives on their own handset and they enter their PIN there. The pay screen counts the 180-second approval window down honestly rather than spinning. If it closes, it says so, and nothing has been charged.
- The server does
- The result comes back from the payment provider. A provider that is unreachable is recorded as unknown, never as a failed payment, because those two things look identical from the outside and are not the same thing at all.
- The merchant sees
- An SMS lands on your phone, the transaction appears in your dashboard, and it is included in any statement you print for a date range covering it.
The four screens
Confirm, enter,approve, done.
These are the real screens, at the real sizes, in the real order. Tap the tag beside the phone to play the sequence through.
Notice what the first screen does not have: an amount field. The customer is asked one question at a time, and the first question is whether the shop on the screen is the shop in front of them. Once an amount is on the screen, nobody reads the name.
When it does not work
Five ways a tapends withouta payment.
A payment product is judged on what it does when something is wrong. In every one of these cases nothing is charged, and in every one of them the screen says which case it is rather than showing a spinner.
The tag has been revoked
What the customer sees
The merchant is named, in red, with the line “This tag has been cancelled and cannot take payments.” There is no Pay button on the screen at all.
Why
The tap was genuine, so we know exactly whose tag it is. Naming the merchant lets the customer say something specific to the cashier instead of showing them a generic error.
The tag is not live yet
What the customer sees
The merchant is named, and the line reads “This tag is not live yet.”
Why
A tag mid-provisioning is a real tag that has not finished being set up. It is refused, but it is not logged as fraud, because it is not fraud.
The tap is a replay
What the customer sees
A plain failure page with a reason. No merchant is named and no amount can be entered.
Why
The counter carried by this tap is not ahead of the one already recorded, so the URL has been used before. Tapping the tag again produces a fresh one.
The signature does not verify
What the customer sees
The same plain failure page, with a different reason.
Why
The database was never touched. Nothing is named because nothing was proved. This is what a copied tag written onto cheap blank hardware produces.
The approval window closes
What the customer sees
The pay screen says the window closed and that nothing was charged, rather than sitting on a spinner.
Why
The 180 seconds belong to the mobile money network, not to us. When they run out, the honest thing to show is that they ran out.
Every one of these, accepted or refused, is written to the tag’s audit trail with its reason. If somebody is probing your counter, it is written down before anyone notices.
Ghana pilot, 2026
Twenty seconds,and a name youcan check.
Tap2MoMo is in pilot preparation and is not yet a live service. If you run a counter with a queue, we would like to hear from you, and we will tell you plainly what we can and cannot do yet.