Alipay+
รับชำระเงินจาก 12+ กระเป๋าเงินพาร์ทเนอร์ที่มีบัญชีลงทะเบียนรวมกันมากกว่า 1.3 พันล้านบัญชีในภูมิภาคเอเชีย-แปซิฟิกผ่านการเชื่อมต่อ Alipay+ เพียงครั้งเดียว
ภาพรวม
Alipay+ คือโซลูชันการชำระเงินดิจิทัลและการตลาดข้ามพรมแดนของ Ant Group ที่เชื่อมต่อกระเป๋าเงินอิเล็กทรอนิกส์หลายตัวทั่วภูมิภาคเอเชีย-แปซิฟิก ด้วยการเชื่อมต่อเพียงครั้งเดียว คุณสามารถรับชำระเงินจาก GCash (ฟิลิปปินส์), KakaoPay (เกาหลีใต้), Touch 'n Go eWallet (มาเลเซีย) และกระเป๋าเงินในภูมิภาคอื่นๆ อีกมากมาย
ฟีเจอร์หลัก:
- ✅ การเข้าถึงที่กว้างขวาง - 12+ กระเป๋าเงินพาร์ทเนอร์ที่มีบัญชีลงทะเบียนรวมกันมากกว่า 1.3 พันล้านบัญชี*
- ✅ การเชื่อมต่อเดียว - API เดียวสำหรับหลายกระเป๋าเงิน
- ✅ ข้ามพรมแดน - รับชำระเงินจากนักท่องเที่ยวและลูกค้าต่างประเทศ
- ✅ ยืนยันรวดเร็ว - การตรวจสอบการชำระเงินแบบเรียลไทม์ใกล้เคียง (โดยทั่วไปภายในไม่กี่วินาที)
- ✅ หลายสกุลเงิน - รองรับ 17+ สกุลเงิน
- ✅ เครื่องมือการตลาด - ฟีเจอร์โปรโมชั่นและความภักดี
กระเป๋าเงินที่รองรับตามภูมิภาค
Alipay+ เชื่อมต่อคุณกับกระเป๋าเงินดิจิทัลเหล่านี้:
ไทย:
- Alipay CN
- Alipay HK
- KakaoPay
- GCash
- TrueMoney
สิงคโปร์:
- Alipay CN
- Alipay HK
- KakaoPay
- Touch 'n Go
ภูมิภาคที่รองรับ
| ภูมิภาค | สกุลเงิน | จำนวนขั้นต่ำ | จำนวนสูงสุด | API Version |
|---|---|---|---|---|
| ไทย | THB | ฿20.00 | ฿150,000.00 | 2017-11-02 |
| สิงคโปร์ | SGD | $1.00 | $20,000.00 | 2017-11-02 |
วิธีการทำงาน
ขั้นตอนการชำระเงิน:
- ลูกค้าเลือกกระเป๋าเงินของพวกเขาที่หน้าชำระเงิน
- ผู้ค้าสร้าง Alipay+ source ด้วย Omise
- ลูกค้าจะเห็น QR code หรือถูกเปลี่ยนเส้นทางไปยังกระเป๋าเงิน
- ลูกค้าสแกน QR หรือเปิดแอปกระเป๋าเงิน
- ลูกค้ายืนยันการชำระเงินในกระเป๋าเงินของพวกเขา
- การชำระเงินได้รับการประมวลผลผ่านเครือข่าย Alipay+
- ผู้ค้าได้รับการยืนยันทันที
เวลาเสร็จสิ้นโดยทั่วไป: 1-2 นาที
การใช้งาน
ขั้นตอนที่ 1: สร้าง Alipay+ Source
- cURL
- Node.js
- PHP
- Python
- Ruby
curl https://api.omise.co/sources \
-u skey_test_YOUR_SECRET_KEY: \
-d "type=alipay_plus" \
-d "amount=50000" \
-d "currency=THB"
const omise = require('omise')({
secretKey: 'skey_test_YOUR_SECRET_KEY'
});
const source = await omise.sources.create({
type: 'alipay_plus',
amount: 50000, // ฿500.00
currency: 'THB'
});
console.log('Alipay+ source:', source.id);
console.log('QR code:', source.scannable_code.image.download_uri);
<?php
$source = OmiseSource::create(array(
'type' => 'alipay_plus',
'amount' => 50000,
'currency' => 'THB'
));
echo "QR Code: " . $source['scannable_code']['image']['download_uri'];
?>
import omise
omise.api_secret = 'skey_test_YOUR_SECRET_KEY'
source = omise.Source.create(
type='alipay_plus',
amount=50000,
currency='THB'
)
print(f"QR Code: {source.scannable_code['image']['download_uri']}")
require 'omise'
Omise.api_key = 'skey_test_YOUR_SECRET_KEY'
source = Omise::Source.create({
type: 'alipay_plus',
amount: 50000,
currency: 'THB'
})
puts "QR Code: #{source.scannable_code.image.download_uri}"
การตอบกลับ:
{
"object": "source",
"id": "src_test_5rt6s9vah5lkvi1rh9c",
"type": "alipay_plus",
"flow": "redirect",
"amount": 50000,
"currency": "THB",
"scannable_code": {
"type": "qr",
"image": {
"download_uri": "https://api.omise.co/...",
"object": "document"
}
}
}
ขั้นตอนที่ 2: แสดง QR Code หรือเปลี่ยนเส้นทาง
ตัวเลือก A: QR Code (ในร้าน/เดสก์ท็อป)
app.post('/checkout/alipay-plus', async (req, res) => {
try {
const { amount, currency } = req.body;
// สร้าง source
const source = await omise.sources.create({
type: 'alipay_plus',
amount: amount,
currency: currency
});
// สร้าง charge
const charge = await omise.charges.create({
amount: amount,
currency: currency,
source: source.id,
return_uri: `${process.env.BASE_URL}/payment/callback`
});
// แสดง QR code
res.render('payment-qr', {
qr_code_url: source.scannable_code.image.download_uri,
charge_id: charge.id
});
} catch (error) {
res.status(500).json({ error: error.message });
}
});
เทมเพลตการแสดง QR Code:
<div class="alipay-plus-payment">
<h2>สแกนเพื่อชำระเงินด้วย Alipay+</h2>
<img src="{{ qr_code_url }}" alt="Alipay+ QR Code" class="qr-code">
<div class="supported-wallets">
<p>สแกนได้ด้วยกระเป๋าเงินเหล่านี้:</p>
<div class="wallet-logos">
<img src="/icons/gcash.png" alt="GCash">
<img src="/icons/kakaopay.png" alt="KakaoPay">
<img src="/icons/tng.png" alt="Touch 'n Go">
<img src="/icons/truemoney.png" alt="TrueMoney">
<img src="/icons/alipay-hk.png" alt="AlipayHK">
</div>
</div>
<div class="instructions">
<ol>
<li>เปิดแอปกระเป๋าเงินของคุณ</li>
<li>แตะ "สแกน" หรือ "ชำระเงิน"</li>
<li>สแกน QR code ด้านบน</li>
<li>ยืนยันการชำระเงิน</li>
</ol>
</div>
<div id="payment-status">
<p>รอการชำระเงิน...</p>
<div class="spinner"></div>
</div>
</div>
<script>
// ตรวจสอบสถานะการชำระเงิน
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);
window.location = '/payment-success';
} else if (data.status === 'failed') {
clearInterval(pollInterval);
window.location = '/payment-failed';
}
}, 3000); // ตรวจสอบทุก 3 วินาที
// หมดเวลาหลัง 10 นาที
setTimeout(() => {
clearInterval(pollInterval);
document.getElementById('payment-status').innerHTML =
'<p>หมดเวลาชำระเงิน กรุณาลองอีกครั้ง</p>';
}, 600000);
</script>
ตัวเลือก B: เปลี่ยนเส้นทาง (มือถือ)
app.post('/checkout/alipay-plus-mobile', async (req, res) => {
try {
const { amount, currency } = req.body;
const source = await omise.sources.create({
type: 'alipay_plus',
amount: amount,
currency: currency
});
const charge = await omise.charges.create({
amount: amount,
currency: currency,
source: source.id,
return_uri: `${process.env.BASE_URL}/payment/callback`
});
// เปลี่ยนเส้นทางไปยังหน้า Alipay+
res.redirect(charge.authorize_uri);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
ขั้นตอนที่ 3: จัดการการโทรกลับการชำระเงิน
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 fulfillOrder(charge.metadata.order_id);
res.redirect('/payment-success');
} else if (charge.status === 'failed') {
res.redirect('/payment-failed');
} else {
res.redirect('/payment-pending');
}
} catch (error) {
res.redirect('/payment-error');
}
});
ขั้นตอนที่ 4: จัดการ Webhook
app.post('/webhooks/omise', async (req, res) => {
const event = req.body;
if (event.key === 'charge.complete') {
const charge = event.data;
if (charge.source.type === 'alipay_plus') {
if (charge.status === 'successful') {
await processOrder(charge.metadata.order_id);
await sendConfirmation(charge.metadata.customer_email);
}
}
}
res.sendStatus(200);
});
ตัวอย่างการใช้งานแบบสมบูรณ์
const express = require('express');
const omise = require('omise')({
secretKey: process.env.OMISE_SECRET_KEY
});
const app = express();
app.use(express.json());
// การกำหนดค่าสกุลเงิน
const SUPPORTED_CURRENCIES = ['THB', 'MYR', 'SGD', 'PHP', 'KRW', 'HKD'];
const CURRENCY_LIMITS = {
THB: { min: 2000, max: 1000000 },
MYR: { min: 500, max: 500000 },
SGD: { min: 100, max: 100000 },
PHP: { min: 5000, max: 1000000 },
KRW: { min: 100000, max: 10000000 },
HKD: { min: 100, max: 100000 }
};
// สร้างการชำระเงิน Alipay+
app.post('/checkout/alipay-plus', async (req, res) => {
try {
const { amount, currency, order_id, customer_email } = req.body;
// ตรวจสอบสกุลเงิน
if (!SUPPORTED_CURRENCIES.includes(currency)) {
return res.status(400).json({
error: `สกุลเงิน ${currency} ไม่รองรับสำหรับ Alipay+`
});
}
// ตรวจสอบจำนวนเงิน
const limits = CURRENCY_LIMITS[currency];
if (amount < limits.min || amount > limits.max) {
return res.status(400).json({
error: `จำนวนเงินต้องอยู่ระหว่าง ${limits.min} ถึง ${limits.max} ${currency}`
});
}
// สร้าง source
const source = await omise.sources.create({
type: 'alipay_plus',
amount: amount,
currency: currency
});
// สร้าง charge
const charge = await omise.charges.create({
amount: amount,
currency: currency,
source: source.id,
return_uri: `${process.env.BASE_URL}/payment/callback`,
metadata: {
order_id: order_id,
customer_email: customer_email,
payment_method: 'alipay_plus'
}
});
// ส่งคืน QR code และ authorize URI
res.json({
charge_id: charge.id,
qr_code_url: source.scannable_code.image.download_uri,
authorize_uri: charge.authorize_uri,
expires_at: new Date(Date.now() + 10 * 60 * 1000).toISOString()
});
} catch (error) {
console.error('Alipay+ error:', error);
res.status(500).json({ error: error.message });
}
});
// ตรวจสอบสถานะ charge (สำหรับการโพล)
app.get('/api/charges/:chargeId/status', async (req, res) => {
try {
const charge = await omise.charges.retrieve(req.params.chargeId);
res.json({
status: charge.status,
paid: charge.paid,
failure_message: charge.failure_message
});
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// การโทรกลับการชำระเงิน
app.get('/payment/callback', async (req, res) => {
try {
const charge = await omise.charges.retrieve(req.query.charge_id);
if (charge.status === 'successful') {
res.redirect(`/order-confirmation?order=${charge.metadata.order_id}`);
} else {
res.redirect(`/payment-failed?reason=${charge.failure_message}`);
}
} catch (error) {
res.redirect('/payment-error');
}
});
// ตัวจัดการ Webhook
app.post('/webhooks/omise', async (req, res) => {
const event = req.body;
if (event.key === 'charge.complete' && event.data.source.type === 'alipay_plus') {
const charge = event.data;
if (charge.status === 'successful') {
await fulfillOrder(charge.metadata.order_id);
await sendReceipt(charge.metadata.customer_email, charge);
}
}
res.sendStatus(200);
});
app.listen(3000);
การรองรับการคืนเงิน
Alipay+ รองรับการคืนเงินเต็มจำนวนและบางส่วนภายใน180 วัน:
// คืนเงินเต็มจำนวน
const fullRefund = await omise.charges.refund('chrg_test_...', {
amount: 50000
});
// คืนเงินบางส่วน
const partialRefund = await omise.charges.refund('chrg_test_...', {
amount: 25000 // คืนครึ่งหนึ่ง
});
console.log('Refund status:', fullRefund.status);
การคืนเงินจะดำเนินการกลับไปยังกระเป๋าเงินเดิมของลูกค้าภายใน 3-7 วันทำการ ขึ้นอยู่กับกระเป๋าเงินพาร์ทเนอร์
ระยะเวลาและนโยบายการคืนเงินอาจมีการเปลี่ยนแปลง โปรดตรวจสอบความสามารถในการคืนเงินปัจจุบันผ่านเอกสาร API ของ Omise หรือแดชบอร์ดผู้ค้าของคุณอยู่เสมอ
ปัญหาทั่วไปและการแก้ไข
ปัญหา: สแกน QR code ไม่ได้
สาเหตุ: ลูกค้าใช้แอปกระเป๋าเงินที่ ไม่รองรับ
วิธีแก้ไข:
// แสดงกระเป๋าเงินที่รองรับอย่างเด่นชัด
const supportedWallets = [
'GCash', 'KakaoPay', 'Touch \'n Go',
'TrueMoney', 'AlipayHK', 'Rabbit LINE Pay'
];
// แสดงข้อความ
showMessage(`กรุณาสแกนด้วย: ${supportedWallets.join(', ')}`);
ปัญหา: สกุลเงินไม่รองรับโดยกระเป๋าเงินของลูกค้า
สาเหตุ: กระเป๋าเงินของลูกค้าไม่รองรับสกุลเงินของผู้ค้า
วิธีแก้ไข: Alipay+ จัดการการแปลงสกุลเงินโดยอัตโนมัติ ตรวจสอบให้แน่ใจว่าคุณใช้สกุลเงินที่รองรับ
ปัญหา: การชำระเงินหมดเวลา
สาเหตุ: ลูกค้าไม่ได้ทำการชำระเงินให้เสร็จสิ้นภายใน 10 นาที
วิธีแก้ไข:
const QR_TIMEOUT = 10 * 60 * 1000; // 10 นาที
setTimeout(() => {
if (!paymentCompleted) {
showMessage('QR code หมดอายุ กรุณาสร้างอันใหม่');
enableRetry();
}
}, QR_TIMEOUT);
ปัญหา: ข้อจำกัดข้ามพรมแดน
สาเหตุ: กระเป๋าเงินบางตัวมีข้อจำกัดการชำระเงินข้ามพรมแดน
วิธีแก้ไข: ตรวจสอบเอกสารของกระเป๋าเงินพาร์ทเนอร์สำหรับข้อจำกัดข้ามพรมแดนและแจ้งลูกค้าตามนั้น