xpay✦ Commerce
Directory
WooCommerce plugins
PromptPay for WooCommerce
PromptPay for WooCommerce
Accept PromptPay in WooCommerce with a QR code generated on your own server. Offline gateway, manual confirmation, no third-party service, no fees.
Will this break my store?
What the WordPress.org registry says about keeping PromptPay for WooCommerce running.
Tested to 7.0.4 — 1 branch behind 7.1
Tested against the WordPress branch in use today.2 months ago
8.2
Your host must be running at least this version.7.0
woocommerce
These must be installed and active first.1
A single maintainer. Worth knowing if the plugin is load-bearing for your store.Maintenance & trust
Scored on how PromptPay for WooCommerce is looked after — not on how many stores run it.
Maintenance
35 / 35WordPress compatibility
20 / 20Support responsiveness
Not enough dataMerchant satisfaction
Not enough dataListing transparency
3 / 10Ratings
No one has rated this plugin on WordPress.org yet. That is a statement about the ratings page, not about the plugin — plenty of well-kept plugins never collect them.
Thai shoppers expect to pay by scanning a QR code in their banking app. This plugin adds that option to WooCommerce checkout without putting a payment processor between you and your money.
When a customer picks PromptPay, the plugin builds a spec-correct EMVCo and Bank of Thailand QR payload on your own server, encoding the exact order total. The customer scans it with any Thai banking app and pays. You watch the transfer land in your account and confirm the order by hand.
This is an offline gateway, in the same sense as WooCommerce’s built-in Direct Bank Transfer (BACS). It is the manual-reconciliation option, for stores that already watch their bank account and would rather do that than pay per transaction.
What you get
- No processor, no fees, no account to open. The plugin talks to nobody. Money moves directly between your customer’s bank and yours, on your bank’s own PromptPay terms.
- Nothing leaves your site. The QR payload and the QR image are both generated locally by bundled libraries. The plugin makes no external HTTP requests of any kind.
- A QR the customer can always find again. It appears on the order-received page, attached to the on-hold email, and under My Account for as long as the order awaits payment. You can resend it from the order screen.
- An ID you cannot get wrong. Your PromptPay ID is validated before it is saved, so you cannot ship a broken QR code and find out from a customer.
- Confirmation only a merchant can give. The order moves to a paid status only when someone with the
manage_woocommercecapability confirms it. There is no customer-facing control and no public endpoint that changes order status. - Both checkouts and both storage engines. Classic checkout and the Cart and Checkout Blocks are supported, and the gateway declares compatibility with High-Performance Order Storage (HPOS).
How it works
- Enter your PromptPay ID once. A Thai mobile number, a 13-digit national or tax ID, or a 15-digit e-wallet ID. It is checked before it is saved.
- At checkout the customer picks PromptPay and places the order. The order goes on hold.
- The order-received page shows a QR code encoding the exact total, plus the payment details as text. The on-hold email repeats those details and carries the same QR code as an attached image. Customers with an account can re-open the QR from My Account, then Orders, for as long as the order awaits payment.
- The customer pays in their banking app.
- You see the transfer arrive, open the order, and click Mark PromptPay payment received. The same QR and details are shown on the order screen so you can check the amount. The order moves to processing, or completed for downloads, and the customer is emailed.
Who it is for
Stores selling in Thailand that take Thai baht and would rather reconcile by hand than hand a percentage to a processor. It suits low-volume and mid-volume stores, stores whose margins do not survive card fees, and merchants who already check their banking app several times a day.
It does not suit high-volume stores or anyone who needs orders to clear without a human looking at them.
What it is not
This plugin does not talk to any bank or payment processor and cannot confirm a payment on its own. Every order waits for you. If you need automatic confirmation, use a payment processor such as Stripe instead.
Only Thai baht (THB) is supported, because PromptPay settles in baht. The gateway does not appear at checkout for any other store currency.
Privacy
The plugin makes no external HTTP requests and sends nothing to any third party. The QR image is drawn by a bundled encoder that ships with its source.
The QR attached to awaiting-payment emails is stored as a small image file in the plugin’s own folder inside your uploads directory, under an unguessable name and behind guard files that refuse web access. Each file is deleted as soon as its order stops awaiting payment, stale files are swept automatically, and deleting the plugin removes the folder entirely.
Requirements
- WooCommerce, with the store currency set to Thai baht (THB).
- PHP 8.2 or later, with the
iconvextension, which is compiled into PHP by default. - The
gdextension is used to draw a PNG QR code. Without it the plugin falls back to SVG. If that also fails it shows your PromptPay ID and the amount as text so the customer can enter them by hand. It never fails silently and never leaves a blank space where a QR should be.
Bundled libraries
The QR image is drawn on your own server by these libraries, bundled with full source under a plugin-specific namespace so they cannot collide with another plugin’s copy:
- endroid/qr-code (MIT)
- bacon/bacon-qr-code (BSD-2-Clause)
- dasprid/enum (BSD-2-Clause)
Disclaimer
This plugin is not affiliated with, endorsed by, or sponsored by the Bank of Thailand, National ITMX, any Thai bank, or WooCommerce. “PromptPay” is referenced solely to describe the payment scheme whose QR format this plugin generates.
No. This is an offline gateway. The order is placed on hold and you confirm receipt yourself after checking your banking app, exactly as you would with WooCommerce’s built-in bank transfer (BACS). If you need automatic confirmation, use a payment processor.
No merchant account, and no fees from this plugin. It does not connect to a processor or an aggregator, so nothing sits between your customer’s bank and yours. Whatever your own bank charges for receiving PromptPay transfers is between you and your bank.
No. An order moves to a paid status only when a merchant with the manage_woocommerce capability confirms it from the order screen. There is no customer-facing control and no public endpoint that changes order status.
A Thai mobile number, a 13-digit national or tax ID, or a 15-digit e-wallet ID. The value is validated before it is saved.
No. PromptPay settles in baht, so the gateway only appears at checkout when your store currency is THB.
Three ways. Customers with an account find the QR on the order itself under My Account, then Orders, for as long as it awaits payment. From the order screen you can pick Resend PromptPay payment instructions under Order actions, which sends the on-hold email again with details in the body and the QR attached. WooCommerce’s own Send order details to customer action includes the same payment details and attachment.
It is attached as an image file rather than embedded in the body, because most mail clients block inline images while every client delivers an attachment. The body always carries the payment details as text, so the customer can pay even if they never open the attachment.
Yes to both. The plugin declares compatibility with High-Performance Order Storage and with the Cart and Checkout Blocks, and the confirm-payment box appears on the order screen under either storage engine.
The plugin falls back to an SVG QR code. If that also fails, it displays your PromptPay ID and the order amount as text so the customer can enter them manually in their banking app. There is no failure mode that leaves the customer with a blank space.
No. The plugin makes no external HTTP requests. The QR payload and the QR image are both generated on your own server by bundled libraries that ship with their source.
No. It is an independent plugin that generates QR codes in the PromptPay format. It has no relationship with the Bank of Thailand, National ITMX, or any bank, and it does not access your bank account.
Nothing is deleted. Your settings and order data stay exactly as they were. Data is only removed if you delete the plugin outright, and then only the plugin’s own settings, its order meta, and its QR-image folder in the uploads directory.
Categories
Plugin details
Tags on WordPress.org
