Accepting KHQR payments at the counter: a shop owner's guide

Accepting KHQR payments at the counter: a shop owner's guide

More and more customers in Cambodia don't carry cash: they open their banking app, scan the QR code on your counter and hold up a "transfer successful" screen. For a shop owner, KHQR is convenient — no change to give, no fake notes. But without a routine, KHQR brings its own headaches: customers underpaying, sending riel instead of dollars, or showing an old screenshot — and at the end of the day you can't tell whether the money in your account matches what you sold.

This article explains how KHQR works, how to choose the right kind of code, and a few simple rules for taking KHQR at the counter without losing money.

What is KHQR?

KHQR is Cambodia's common QR payment standard, introduced by the National Bank of Cambodia (NBC) and running on the Bakong system. The key point: one KHQR code can be scanned by the apps of almost every bank and e-wallet in the country, not just the bank that issued it.

Before KHQR, every bank had its own QR code. Shops stuck three or four codes side by side and customers scanned whichever matched their bank. With KHQR you need one code for everyone.

KHQR supports both USD and riel, but each code is linked to an account in one currency. This is the most common source of mistakes — more on that below.

Static or dynamic QR?

There are two kinds of KHQR code you will come across:

Static QR (printed)Dynamic QR (per order)
How it worksPrinted once, stuck on the counterThe POS or banking app creates a new code for each order
AmountCustomer types it inAlready inside the code
RiskWrong amount, wrong currencyLower
Best forSmall cafés, market stalls, low-volume shopsBusy shops, several cashiers

Most small shops start with a static QR because all it takes is a bank account and a printed code — no extra hardware. If you use a static QR, the rules below matter even more, since every mistake happens when the customer types the amount.

Getting a KHQR code for your shop

  1. Open a business/merchant account with your bank (ABA, ACLEDA, Wing, Canadia and others all offer one). A personal account can receive money too, but a merchant account usually shows your shop name when customers scan — they feel safer, and your sales money stays separate from personal money.
  2. Decide on the currency. If your prices are in USD, use a code linked to a USD account. If you sell a lot of riel-priced items (food, groceries), consider adding a riel code.
  3. Print the codes clearly. If you display two codes, put a big "USD" and "RIEL" label above each, in two different colours.
  4. Turn on transaction notifications on a phone kept at the counter (the banking app, or the Telegram bot some banks provide). The cashier needs to see the money arrive on the shop's device, not on the customer's phone.

4 common mistakes and how to avoid them

1. "I already paid" — but the money hasn't arrived

The customer shows a success screen, but it could be an old transaction, a pending one or a screenshot. The only rule you need:

Hand over the goods only when the shop's device shows the money has arrived, in the right amount.

If notifications are slow (weak signal, bank maintenance), ask the customer to wait a moment or pay another way. Don't be shy — customers are more used to this than you think.

2. Underpaying or typing the wrong amount

With a static QR, a customer can type 1.25 instead of 12.50. The cashier should say the amount out loud as the customer gets ready to scan ("that's 12 dollars 50") and check the amount on the shop's notification — not just the word "successful".

3. Mixing up USD and riel

A 5 USD order, the customer scans the riel code and sends "5" — that's 5 riel. Or the reverse: a 20,000 riel order paid to the USD code. To prevent it:

  • Keep the USD and riel codes well apart, with big labels in different colours.
  • USD order → show the USD code; riel order → show the riel code.
  • If you only have a USD account and the customer wants to pay a riel amount, convert at your shop's posted rate and tell them the USD amount to send — see Selling in USD and Riel without end-of-day cash gaps.

4. Recording the wrong payment method

The customer pays by KHQR but the cashier taps "Cash" on the till (or writes it down as cash). At shift close the drawer is short by exactly that amount while the bank account is "over" — and it takes an hour to find out why. Orders paid partly in cash and partly by KHQR are even easier to get wrong.

The rule: record the right method for every part of the payment, at the moment of sale.

Reconciling KHQR at shift close

KHQR money isn't in the drawer, so you can't count it like cash. Instead, at the end of each shift (or each day), compare two numbers:

  • Total KHQR in your sales records — orders recorded as KHQR during the shift.
  • Total received in your bank history — same time period, separately for the USD and riel accounts.

Example: the afternoon shift of a coffee shop:

USDRiel
KHQR in sales records146.50212,000
Received per banking app146.50204,000
Difference0−8,000

USD matches, riel is 8,000 short — one order was recorded as KHQR but the money never arrived. Go through the shift's riel KHQR orders and match their times against the bank history to find it; usually a customer showed a screenshot or the transfer didn't go through.

A few habits make this faster:

  • Reconcile every shift, not at the end of the week. After one day you still remember the customer; after a week you won't.
  • Don't use the account that receives sales for personal spending — the history gets mixed up.
  • Record KHQR refunds too, including how the refund was paid (sent back by KHQR or given in cash), so both sides still match.

Reconciling the cash in the drawer is a separate step — see Stop cash loss at the counter: shift close and permissions.

Recording KHQR in your POS

If you use point-of-sale software, choose one that lets you record several payment methods on one order and splits revenue by method at shift close. Then you don't have to add up the KHQR orders by hand.

In LeangPos, each order can be split into several payment lines — Cash, KHQR or Card, in USD or riel — and change is only calculated on the cash part. When you close a shift, the Revenue by payment method table shows the KHQR total and KHQR refunds separately, so you can compare straight away with your banking app. See Selling at the counter (checkout) and Closing a shift, summary & order history.

Quick checklist

  • Use a separate merchant account for sales money.
  • Keep USD and riel codes apart, with big labels in different colours.
  • Transaction notifications show on the shop's device at the counter.
  • Say the amount and currency out loud before the customer scans.
  • Hand over goods only when the right amount arrives on the shop's device — never trust a screenshot.
  • Record the right method for every part of the payment, including cash + KHQR splits.
  • Reconcile the KHQR total against your bank history every shift.

KHQR makes the counter faster and cleaner, as long as every payment is recorded in the right place. If you want every order to show cash and KHQR clearly, with a ready KHQR total at shift close, you can try LeangPos for free.

Run your shop more easily with LeangPos

Try it free for 3 months: point of sale, inventory, multiple branches and an online store in one app.