Digital Wallets
Accept payments from Southeast Asia's most popular digital wallets, reaching millions of customers across Thailand, Singapore, Malaysia, Philippines, and beyond.
Overviewโ
Digital wallets (e-wallets) are mobile payment methods that allow customers to pay using their smartphone apps. These wallets are extremely popular in Southeast Asia, with high penetration rates among mobile-first consumers.
Why Digital Wallets?
- ๐ Growing market - 60%+ of SEA consumers use e-wallets regularly
- โก Instant confirmation - Real-time payment verification
- ๐ฑ Mobile-first - Optimized for smartphone users
- ๐ Secure - No card details shared with merchants
- ๐ฐ Lower friction - One-tap checkout experience
- ๐ Regional reach - Access local payment preferences
Supported Digital Walletsโ
Thailand ๐น๐ญโ
| Wallet | Users | Currencies | Refundable | Settlement |
|---|---|---|---|---|
| TrueMoney Wallet | 30M+ | THB | โ Yes | 1-3 days |
| Rabbit LINE Pay | 12M+ | THB | โ Yes | 1-3 days |
| ShopeePay | 8M+ | THB, SGD, MYR | โ Yes | 1-3 days |
Singapore ๐ธ๐ฌโ
| Wallet | Users | Currencies | Refundable | Settlement |
|---|---|---|---|---|
| GrabPay | 187M+ | SGD, MYR, THB | โ Yes | 1-3 days |
| ShopeePay | 8M+ | SGD, THB, MYR | โ Yes | 1-3 days |
Malaysia ๐ฒ๐พโ
| Wallet | Users | Currencies | Refundable | Settlement |
|---|---|---|---|---|
| Touch 'n Go eWallet | 18M+ | MYR | โ Yes | 1-3 days |
| Boost | 9M+ | MYR | โ Yes | 1-3 days |
| GrabPay | 187M+ | MYR, SGD, THB | โ Yes | 1-3 days |
| ShopeePay | 8M+ | MYR, SGD, THB | โ Yes | 1-3 days |
Indonesia ๐ฎ๐ฉโ
| Wallet | Users | Currencies | Refundable | Settlement |
|---|---|---|---|---|
| DANA | 150M+ | IDR | โ Yes | 1-3 days |
| ShopeePay | 8M+ | IDR | โ Yes | 1-3 days |
Philippines ๐ต๐ญโ
| Wallet | Users | Currencies | Refundable | Settlement |
|---|---|---|---|---|
| GCash | 86M+ | PHP | โ Yes | 1-3 days |
South Korea ๐ฐ๐ทโ
| Wallet | Users | Currencies | Refundable | Settlement |
|---|---|---|---|---|
| KakaoPay | 30M+ | KRW | โ Yes | 1-3 days |
Japan ๐ฏ๐ตโ
| Wallet | Users | Currencies | Refundable | Settlement |
|---|---|---|---|---|
| PayPay | 60M+ | JPY | โ Yes | 1-3 days |
China ๐จ๐ณโ
| Wallet | Users | Currencies | Refundable | Settlement |
|---|---|---|---|---|
| Alipay | 1B+ | CNY, Multi | โ Yes | 1-3 days |
| Alipay+ | 1.3B+ | Multi | โ Yes | 1-3 days |
| WeChat Pay | 1.3B+ | CNY | โ Yes | 1-3 days |
How Digital Wallets Workโ
Typical Flow:
- Customer selects their preferred wallet at checkout
- Merchant creates source and charge via Omise API
- Customer is redirected to wallet authorization page
- Wallet app opens (via deep link on mobile)
- Customer authenticates and confirms payment
- Payment is processed instantly
- Customer returns to merchant site
- Merchant receives webhook notification
Average completion time: 1-3 minutes
Implementation Overviewโ
Basic Integrationโ
- Node.js
- PHP
- Python
- Ruby
const omise = require('omise')({
secretKey: 'skey_test_YOUR_SECRET_KEY'
});
// Create source for wallet payment
const source = await omise.sources.create({
type: 'grabpay', // or truemoney, shopeepay, etc.
amount: 50000, // Amount in smallest currency unit
currency: 'THB' // THB, SGD, MYR, etc.
});
// Create charge
const charge = await omise.charges.create({
amount: 50000,
currency: 'THB',
source: source.id,
return_uri: 'https://yourdomain.com/payment/callback'
});
// Redirect customer to wallet
res.redirect(charge.authorize_uri);
<?php
// Create source
$source = OmiseSource::create(array(
'type' => 'grabpay',
'amount' => 50000,
'currency' => 'THB'
));
// Create charge
$charge = OmiseCharge::create(array(
'amount' => 50000,
'currency' => 'THB',
'source' => $source['id'],
'return_uri' => 'https://yourdomain.com/payment/callback'
));
// Redirect to wallet
header('Location: ' . $charge['authorize_uri']);
?>
import omise
omise.api_secret = 'skey_test_YOUR_SECRET_KEY'
# Create source
source = omise.Source.create(
type='grabpay',
amount=50000,
currency='THB'
)
# Create charge
charge = omise.Charge.create(
amount=50000,
currency='THB',
source=source.id,
return_uri='https://yourdomain.com/payment/callback'
)
# Redirect to wallet
return redirect(charge.authorize_uri)
require 'omise'
Omise.api_key = 'skey_test_YOUR_SECRET_KEY'
# Create source
source = Omise::Source.create({
type: 'grabpay',
amount: 50000,
currency: 'THB'
})
# Create charge
charge = Omise::Charge.create({
amount: 50000,
currency: 'THB',
source: source.id,
return_uri: 'https://yourdomain.com/payment/callback'
})
# Redirect to wallet
redirect_to charge.authorize_uri
Handling Return and Webhooksโ
// Handle return from wallet
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');
}
});
// Handle webhook (recommended)
app.post('/webhooks/omise', (req, res) => {
const event = req.body;
if (event.key === 'charge.complete') {
const charge = event.data;
if (charge.status === 'successful') {
// Process order
fulfillOrder(charge.metadata.order_id);
}
}
res.sendStatus(200);
});
Comparison Matrixโ
| Feature | GrabPay | TrueMoney | ShopeePay | Touch 'n Go | Boost | DANA | GCash |
|---|---|---|---|---|---|---|---|
| Region | SG/MY/TH | TH | Multi | MY | MY | ID | PH |
| Users | 187M+ | 30M+ | 8M+ | 18M+ | 9M+ | 150M+ | 86M+ |
| Instant | โ | โ | โ | โ | โ | โ | โ |
| Mobile Only | โ | โ | โ | โ |