OKPaid Logo
OKPaid Help
ភាសាខ្មែរ
Go to App

KHQR Payments

How to set up your bank's KHQR code and take per-sale QR payments at the kiosk: what to upload, how to confirm your account numbers, and what happens at checkout

Last updated: September 23, 2026

KHQR Payments

KHQR is Cambodia’s national QR standard, run by Bakong at the National Bank of Cambodia. One code works in every Cambodian bank app: ABA, ACLEDA, WING, and the rest. OKPaid uses the KHQR code you already have from your bank, and can go one step further: for every sale it generates a QR for that sale’s exact total, so the customer never types an amount.

There are two ways a customer pays you, and OKPaid does both.

How It Works

  • Your uploaded code (the static sticker): this is the code you scanned from your bank app. It carries no amount, so the customer types what to pay in their own app.
  • A per-sale QR: once OKPaid has read your code, the kiosk generates a fresh QR for each sale, with the exact total inside it, and shows it on the customer display. The customer only confirms. Nothing is typed, so nothing is mistyped.

Per-sale QRs work with ABA and ACLEDA bank accounts. Everything else still works with the static sticker.

Set Up Your Payment QR

  1. Open your bank app’s KHQR screen (ABA: My QR; ACLEDA: My KHQR), then save or screenshot the code exactly as it is. Upload the one code your bank gives you: if it is a dual-currency code, that single code covers both currencies.
  2. In OKPaid, go to Organization → Billing → Payment QR and upload the code.
  3. OKPaid reads it and opens Confirm account numbers, listing the accounts that code pays into. Check them against your bank statement and correct anything wrong. This is not a transfer; it is how you tell OKPaid where your money lands.
  4. If your bank gives one code per currency, upload the one you want OKPaid to read. The other currency’s account is set in Confirm account numbers, not by uploading a second code. OKPaid keeps one code per organization, so uploading another code replaces the previous one.

You can re-run this at any time with Retry automatic payments check, which reads the uploaded code again and refreshes the accounts.

Accepting a KHQR Payment

  1. Ring up the sale and tap Pay: the methods include KHQR once your code has been read. Confirming the account numbers is strongly recommended, but not required.
  2. Pick KHQR. The customer display shows a QR generated for this sale’s exact total. It expires after 8 minutes; Refresh stops OKPaid tracking that code and issues a new one for the same bill, amount, and currency. A code the customer already scanned stays payable in their bank app until it expires, so refreshing does not undo a payment.
  3. When your shop takes two currencies, the payment dialog offers each currency the code can receive into, and each button shows the bill in that currency. The choice is made before the sale is created, because the code is generated with it.
  4. The customer scans and pays in their bank app.
  5. Tap Confirm Payment when the customer’s bank receipt shows the payment. Confirm from what the bank shows, not from the QR disappearing.

If your code names both currencies, a sale in either currency gets its own account. See Dual Currency for how the second price and the rate work.

When KHQR Is Not Offered

  • The code could not be read: KHQR is left out of the payment methods, and Show QR on Display keeps showing your uploaded sticker instead. Re-upload a sharper picture, or use Retry automatic payments check.
  • The code names no account for the currency you sell in: set that currency’s account in Confirm account numbers. OKPaid will not point a sale at a different account.
  • Offline: per-sale QR is generated on the device from the cached sticker, so it works with no internet in the desktop app and the mobile app; the payment record is queued and syncs when the connection returns. In a plain browser, which keeps no offline store, a failure to record the payment is reported to the clerk — cancel the sale and try again.

Without a usable code there is still the static sticker: the customer types the amount and you confirm from the receipt, exactly as before.

Managing Your Code

  • Replace it: upload the new code in Payment QR. The old one is replaced, and the kiosk stops generating codes from it.
  • Remove it: Delete QR code in the same card. Per-sale QRs stop; the static sticker is gone with it.
  • Check it: the card lists the accounts it read under KHQR Details, beside the code itself.

The KHQR method appears at the kiosk only for the currencies your code covers, so a code that pays into a KHR account offers KHQR on KHR sales and leaves USD sales on the other methods.