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.
| Region | Currency | Min Amount | Max Amount | Refundable |
|---|---|---|---|---|
| Thailand | THB | ฿20.00 | ฿5,000,000 | ❌ No |
How It Works
Customer Experience:
- Customer selects internet banking
- Chooses their bank from list
- Redirected to bank's internet banking website
- Logs in with username and password
- Reviews and confirms payment details
- Receives payment confirmation
- Redirected back to merchant site
Typical completion time: 2-5 minutes
Implementation
Create Source and Charge
- Node.js
- PHP
- Python
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);
<?php
$source = OmiseSource::create(array(
'type' => 'internet_banking_th',
'amount' => 100000,
'currency' => 'THB'
));
$charge = OmiseCharge::create(array(
'amount' => 100000,
'currency' => 'THB',
'source' => $source['id'],
'return_uri' => 'https://yourdomain.com/payment/callback'
));
header('Location: ' . $charge['authorize_uri']);
?>
import omise
omise.api_secret = 'skey_test_YOUR_SECRET_KEY'
source = omise.Source.create(
type='internet_banking_th',
amount=100000,
currency='THB'
)
charge = omise.Charge.create(
amount=100000,
currency='THB',
source=source.id,
return_uri='https://yourdomain.com/payment/callback'
)
return 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
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
| Feature | Internet Banking | Mobile Banking |
|---|---|---|
| Platform | Desktop/Mobile browser | Mobile app only |
| Speed | 2-5 minutes | 30-90 seconds |
| Banks | 15+ banks | 5 major banks |
| Refunds | ❌ No | ✅ Yes |
| UX | Redirect to website | Deep link to app |
| Desktop | ✅ Yes | ❌ No |
| Recommended | Legacy | ✅ 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.
Related Resources
- Bank Transfers Overview - All bank payment methods
- Mobile Banking - Modern alternative with refunds
- Direct Debit - For recurring payments
- PromptPay - QR alternative
- Testing - Test your integration
Next Steps
- Implement source and charge creation
- Handle redirect to bank selection
- Set up return URI handler
- Implement webhook processing
- Test with multiple banks
- Go live