Skip to main content

Thai Internet Banking

Accept payments from all major Thai banks via internet banking - customers pay through their bank's website using username and password authentication.

Overview

Internet Banking allows customers to pay directly from their bank accounts by logging into their bank's internet banking website. This method supports all major Thai banks and works on both desktop and mobile browsers.

Key Features:

  • Wide bank support - All major Thai banks (15+)
  • Desktop-friendly - Works on computer browsers
  • Mobile browser - Also works on mobile web
  • No app required - Only needs internet banking access
  • High transaction limits - Higher than card limits
  • ⚠️ No refunds - Refunds not supported

Supported Banks

All major Thai commercial banks including:

Popular Banks:

  • Bangkok Bank (BBL)
  • Kasikornbank (KBANK)
  • Siam Commercial Bank (SCB)
  • Krungthai Bank (KTB)
  • Krungsri / Bank of Ayudhya (BAY)
  • TMB Thanachart Bank (TTB)
  • Government Savings Bank (GSB)
  • Bank for Agriculture and Agricultural Cooperatives (BAAC)

And 7+ more banks.

RegionCurrencyMin AmountMax AmountRefundable
ThailandTHB฿20.00฿5,000,000❌ No

How It Works

Customer Experience:

  1. Customer selects internet banking
  2. Chooses their bank from list
  3. Redirected to bank's internet banking website
  4. Logs in with username and password
  5. Reviews and confirms payment details
  6. Receives payment confirmation
  7. Redirected back to merchant site

Typical completion time: 2-5 minutes

Implementation

Create Source and Charge

const omise = require('omise')({
secretKey: 'skey_test_YOUR_SECRET_KEY'
});

// Create source
const source = await omise.sources.create({
type: 'internet_banking_th',
amount: 100000, // ฿1,000
currency: 'THB'
});

// Create charge
const charge = await omise.charges.create({
amount: 100000,
currency: 'THB',
source: source.id,
return_uri: 'https://yourdomain.com/payment/callback'
});

// Redirect to bank selection page
res.redirect(charge.authorize_uri);

Handle Return and Webhook

// Customer returns here
app.get('/payment/callback', async (req, res) => {
const charge = await omise.charges.retrieve(req.query.charge_id);

if (charge.status === 'successful') {
res.redirect('/payment-success');
} else {
res.redirect('/payment-failed');
}
});

// Webhook for server-side processing
app.post('/webhooks/omise', (req, res) => {
const event = req.body;

if (event.key === 'charge.complete') {
const charge = event.data;

if (charge.status === 'successful') {
fulfillOrder(charge.metadata.order_id);
}
}

res.sendStatus(200);
});

Important: No Refund Support

No Refunds

Internet banking payments cannot be refunded via the Omise API. If you need to refund a customer, you must process it manually through your bank.

Alternative: Use Mobile Banking which supports refunds.

Use Cases

When to Use Internet Banking

Good for:

  • Desktop/laptop users
  • Customers without mobile banking apps
  • Large transactions (higher limits than cards)
  • Customers who prefer web-based banking
  • Older demographics more familiar with internet banking

Not ideal for:

  • Mobile-first experiences (use mobile banking instead)
  • Transactions requiring refunds
  • Fast checkout flows (slower than mobile banking)

Comparison: Internet Banking vs Mobile Banking

FeatureInternet BankingMobile Banking
PlatformDesktop/Mobile browserMobile app only
Speed2-5 minutes30-90 seconds
Banks15+ banks5 major banks
Refunds❌ No✅ Yes
UXRedirect to websiteDeep link to app
Desktop✅ Yes❌ No
RecommendedLegacy✅ Modern

Best Practices

1. Show Bank Logos

<div class="payment-method">
<h3>อินเทอร์เน็ตแบงก์กิ้ง (Internet Banking)</h3>
<p>รองรับธนาคารชั้นนำ 15+ แห่ง</p>
<div class="bank-logos">
<img src="/banks/scb.svg" alt="SCB">
<img src="/banks/kbank.svg" alt="Kasikornbank">
<img src="/banks/bbl.svg" alt="Bangkok Bank">
<img src="/banks/bay.svg" alt="Krungsri">
<img src="/banks/ktb.svg" alt="Krungthai">
</div>
</div>

2. Set Proper Timeout

// Internet banking typically expires after 15 minutes
const TIMEOUT = 15 * 60 * 1000;

setTimeout(() => {
if (!paymentCompleted) {
showMessage('Payment session expired. Please try again.');
}
}, TIMEOUT);

3. Show Clear Instructions

<div class="instructions">
<h4>วิธีชำระเงิน:</h4>
<ol>
<li>เลือกธนาคารของคุณ</li>
<li>ใส่ username และ password</li>
<li>ยืนยันการชำระเงิน</li>
<li>รอการยืนยัน</li>
</ol>
<p class="note">⚠️ การชำระผ่านอินเทอร์เน็ตแบงก์กิ้ง<strong>ไม่สามารถคืนเงิน</strong>ได้</p>
</div>

4. Alternative for Mobile Users

const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);

if (isMobile) {
// Suggest mobile banking first
showPaymentOptions([
{ type: 'mobile_banking', label: 'Mobile Banking (แนะนำ)' },
{ type: 'internet_banking', label: 'Internet Banking' }
]);
}

Testing

Test Amount: ฿1,000 (100000 smallest unit) Test Banks: Use any bank in test mode Expected: Successful payment simulation

FAQ

What is Thai Internet Banking?

Internet banking allows customers to pay from their bank accounts by logging into their bank's website. It supports 15+ major Thai banks and works on desktop and mobile browsers.

Can I refund internet banking payments?

No, internet banking payments cannot be refunded via the Omise API. If you need refund capability, use Mobile Banking instead.

Which banks are supported?

All major Thai commercial banks including: Bangkok Bank, Kasikornbank, SCB, Krungthai, Krungsri, TMB Thanachart, GSB, BAAC, and 7+ more.

Should I use Internet Banking or Mobile Banking?

Use Mobile Banking for modern, mobile-first experiences with refund support.

Use Internet Banking if you need:

  • Desktop browser support
  • Support for banks without mobile banking integration
  • Maximum bank coverage
How long does settlement take?

Settlement timing varies by agreement*, depending on your merchant agreement.

*Settlement timing varies by merchant agreement and payment method. Check your Omise merchant dashboard for your specific settlement schedule.

Next Steps

  1. Implement source and charge creation
  2. Handle redirect to bank selection
  3. Set up return URI handler
  4. Implement webhook processing
  5. Test with multiple banks
  6. Go live