Maybank QR
Accept payments via Maybank QR from Malaysia's largest bank with 10+ million MAE by Maybank app users and extensive nationwide presence.
Overviewโ
Maybank QR is the QR payment system from Maybank, Malaysia's largest bank. While DuitNow QR works across all Malaysian banks, Maybank QR is specifically for Maybank customers using the Maybank2u or MAE app.
Key Features:
- โ Largest bank - 10+ million Maybank app users
- โ Fast confirmation - Near real-time payment verification (typically within seconds)
- โ High trust - Malaysia's most established bank
- โ Wide reach - 400+ branches nationwide
- โ Refund support - Full and partial refunds
- โ ๏ธ Maybank only - Requires Maybank account
Supported Regionโ
| Region | Currency | Min Amount | Max Amount | Transaction Limit |
|---|---|---|---|---|
| Malaysia | MYR | RM 0.01 | RM 10,000 | RM 50,000/day* |
*Daily limits vary by customer's account type
When to Use Maybank QR vs DuitNow QRโ
| Feature | Maybank QR | DuitNow QR |
|---|---|---|
| Banks | Maybank only | All Malaysian banks |
| Users | 10M+ | 30M+ |
| Max Amount | RM 10,000 | RM 5,000 |
| Settlement | 1-3 days | Instant |
| Best For | Maybank-heavy customer base | General audience |
Use DuitNow QR for wider reach. Use Maybank QR only if your customer base is predominantly Maybank users or you need higher transaction limits.
Implementationโ
Create Source and Display QRโ
- Node.js
- PHP
- Python
const omise = require('omise')({
secretKey: 'skey_test_YOUR_SECRET_KEY'
});
// Create Maybank QR source
const source = await omise.sources.create({
type: 'maybank_qr',
amount: 10000, // RM 100.00
currency: 'MYR'
});
// Get QR code image URL
const qrCodeUrl = source.scannable_code.image.download_uri;
// Create charge
const charge = await omise.charges.create({
amount: 10000,
currency: 'MYR',
source: source.id
});
// Display QR code
res.render('maybank-qr', {
qr_code: qrCodeUrl,
charge_id: charge.id
});
<?php
$source = OmiseSource::create(array(
'type' => 'maybank_qr',
'amount' => 10000,
'currency' => 'MYR'
));
$qrCodeUrl = $source['scannable_code']['image']['download_uri'];
$charge = OmiseCharge::create(array(
'amount' => 10000,
'currency' => 'MYR',
'source' => $source['id']
));
?>
import omise
omise.api_secret = 'skey_test_YOUR_SECRET_KEY'
source = omise.Source.create(
type='maybank_qr',
amount=10000,
currency='MYR'
)
qr_code_url = source.scannable_code['image']['download_uri']
charge = omise.Charge.create(
amount=10000,
currency='MYR',
source=source.id
)
QR Code Displayโ
<div class="maybank-qr-payment">
<div class="maybank-header">
<img src="/banks/maybank-logo.svg" alt="Maybank">
<h3>Maybank QR Pay</h3>
</div>
<div class="qr-container">
<img id="qr-code" src="{{ qr_code_url }}" alt="Maybank QR Code">
</div>
<div class="amount">
<strong>RM {{ amount }}</strong>
</div>
<div id="status">
<p>Menunggu pembayaran...</p>
<div class="spinner"></div>
</div>
<div class="instructions">
<h4>Cara Bayar:</h4>
<ol>
<li>Buka app <strong>Maybank2u</strong> atau <strong>MAE</strong></li>
<li>Pilih "QR Pay" atau "Scan & Pay"</li>
<li>Imbas QR code di atas</li>
<li>Sahkan pembayaran dengan TAC atau biometrik</li>
</ol>
</div>
<div class="app-links">
<p><small>Perlu app Maybank?</small></p>
<a href="https://apps.apple.com/my/app/maybank2u/id715871551" target="_blank">
iOS
</a>
<a href="https://play.google.com/store/apps/details?id=com.maybank2u.life" target="_blank">
Android
</a>
</div>
</div>
<script>
// Poll for payment status
const chargeId = '{{ charge_id }}';
const pollInterval = setInterval(async () => {
const response = await fetch(`/api/charges/${chargeId}/status`);
const data = await response.json();
if (data.status === 'successful') {
clearInterval(pollInterval);
document.getElementById('status').innerHTML =
'<p class="success">โ Pembayaran Berjaya!</p>';
setTimeout(() => window.location = '/payment-success', 1000);
} else if (data.status === 'failed') {
clearInterval(pollInterval);
document.getElementById('status').innerHTML =
'<p class="error">Pembayaran gagal. Sila cuba lagi.</p>';
}
}, 3000);
// Timeout after 5 minutes
setTimeout(() => {
clearInterval(pollInterval);
if (!document.querySelector('.success')) {
document.getElementById('status').innerHTML =
'<p class="error">QR code tamat tempoh. Sila jana semula.</p>';
}
}, 300000);
</script>
Refund Supportโ
// Full or partial refund within 30 days
const refund = await omise.charges.refund('chrg_test_...', {
amount: 10000 // Full or partial
});
Testingโ
Test Amount: RM 100.00 (10000 smallest unit) Expected: Successful payment in test mode
Best Practicesโ
1. Show Maybank Brandingโ
<div class="payment-header">
<img src="/banks/maybank-logo.svg" alt="Maybank" class="bank-logo">
<h3>Maybank QR Pay</h3>
<p class="note">Untuk pengguna Maybank sahaja</p>
</div>
2. Provide Alternativeโ
// Show alternative for non-Maybank users
showPaymentOptions([
{
type: 'maybank_qr',
label: 'Maybank QR',
description: 'Untuk pengguna Maybank'
},
{
type: 'duitnow_qr',
label: 'DuitNow QR',
description: 'Semua bank & e-wallet',
recommended: true
}
]);
3. Handle Non-Maybank Usersโ
<div class="payment-alternatives">
<p>Bukan pengguna Maybank?</p>
<button onclick="useDuitNowQR()">Guna DuitNow QR</button>
<button onclick="useFPX()">Guna FPX Banking</button>
</div>
FAQโ
What is Maybank QR?
Maybank QR is the QR payment system from Maybank, Malaysia's largest bank. It works specifically with Maybank2u and MAE apps.
Can non-Maybank customers use it?
No, Maybank QR requires a Maybank account. For wider reach, use DuitNow QR which works with all Malaysian banks.
What are the transaction limits?
- Minimum: RM 0.01
- Maximum: RM 10,000 per transaction
- Daily limit: Up to RM 50,000 (varies by account type)
Should I use Maybank QR or DuitNow QR?
Use DuitNow QR for general audience (works with all banks/e-wallets).
Use Maybank QR only if:
- Your customers are predominantly Maybank users
- You need higher transaction limits (RM 10,000 vs RM 5,000)
Can I refund Maybank QR payments?
Yes, full and partial refunds are supported within 30 days.
Related Resourcesโ
- QR Payments Overview - All QR methods
- DuitNow QR - Universal Malaysia QR
- FPX - Malaysia internet banking
- Testing - Test your integration
Next Stepsโ
- Create Maybank QR source
- Display QR code
- Implement status polling
- Set up webhooks
- Provide DuitNow QR alternative
- Test with Maybank app
- Go live