WooCommerce payment gateway setup for Thai online stores

When running an online store in Thailand, choosing the right payment gateway is one of the most critical decisions you'll make. Your customers need to be able to pay conveniently — whether by credit card, QR Promptpay, or bank transfer — and your store must be secure enough to protect cardholder data. This guide walks you through every payment option available for WooCommerce in Thailand, with step-by-step setup instructions for each.

What You Need Before Starting: A WordPress site with WooCommerce installed (WooCommerce → Install from Plugins), SSL certificate (mandatory for all payment pages), and a merchant account with your chosen payment provider. AsiaGB includes a free SSL certificate with every hosting plan.

What Is a Payment Gateway?

A payment gateway is a service that securely transmits payment information between your WooCommerce store, the customer's bank, and your merchant account. It encrypts sensitive card data so that neither you nor WooCommerce ever stores raw card numbers — a key PCI DSS compliance requirement.

The payment flow works like this:

  1. Customer clicks "Place Order" on your WooCommerce checkout page
  2. WooCommerce sends transaction data to the payment gateway (e.g., Omise or Stripe)
  3. The gateway verifies with the card network (Visa/Mastercard) and the issuing bank
  4. Approval or decline is returned to WooCommerce in real time
  5. WooCommerce updates the order status (Processing or Failed)

Payment Gateways Available for Thai WooCommerce Stores

GatewayPayment MethodsFee (approx.)Best For
OmiseThai credit card, PromptPay QR, TrueMoney~3.65%Thai startups & SMEs
2C2PVisa/MC, UnionPay, installments, Thai internet bankingVariesEnterprise / high volume
StripeVisa, Mastercard, Apple Pay, Google Pay2.9% + $0.30International customers
PayPalPayPal balance, Visa/MC via PayPal~4.4% + fixedOverseas buyers
QR PromptpayAny Thai banking app via QR scanFree (SCB/KBank API)Thai retail customers
CODCash on deliveryFreeLow-trust customers
Bank Transfer (BACS)Direct bank transferFreeB2B / large orders

Option 1: Omise — Recommended for Thai Stores

Omise (now part of SYNQA) is the most developer-friendly payment gateway in Thailand with full Thai card support, QR Promptpay integration, and excellent WooCommerce compatibility. It is the go-to choice for most Thai online stores.

Step 1: Create an Omise Account

  1. Go to dashboard.omise.co and sign up for a free account
  2. Verify your email address and complete the KYC (Know Your Customer) process
  3. Provide your Thai bank account details for payouts
  4. Wait for account activation (typically 1–3 business days)

Step 2: Install the Omise WooCommerce Plugin

  1. Go to WordPress Dashboard → Plugins → Add New
  2. Search for "Omise" and click Install Now on the official "Omise for WooCommerce" plugin
  3. Click Activate

Step 3: Enter Your API Keys

  1. Go to WooCommerce → Settings → Payments
  2. Click "Manage" next to Omise
  3. Log in to your Omise Dashboard and navigate to Settings → API Keys
  4. Copy your Public Key and Secret Key — both Test and Live versions
  5. Paste the keys into the corresponding fields in the WooCommerce plugin settings
  6. For initial setup, enable Test Mode (uses test keys so no real charges occur)
  7. Click Save Changes

Test Card for Sandbox: Use card number 4242 4242 4242 4242, any future expiry date, and any 3-digit CVV. This simulates a successful payment without charging a real card.

Step 4: Enable Specific Payment Methods

Within Omise settings, you can enable or disable individual payment methods:

Enable each method you want, configure display names and descriptions, then save.

Step 5: Switch to Live Mode

Once you have completed sandbox testing and confirmed orders flow correctly:

  1. Return to WooCommerce → Settings → Payments → Omise → Manage
  2. Uncheck Test Mode
  3. Confirm your Live Public Key and Live Secret Key are correctly entered
  4. Click Save Changes

Important: Never switch to Live Mode until you have run at least 5 complete test orders in Sandbox — including both successful payments and intentional failures (use card 4000 0000 0000 0002 to simulate a decline).

Option 2: Stripe — Best for International Sales

Stripe supports over 135 currencies and payment methods including Apple Pay and Google Pay, making it the best choice if you sell to customers outside Thailand.

Setting Up Stripe on WooCommerce

  1. Go to Plugins → Add New and search for "WooCommerce Stripe Payment Gateway" (by WooCommerce)
  2. Install and activate the plugin
  3. Go to WooCommerce → Settings → Payments → Stripe → Manage
  4. Click "Connect with Stripe" and sign in or create a Stripe account
  5. Authorize WooCommerce to access your Stripe account
  6. Enable Test Mode and run test payments using Stripe's test card 4242 4242 4242 4242
  7. Once testing is complete, disable Test Mode to go live

Thai Business Note: Stripe requires a Thai business registration (company registration certificate or sole proprietorship) and a Thai bank account for payouts. Individual (personal) accounts without business registration are generally not accepted in Thailand.

Option 3: QR Promptpay — Zero Cost for Thai Customers

QR Promptpay is the most popular payment method among Thai consumers because it is free, instant, and works with every major Thai banking app (KBank, SCB, Bangkok Bank, Krungsri, TTB, etc.).

There are two ways to add QR Promptpay to WooCommerce:

Method A: Via Omise Plugin

If you already have Omise set up, simply enable "PromptPay" within the Omise plugin settings. Omise handles the QR generation and payment confirmation automatically. The fee is approximately 0.5% per transaction via Omise.

Method B: Via Bank APIs (Free)

Both KBank (KAPI) and SCB (SCB Easy API) offer free Promptpay QR APIs for businesses with business accounts at those banks. A developer would integrate the API into your WooCommerce checkout using a custom plugin or existing community-built plugins. This method has zero transaction fees but requires technical setup.

Option 4: COD and Bank Transfer (Built-in WooCommerce)

WooCommerce includes two offline payment methods out of the box — no extra plugin needed.

Cash on Delivery (COD)

  1. Go to WooCommerce → Settings → Payments
  2. Find Cash on Delivery and click Manage
  3. Enable it, set the title (e.g., "Pay on Delivery"), and write instructions for customers
  4. Optionally restrict COD to specific shipping methods only
  5. Click Save Changes

Bank Transfer (BACS)

  1. Go to WooCommerce → Settings → Payments → Direct Bank Transfer → Manage
  2. Enable the method and enter your bank account details:
Account Name:    [Your Business Name]
Bank Name:       [e.g., Kasikorn Bank (KBank)]
Account Number:  [Your account number]
Sort Code:       [Branch code — leave blank if not applicable]
IBAN:            [Leave blank for Thai accounts]
BIC/Swift:       [e.g., KASITHBK for KBank]

Add payment instructions telling customers to include the order number in the transfer reference and to upload proof of payment.

Webhook Configuration for Payment Gateways

A webhook is a real-time HTTP notification that your payment gateway sends to your WooCommerce store when an event occurs — such as a successful payment, failed transaction, or refund. Without properly configured webhooks, WooCommerce will not automatically update the order status after a payment is confirmed by the gateway.

Setting Up Omise Webhooks

  1. Log in to your Omise Dashboard and go to Settings → Webhooks
  2. Click Add Webhook Endpoint
  3. Enter your endpoint URL: https://yourdomain.com/?wc-api=omise
  4. Select the events to listen for: charge.complete, charge.failed, refund.create
  5. Save and use the Send Test Event button to verify your endpoint receives the notification

Setting Up Stripe Webhooks

  1. Log in to the Stripe Dashboard and navigate to Developers → Webhooks
  2. Click Add Endpoint
  3. Enter the endpoint URL: https://yourdomain.com/?wc-api=stripe
  4. Select events: payment_intent.succeeded, payment_intent.payment_failed, charge.refunded
  5. Copy the Webhook Signing Secret and paste it into WooCommerce Stripe Settings under the Webhook Secret field

Important: If your server has a firewall or a security plugin like Wordfence, it may block incoming webhook requests from Omise or Stripe IP addresses. Whitelist their IP ranges in your firewall before going live — otherwise orders will stay permanently in "Pending Payment" status even after successful charges.

Comparing Payment Gateway Fees for Thai Stores

Transaction fees directly affect your profit margin. Understanding the true cost per payment method helps you choose the right gateway mix for your customer base and order volume.

Gateway Payment Methods Fee (approx.) Best For
OmiseCredit card, PromptPay QR, TrueMoney, Installment3.65% card / ~1% PromptPayThai SMEs & startups
2C2PVisa/MC, Internet Banking, Counter Service, UnionPayBy package (typically higher)Medium to large enterprise
StripeVisa, Mastercard, Apple Pay, Google Pay, 135+ currencies2.9% + $0.30 per transactionInternational customers
QR PromptPay (Bank API)Any Thai banking app via QR scanFree (one-time dev cost)High-volume Thai stores
CODCash on deliveryFree (logistics cost only)Low-trust / first-time buyers
Bank Transfer (BACS)Direct bank transferFreeB2B / large orders

For most Thai small-to-medium stores, starting with Omise + Bank Transfer + COD covers nearly all Thai customers at low cost. Add Stripe once you see international sales growing.

Troubleshooting Common WooCommerce Payment Issues

Most payment issues in WooCommerce fall into three root causes: incorrect API keys, webhook misconfiguration, or SSL problems. Here is a systematic approach to diagnosing each.

Order Stuck in Pending Payment

This is almost always a webhook problem. The customer's card was charged but WooCommerce never received the confirmation event. Check:

Payment Declined in Live Mode

Verify you have entered your Live API Keys (not Test Keys) in the payment plugin settings. Test keys only accept test card numbers — they will decline any real card. Also confirm your merchant account has been fully activated by the gateway provider.

Checkout Page Loads Slowly

WooCommerce checkout loads JavaScript for every active payment method. If you have many payment plugins installed but some are disabled, deactivate the plugins entirely (not just in WooCommerce settings) so they don't enqueue unnecessary scripts. Use a WooCommerce-compatible cache plugin such as LiteSpeed Cache or WP Rocket with cart and checkout page exclusions correctly configured.

# Common wp-config.php performance constants for WooCommerce:
define('WP_CACHE', true);
define('WOOCOMMERCE_CHECKOUT', true);

# Ensure checkout and cart pages are excluded from full-page caching.
# This prevents stale session data from breaking the checkout flow.

Mixed Content Warnings on Checkout

If some resources (images, CSS, or scripts) still load over HTTP after enabling SSL, install the Really Simple SSL plugin. It automatically rewrites all HTTP references in your database and post content to HTTPS. After activation, run WooCommerce → Status → Tools → Update Database to update stored URLs.

Sandbox Testing Checklist

Test CaseExpected ResultStatus
Place order with test card 4242 4242 4242 4242 Order status changes to "Processing" Must Pass
Place order with declined card 4000 0000 0000 0002 Order status stays "Failed", error message shown Must Pass
3DS authentication card 4000 0000 0000 3220 Authentication modal appears, complete flow Must Pass
QR Promptpay payment generated QR code displays on checkout, expires in 15 min Must Pass
Order confirmation email sent to customer Customer receives email with order summary Must Pass
Refund processed from WooCommerce dashboard Refund reflected in payment gateway dashboard Must Pass
Checkout page shows HTTPS padlock SSL active, no mixed content warnings Critical
Payment works on mobile device (iOS/Android) Checkout form is usable on 375px screen Must Pass

SSL and PCI DSS — Non-Negotiable Requirements

Critical Security Requirement: Every WooCommerce store that accepts online payments MUST have an active SSL certificate. Without HTTPS, browsers will block the checkout page entirely and display a "Not Secure" warning. More importantly, transmitting payment data over HTTP is a PCI DSS violation that can result in heavy fines and loss of your merchant account.

PCI DSS (Payment Card Industry Data Security Standard) compliance is required by Visa and Mastercard for any business that processes card payments. For WooCommerce stores using a hosted gateway like Omise or Stripe (where card data goes directly to the gateway's servers, never yours), you qualify for the simplest compliance level: SAQ-A (Self-Assessment Questionnaire A).

SSL Checklist for WooCommerce

Choosing the Right Payment Gateway

Our Recommendation: For most Thai small and medium online stores, start with Omise + Bank Transfer (BACS) + COD. Omise covers credit cards and QR Promptpay in one plugin. Add BACS for B2B customers who prefer bank transfers. Add COD only if your delivery logistics supports it. If you expect significant overseas sales, add Stripe as a second gateway.

Troubleshooting Common Payment Issues

Need Reliable Hosting for Your WooCommerce Store?

AsiaGB web hosting starts at just 500 THB/year with free SSL included, 99% Uptime, SSD storage, DirectAdmin control panel, and automatic backups on the 1st and 15th of every month — everything your online store needs from day one.

View Hosting Plans