PromptPay for WooCommerce

Descripción

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_woocommerce capability 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

  1. 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.
  2. At checkout the customer picks PromptPay and places the order. The order goes on hold.
  3. 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.
  4. The customer pays in their banking app.
  5. 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 iconv extension, which is compiled into PHP by default.
  • The gd extension 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.

Instalación

  1. Install and activate the plugin from the Plugins screen, or upload the zip via Plugins, then Add New, then Upload Plugin.
  2. Go to WooCommerce, then Settings, then Payments, and open PromptPay.
  3. Enter your PromptPay ID, a Thai mobile number, a 13-digit national or tax ID, or a 15-digit e-wallet ID, and enable the gateway. The ID is validated before it is saved.
  4. Set your store currency to Thai baht (THB). The gateway does not appear at checkout for any other currency.
  5. Place a test order to confirm the QR renders and the on-hold email arrives with the attachment.

Preguntas frecuentes

Does this verify payments automatically?

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.

Do I need a merchant account, and are there any fees?

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.

Can a customer mark their own order as paid?

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.

What can I use as my PromptPay ID?

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.

Does it work with currencies other than Thai baht?

No. PromptPay settles in baht, so the gateway only appears at checkout when your store currency is THB.

The customer lost the email. How do they see the QR code again?

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.

Is the QR code inside the email?

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.

Does it work with HPOS and the block checkout?

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.

What happens if my server has no gd extension?

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.

Does any of my data go to a third party?

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.

Is this an official Bank of Thailand or bank plugin?

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.

What happens if I deactivate the plugin?

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.

Reseñas

No hay reseñas para este plugin.

Colaboradores y desarrolladores

“PromptPay for WooCommerce” es un software de código abierto. Las siguientes personas han colaborado con este plugin.

Colaboradores

“PromptPay for WooCommerce” ha sido traducido a 4 idiomas. Gracias a los traductores por sus contribuciones.

Traduce “PromptPay for WooCommerce” a tu idioma.

¿Interesado en el desarrollo?

Revisa el código , echa un vistazo al repositorio SVN , o suscríbete al log de desarrollo por RSS .

Registro de cambios

1.0.1

  • Update – Plugin renamed from “QR Payments with PromptPay for WooCommerce” to “PromptPay for WooCommerce”. The gateway title in WooCommerce settings changes to match. No settings, order data, or QR behavior are affected.
  • Fix – plain-text order emails printed HTML entity codes instead of characters.

1.0.0

  • Initial release.
  • Offline PromptPay QR gateway, modelled on WooCommerce’s built-in bank transfer (BACS).
  • Spec-correct EMVCo and Bank of Thailand QR generated locally, with no external requests.
  • Manual payment confirmation from the order screen, capability-gated.
  • QR code attached to the customer’s on-hold and invoice emails as an image file.
  • QR code shown on the order under My Account while payment is awaited.
  • QR code shown in the order meta box, with a “Resend PromptPay payment instructions” order action.
  • Classic and block checkout, HPOS compatible.