QR Ph
How QR Ph works on PayMongo — the two variants (dynamic API-driven and static in-store), when to use each, and how payments are confirmed.
Overview
QR Ph is the Philippine national QR code standard supervised by the Bangko Sentral ng Pilipinas (BSP). A single QR Ph code lets customers pay from any participating bank or e-wallet app — they scan it using their preferred banking or payment app and the transaction settles via InstaPay.
PayMongo supports two variants of QR Ph:
| Variant | Use case | How the amount is set |
|---|---|---|
| Dynamic QR (online) | Online checkout, payment links | Amount encoded in the QR code |
| Static QR (in-store) | Physical counter, market stall | Customer enters the amount |
When to use each variant
Use dynamic QR when you're building an online checkout and you know the exact amount before generating the code. Each code is single-use and expires after 30 minutes by default. See QR Ph API.
Use static QR when you need a reusable code at a physical location. Customers scan the same code repeatedly and enter the amount they owe. See In-Store QR Ph.
How QR Ph attaches to a Payment Intent
Dynamic QR Ph follows the standard Payment Intent workflow:
- Create a Payment Intent with
"qrph"inpayment_method_allowed - Create a Payment Method with
type: "qrph" - Attach the Payment Method — the response contains
next_action.code.image_url, a Base64-encoded QR code image - Display the QR code to the customer
- The customer scans it and completes payment in their banking app
- PayMongo sends
payment.paidwhen the payment is confirmed
Payment confirmation
Confirm QR Ph payments via webhook events:
| Event | Meaning |
|---|---|
payment.paid | Customer successfully paid via QR Ph |
payment.failed | Payment attempt failed |
qrph.expired | QR code was not scanned within 30 minutes |
You can also poll the Payment Intent status, but webhooks are the recommended approach for production.
Updated about 4 hours ago