Boost
รับชำระเงินจากผู้ใช้ Boost กว่า 9 ล้านคนในมาเลเซีย กระเป๋าเงินดิจิทัลที่เกิดในประเทศชั้นนำที่มีการแทรกซึมของร้านค้าอย่างลึกและการรับรู้แบรนด์ในท้องถิ่นที่แข็งแกร่ง
ภาพรวม
Boost เป็นกระเป๋าเงินดิจิทัลที่เกิดในมาเลเซียที่ใหญ่ที่สุดด้วยผู้ใช้มากกว่า 9 ล้านคนและจุดสัมผัสร้านค้ามากกว่า 180,000 แห่ง ก่อตั้งเป็นกิจการร่วมค้าระหว่าง Axiata Group และ RHB ธนาคาร Boost ได้กลายเป็น e-wallet ที่ได้รับการยอมรับอย่างแพร่หลายที่สุดในมาเลเซีย โดยเฉพาะอย่างยิ่งที่แข็งแกร่งในหมู่วัยทำงานและผู้บริโภคในเมือง
คุณสมบัติหลัก:
- ✅ ผู้ใช้ 9+ ล้านคน - e-wallet ในประเทศที่ได้รับความนิยมมากที่สุดของมาเลเซีย
- ✅ ร้านค้า 180,000+ แห่ง - เครือข่ายการยอมรับที่กว้างที่สุดในมาเลเซีย
- ✅ ยืนยันทันที - ประมวลผลการชำระเงินแบบเรียลไทม์
- ✅ การชำระเงิน QR และแอป - รองรับวิธีการชำระเงินหลายแบบ
- ✅ โปรแกรมรางวัล - คืนเงินและคะแนนสะสม
- ✅ พร้อมใช้งาน 24/7 - ทำงานได้ทุกเวลารวมถึงวันหยุด
ภูมิภาคที่รองรับ
| Region | Currency | Min Amount | Max Amount | API Version |
|---|---|---|---|---|
| Malaysia | MYR | RM1.00 | RM4,999.00 | 2017-11-02 |
ระดับการยืนยันตัวตน
| ระดับ | วงเงินรายวัน | วงเงินรายเดือน | ข้อกำหนด |
|---|---|---|---|
| พื้นฐาน (ไม่ยืนยัน) | RM1,500 | RM3,000 | เฉพาะหมายเลขโทรศัพท์ |
| ยืนยันแล้ว | RM30,000 | RM100,000 | การยืนยันบัตรประชาชน/พาสปอร์ต |
วิธีการทำงาน
ประสบการณ์ของลูกค้า:
- ลูกค้าเลือก "Boost" ที่หน้าชำระเงิน
- เปลี่ยนเส้นทางไปยังหน้าชำระเงิน Boost
- เปิดแอป Boost (deep link บนมือถือ)
- ตรวจสอบรายละเอียดธุรกรรม
- ยืนยันตัวตนด้วย PIN 6 หลักหรือไบโอเมตริกส์
- ยืนยันการชำระเงิน
- ได้รับคืนเงิน/รางวัล (หากมีสิทธิ์)
- กลับสู่เว็บไซต์ร้านค้า
เวลาในการทำรายการโดยเฉลี่ย: 1-2 นาที
ตัวอย่างขั้นตอนการชำระเงิน
ขั้นตอนการชำระเงินบนมือถือ - แอป Boost:

เมื่อลูกค้าเข้าสู่ระบบแอป Boost อยู่แล้ว:
- ❶ เลือก Boost - ลูกค้าเลือก Boost ที่หน้าชำระเงิน
- ❷ เปลี่ยนเส้นทางไปยัง Boost - deep link เปิดแอป Boost โดยอัตโนมัติ
- ❸ ตรวจสอบการชำระเงิน - รายละเอียดธุรกรรมแสดงในแอป
- ❹ ตรวจสอบร้านค้า - แสดงชื่อร้านค้าและจำนวนเงิน
- ❺ ยืนยันตัวตน - ใส่ PIN 6 หลักหรือใช้ไบโอเมตริกส์ (ลายนิ้วมือ/Face ID)
- ❻ เสร็จสิ้น - ประมวลผลการชำระเงิน รับคืนเงิน/รางวัล กลับสู่ร้านค้า
ขั้นตอนการชำระเงินบนมือถือ - วิธีการลงชื่อเข้าใช้:

ขั้นตอนทางเลือกสำหรับลูกค้าที่ไม่ได้เข้าสู่ระบบแอป Boost:
- ❶ เลือก Boost - ลูกค้าเริ่มการชำระเงิน Boost
- ❷ ใส่หมายเลขมือถือ - ป้อนหมายเลขโทรศัพท์ที่ลงทะเบียน Boost
- ❸ ส่ง OTP - รับรหัสยืนยัน 6 หลักทาง SMS
- ❹ ใส่ OTP - ลูกค้าใส่ OTP เพื่อยืนยันตัวตน
- ❺ ตรวจสอบ & ยืนยัน - แสดงรายละเอียดการชำระเงิน ยืนยันตัวตนด้ วย PIN
- ❻ การชำระเงินสำเร็จ - ธุรกรรมเสร็จสิ้น เครดิตรางวัล
ขั้นตอนการชำระเงินบนเดสก์ท็อป:

ขั้นตอน QR code สำหรับเบราว์เซอร์เดสก์ท็อป:
- ❶ เริ่มการชำระเงิน - ลูกค้าคลิก "ชำระด้วย Boost"
- ❷ สร้าง QR - ระบบสร้าง QR code ของ Boost ที่ไม่ซ้ำกัน
- ❸ แสดง QR - QR code แสดงบนหน้าจอเดสก์ท็อป
- ❹ เปิดแอป Boost - ลูกค้าเปิด Boost บนอุปกรณ์มือถือ
- ❺ สแกน QR - ใช้เครื่องสแกนในแอปเพื่อแคปเจอร์ QR code
- ❻ ตรวจสอบรายละเอียด - ข้อมูลการชำระเงินแสดงในแอป
- ❼ ยืนยัน & เสร็จสิ้น - ยืนยันตัวตนด้วย PIN/ไบโอเมตริกส์ ประมวลผลการชำระเงิน
การนำไปใช้
ขั้นตอนที่ 1: สร้าง Source ของ Boost
- cURL
- Node.js
- PHP
- Python
- Ruby
- Go
- Java
- C#
curl https://api.omise.co/sources \
-u skey_test_YOUR_SECRET_KEY: \
-d "type=boost" \
-d "amount=10000" \
-d "currency=MYR"
const omise = require('omise')({
secretKey: 'skey_test_YOUR_SECRET_KEY'
});
const source = await omise.sources.create({
type: 'boost',
amount: 10000, // MYR 100.00
currency: 'MYR'
});
<?php
$source = OmiseSource::create(array(
'type' => 'boost',
'amount' => 10000,
'currency' => 'MYR'
));
?>
import omise
omise.api_secret = 'skey_test_YOUR_SECRET_KEY'
source = omise.Source.create(
type='boost',
amount=10000,
currency='MYR'
)
require 'omise'
Omise.api_key = 'skey_test_YOUR_SECRET_KEY'
source = Omise::Source.create({
type: 'boost',
amount: 10000,
currency: 'MYR'
})
source, err := client.Sources().Create(&operations.CreateSource{
Type: "boost",
Amount: 10000,
Currency: "MYR",
})
Source source = client.sources().create(new Source.CreateParams()
.type("boost")
.amount(10000L)
.currency("MYR"));
var source = await client.Sources.Create(new CreateSourceRequest
{
Type = "boost",
Amount = 10000,
Currency = "MYR"
});
การตอบกลับ:
{
"object": "source",
"id": "src_test_5rt6s9vah5lkvi1rh9c",
"type": "boost",
"flow": "redirect",
"amount": 10000,
"currency": "MYR"
}
ขั้นตอนที่ 2: สร้าง Charge
curl https://api.omise.co/charges \
-u skey_test_YOUR_SECRET_KEY: \
-d "amount=10000" \
-d "currency=MYR" \
-d "source=src_test_5rt6s9vah5lkvi1rh9c" \
-d "return_uri=https://yourdomain.com/payment/callback"
ขั้นตอนที่ 3: เปลี่ยนเส้นทางลูกค้า
app.post('/checkout/boost', async (req, res) => {
try {
const { amount, order_id, customer_email } = req.body;
// ตรวจสอบจำนวนเงิน (RM1 - RM10,000)
if (amount < 100 || amount > 1000000) {
return res.status(400).json({
error: 'Amount must be between RM1 and RM10,000'
});
}
// สร้าง source
const source = await omise.sources.create({
type: 'boost',
amount: amount,
currency: 'MYR'
});
// สร้าง charge
const charge = await omise.charges.create({
amount: amount,
currency: 'MYR',
source: source.id,
return_uri: `${process.env.BASE_URL}/payment/callback`,
metadata: {
order_id: order_id,
customer_email: customer_email
}
});
// เปลี่ยนเส้นทางไปยัง Boost
res.redirect(charge.authorize_uri);
} catch (error) {
console.error('Boost error:', error);
res.status(500).json({ error: error.message });
}
});
ขั้นตอนที่ 4: จัดการการกลับมา
app.get('/payment/callback', async (req, res) => {
try {
const chargeId = req.query.charge_id;
const charge = await omise.charges.retrieve(chargeId);
if (charge.status === 'successful') {
await processOrder(charge.metadata.order_id);
res.redirect('/payment-success');
} else if (charge.status === 'failed') {
res.redirect('/payment-failed?reason=' + charge.failure_message);
} else {
res.redirect('/payment-pending');
}
} catch (error) {
res.redirect('/payment-error');
}
});
ขั้นตอนที่ 5: จัดการ Webhook
app.post('/webhooks/omise', (req, res) => {
const event = req.body;
if (event.key === 'charge.complete' && event.data.source.type === 'boost') {
const charge = event.data;
if (charge.status === 'successful') {
processOrder(charge.metadata.order_id);
sendConfirmationEmail(charge.metadata.customer_email);
} else if (charge.status === 'failed') {
handleFailedPayment(charge.metadata.order_id);
}
}
res.sendStatus(200);
});
ตัวอย่างการนำไปใช้แบบสมบูรณ์
// Express.js server
const express = require('express');
const omise = require('omise')({
secretKey: process.env.OMISE_SECRET_KEY
});
const app = express();
app.use(express.json());
app.post('/checkout/boost', async (req, res) => {
try {
const { amount, order_id, customer_email, customer_phone } = req.body;
// ตรวจสอบจำนวนเงิน (RM1 - RM10,000)
if (amount < 100 || amount > 1000000) {
return res.status(400).json({
error: 'Amount must be between RM1 and RM10,000'
});
}
// คำนวณคืนเงินโดยประมาณ (หากร้านค้าเสนอ)
const estimatedCashback = calculateCashback(amount);
// สร้าง source
const source = await omise.sources.create({
type: 'boost',
amount: amount,
currency: 'MYR'
});
// สร้าง charge
const charge = await omise.charges.create({
amount: amount,
currency: 'MYR',
source: source.id,
return_uri: `${process.env.BASE_URL}/payment/callback`,
metadata: {
order_id: order_id,
customer_email: customer_email,
customer_phone: customer_phone,
payment_method: 'boost',
estimated_cashback: estimatedCashback
}
});
// ส่งคืน URL การอนุญาต
res.json({
authorize_uri: charge.authorize_uri,
charge_id: charge.id,
estimated_cashback: estimatedCashback
});
} catch (error) {
console.error('Boost error:', error);
res.status(500).json({ error: error.message });
}
});
// คำนวณคืนเงิน (ตัวอย่างการนำไปใช้)
function calculateCashback(amount) {
// ตัวอย่าง: คืนเงิน 1% สูงสุด RM10
const cashbackRate = 0.01;
const cashback = amount * cashbackRate;
return Math.min(cashback, 1000); // คืนเงินสูงสุด RM10
}
// ตัวจัดการ callback
app.get('/payment/callback', async (req, res) => {
try {
const chargeId = req.query.charge_id;
const charge = await omise.charges.retrieve(chargeId);
if (charge.status === 'successful') {
res.redirect(`/order-success?order=${charge.metadata.order_id}`);
} else {
res.redirect(`/payment-failed?charge=${chargeId}`);
}
} catch (error) {
res.redirect('/payment-error');
}
});
// ตัวจัดการ Webhook
app.post('/webhooks/omise', (req, res) => {
const event = req.body;
if (event.key === 'charge.complete') {
const charge = event.data;
if (charge.source.type === 'boost') {
if (charge.status === 'successful') {
updateOrderStatus(charge.metadata.order_id, 'paid');
sendConfirmation(charge.metadata.customer_email);
// บันทึกการชำระเงินสำเร็จ
console.log(`Boost payment successful: ${charge.id}`);
} else {
updateOrderStatus(charge.metadata.order_id, 'failed');
console.log(`Boost payment failed: ${charge.id}`);
}
}
}
res.sendStatus(200);
});
// ฟังก์ชันช่วยเหลือ
async function updateOrderStatus(orderId, status) {
await db.orders.update({ id: orderId }, { status: status });
}
async function sendConfirmation(email) {
// ส่งการยืนยันทางอีเมล
}
app.listen(3000);
การรองรับการคืนเงิน
Boost รองรับการคืนเงินเต็มจำนวนเท่านั้นภายใน 30 วัน:
// คืนเงินเต็มจำนวนเท่านั้น (ไม่คืนบางส่วน)
const refund = await omise.charges.refund('chrg_test_...', {
amount: 10000 // ต้องเป็นจำนวนเต็ม
});
- คืนเงินเต็มจำนวนเท่านั้น - ไม่รองรับการคืนเงินบางส่วน
- ช่วง 30 วัน - ต้องเริ่มการคืนเงินภายใน 30 วัน
- การยกเลิกคืนเงิน - คืนเงินที่ได้รับจะถูกยกเลิก
ปัญหาที่พบบ่อยและการแก้ไข
ปัญหา: ไม่ได้ติดตั้งแอป Boost
สาเหตุ: ลูกค้าไม่ได้ติดตั้งแอป Boost
วิธีแก้:
function detectBoostApp() {
const isMobile = /Android|iPhone|iPad|iPod/i.test(navigator.userAgent);
if (isMobile) {
return `
<div class="boost-app-check">
<p>ต้องใช้แอป Boost สำหรับการชำระเงิน</p>
<div class="download-links">
<a href="https://play.google.com/store/apps/details?id=com.myboost.boostapp">
<img src="/images/google-play-badge.png" alt="Get it on Google Play">
</a>
<a href="https://apps.apple.com/app/boost-pay/id1097459653">
<img src="/images/app-store-badge.png" alt="Download on App Store">
</a>
</div>
</div>
`;
}
}
ปัญหา: ยอดเงินไม่เพียงพอ
สาเหตุ: ยอดเงินกระเป๋าเงิน Boost ของลูกค้าต่ำเกินไป
วิธีแก้:
<div class="balance-instructions">
<h3>ยอดเงิน Boost ไม่เพียงพอ</h3>
<p>ยอดเงินกระเป๋าเงิน Boost ของคุณต่ำเกินไปสำหรับธุรกรรมนี้</p>
<h4>วิธีการเติมเงิน:</h4>
<ul>
<li>🏦 <strong>ธนาคารออนไลน์</strong> - เชื่อมโยงบัญชีธนาคารของคุณ</li>
<li>💳 <strong>บัตรเดบิต/เครดิต</strong> - เติมเงินทันที</li>
<li>🏪 <strong>7-Eleven</strong> - เติมเงินสดที่เคาน์เตอร์</li>
<li>🏧 <strong>ATM Maybank</strong> - เลือก "Boost Top Up"</li>
<li>👥 <strong>การโอน Boost</strong> - รับจากเพื่อน</li>
</ul>
<p>หลังจากเติมเงิน กลับมาที่นี่เพื่อทำการชำระเงินให้เสร็จสิ้น</p>
</div>
ปัญหา: เกินวงเงินรายวัน
สาเหตุ: ลูกค้าถึงวงเงินธุรกรรมรายวันแล้ว
วิธีแก้:
function handleLimitExceeded(verificationLevel) {
if (verificationLevel === 'basic') {
return {
error: 'Daily limit exceeded',
message: 'บัญชีที่ไม่ยืนยันมีวงเงินรายวัน RM1,500',
solution: 'ยืนยันบัญชีของคุณเพื่อเพิ่มวงเงินเป็น RM30,000/วัน',
instructions: [
'เปิดแอป Boost',
'ไปที่โปรไฟล์ > ยืนยันบัญชี',
'ส่งการยืนยันบัตรประชาชน/พาสปอร์ต',
'รอการอนุมัติ (ปกติ 1-2 ชั่วโมง)'
]
};
} else {
return {
error: 'Daily limit exceeded',
message: 'คุณถึงวงเงินรายวัน RM30,000 แล้ว',
solution: 'ลองอีกครั้งในวันพรุ่งนี้หรือใช้วิธีการชำระเงินทางเลือก'
};
}
}
ปัญหา: การยืนยันบัญชีค้างอยู่
สาเหตุ: ลูกค้าเริ่มการยืนยันแต่ยังไม่ได้รับการอนุมัติ
วิธีแก้:
function showVerificationPending() {
return `
<div class="verification-pending">
<h3>การยืนยันบัญชีค้างอยู่</h3>
<p>การยืนยันบัญชี Boost ของคุณกำลังดำเนินการ</p>
<p>การยืนยันโดยทั่วไปใช้เวลา 1-2 ชั่วโมงในเวลาทำการ</p>
<p>ในขณะเดียวกัน คุณสามารถ:</p>
<ul>
<li>ใช้วงเงินปัจจุบันของคุณ (RM1,500/วัน)</li>
<li>เลือกวิธีการชำระเงินทางเลือก</li>
<li>แบ่งการซื้อของคุณเป็นธุรกรรมที่เล็กลง</li>
</ul>
</div>
`;
}
ปัญหา: หมดเวลาการชำระเงิน
สาเหตุ: ลูกค้าไม่ได้ทำการชำระเงินให้เสร็จภายในเวลาที่กำหนด
วิธีแก้:
// ช่วงเวลาการชำระเงิน 10 นาที
const PAYMENT_TIMEOUT = 10 * 60 * 1000;
setTimeout(() => {
if (!paymentConfirmed) {
showTimeoutMessage();
allowRetry();
}
}, PAYMENT_TIMEOUT);
function allowRetry() {
document.getElementById('retry-button').onclick = () => {
// สร้างการชำระเงินใหม่
window.location.href = '/checkout';
};
}