Alipay
รับชำระเงินจาก Alipay กระเป๋าเงินดิจิทัลที่ใหญ่ที่สุดของจีน มีผู้ใช้มากกว่า 1 พันล้านคนทั่วโลก ช่วยให้การทำธุรกรรมอีคอมเมิร์ซข้ามพรมแดนเป็นไปอย่างราบรื่น
ขั้นตอนการชำระเงิน


ภาพด้านบนแสดงกระบวนการ redirect และขั้นตอนการอนุมัติของลูกค้าในขั้นตอนการชำระเงิน Alipay
ภาพรวม
Alipay เป็นแพลตฟอร์มการชำระเงินออนไลน์และมือถือของบุคคลที่สาม ดำเนินการโดย Ant Group (เดิมชื่อ Ant Financial) บริษัทในเครือของ Alibaba Group ด้วยผู้ใช้งานมากกว่า 1 พันล้านคนส่วนใหญ่ในจีน Alipay ได้กลายเป็นแพลตฟอร์มการชำระเงินผ่านมือถือที่ใหญ่ที่สุดในโลก และเป็นวิธีการชำระเงินที่สำคัญสำหรับผู้ค้าที่กำหนดเป้าหมายผู้บริโภคชาวจีน
คุณสมบัติหลัก:
- ✅ ผู้ใช้ 1 พันล้านคน+ - หนึ่งในแพลตฟอร์มการชำระเงินผ่านมือถือที่ใหญ่ที่สุดในโลก
- ✅ พร้อมสำหรับการข้ามพรมแดน - สร้างขึ้นสำหรับอีคอมเมิร์ซระหว่างประเทศ
- ✅ การเข้าถึงตลาดจีน - จำเป็นสำหรับธุรกิจที่มุ่งเน้นจีน
- ✅ การยืนยันทันที - การประมวลผลการชำระเงินแบบเรียลไทม์
- ✅ มือถือเป็นหลัก - ปรับแต่งสำหรับผู้ใช้สมาร์ทโฟน
- ✅ แบรนด์ที่เชื่อ ถือได้ - เป็นส่วนหนึ่งของระบบนิเวศ Alibaba/Ant Group
ภูมิภาคที่รองรับ
| ภูมิภาค | สกุลเงิน | จำนวนเงินขั้นต่ำ | จำนวนเงินสูงสุด | วงเงินต่อวัน |
|---|---|---|---|---|
| ไทย | THB | ฿20.00 | ฿150,000 | แตกต่างกัน |
| สิงคโปร์ | SGD | $1.00 | $20,000 | แตกต่างกัน |
| มาเลเซีย | MYR | RM1.00 | RM30,000 | แตกต่างกัน |
| ญี่ปุ่น | JPY | ¥100 | ¥6,000,000 | แตกต่างกัน |
*ข้อจำกัดแตกต่างกันตามระดับการยืนยันตัวตนบัญชี Alipay ของลูกค้า
วิธีการทำงาน
ประสบการณ์ลูกค้า:
- ลูกค้าเลือก "Alipay" ที่หน้าชำระเงิน
- ถูก redirect ไปยังหน้าอนุมัติ Alipay
- เปิดแอป Alipay (มือถือ) หรือสแกน QR code (เดสก์ท็อป)
- ยืนยันตัวตนด้วยรหัสผ่าน/ลายนิ้วมือ/Face ID
- ตรวจสอบและยืนยันการชำระเงิน
- กลับไปยังเว็บไซต์ผู้ค้า
เวลาในการทำรายการโดยทั่วไป: 30 วินาที - 2 นาที
การใช้งาน
ขั้นตอนที่ 1: สร้าง Alipay Source
- cURL
- Node.js
- PHP
- Python
- Ruby
- Go
- Java
- C#
curl https://api.omise.co/sources \
-u skey_test_YOUR_SECRET_KEY: \
-d "type=alipay" \
-d "amount=50000" \
-d "currency=THB"
const omise = require('omise')({
secretKey: 'skey_test_YOUR_SECRET_KEY'
});
const source = await omise.sources.create({
type: 'alipay',
amount: 50000, // THB 500.00
currency: 'THB'
});
<?php
$source = OmiseSource::create(array(
'type' => 'alipay',
'amount' => 50000,
'currency' => 'THB'
));
?>
import omise
omise.api_secret = 'skey_test_YOUR_SECRET_KEY'
source = omise.Source.create(
type='alipay',
amount=50000,
currency='THB'
)
require 'omise'
Omise.api_key = 'skey_test_YOUR_SECRET_KEY'
source = Omise::Source.create({
type: 'alipay',
amount: 50000,
currency: 'THB'
})
source, err := client.Sources().Create(&operations.CreateSource{
Type: "alipay",
Amount: 50000,
Currency: "THB",
})
Source source = client.sources().create(new Source.CreateParams()
.type("alipay")
.amount(50000L)
.currency("THB"));
var source = await client.Sources.Create(new CreateSourceRequest
{
Type = "alipay",
Amount = 50000,
Currency = "THB"
});
ผลลัพธ์:
{
"object": "source",
"id": "src_test_5rt6s9vah5lkvi1rh9c",
"type": "alipay",
"flow": "redirect",
"amount": 50000,
"currency": "THB"
}
ขั้นตอนที่ 2: สร้าง Charge
curl https://api.omise.co/charges \
-u skey_test_YOUR_SECRET_KEY: \
-d "amount=50000" \
-d "currency=THB" \
-d "source=src_test_5rt6s9vah5lkvi1rh9c" \
-d "return_uri=https://yourdomain.com/payment/callback"
ขั้นตอนที่ 3: Redirect ลูกค้า
app.post('/checkout/alipay', async (req, res) => {
try {
const { amount, currency, order_id } = req.body;
// Validate currency
const supportedCurrencies = ['THB', 'SGD', 'MYR', 'JPY'];
if (!supportedCurrencies.includes(currency)) {
return res.status(400).json({
error: 'Alipay supports THB, SGD, MYR, and JPY only'
});
}
// Validate amount by currency
const limits = {
THB: { min: 2000, max: 15000000 },
SGD: { min: 100, max: 2000000 },
MYR: { min: 100, max: 3000000 },
JPY: { min: 100, max: 600000000 }
};
const { min, max } = limits[currency];
if (amount < min || amount > max) {
return res.status(400).json({
error: `Amount must be between ${min} and ${max} ${currency}`
});
}
// Create source
const source = await omise.sources.create({
type: 'alipay',
amount: amount,
currency: currency
});
// Create 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
}
});
// Redirect to Alipay
res.redirect(charge.authorize_uri);
} catch (error) {
console.error('Alipay error:', error);
res.status(500).json({ error: error.message });
}
});
ขั้นตอนที่ 4: จัดการ Return
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 === 'alipay') {
const charge = event.data;
if (charge.status === 'successful') {
processOrder(charge.metadata.order_id);
} 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());
// Amount limits by currency
const LIMITS = {
THB: { min: 2000, max: 15000000 },
SGD: { min: 100, max: 2000000 },
MYR: { min: 100, max: 3000000 },
JPY: { min: 100, max: 600000000 }
};
app.post('/checkout/alipay', async (req, res) => {
try {
const { amount, currency, order_id } = req.body;
// Validate currency
if (!['THB', 'SGD', 'MYR', 'JPY'].includes(currency)) {
return res.status(400).json({
error: 'Alipay only supports THB, SGD, MYR, and JPY'
});
}
// Validate amount
const { min, max } = LIMITS[currency];
if (amount < min || amount > max) {
return res.status(400).json({
error: `Amount must be between ${min} and ${max} ${currency}`
});
}
// Create source
const source = await omise.sources.create({
type: 'alipay',
amount: amount,
currency: currency
});
// Create 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,
payment_method: 'alipay'
}
});
// Return authorization URL
res.json({
authorize_uri: charge.authorize_uri,
charge_id: charge.id
});
} catch (error) {
console.error('Alipay error:', error);
res.status(500).json({ error: error.message });
}
});
// Callback handler
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 handler
app.post('/webhooks/omise', (req, res) => {
const event = req.body;
if (event.key === 'charge.complete') {
const charge = event.data;
if (charge.source.type === 'alipay') {
if (charge.status === 'successful') {
updateOrderStatus(charge.metadata.order_id, 'paid');
sendConfirmation(charge.metadata.customer_email);
} else {
updateOrderStatus(charge.metadata.order_id, 'failed');
}
}
}
res.sendStatus(200);
});
app.listen(3000);
การรองรับการคืนเงิน
Alipay รองรับการคืนเงินเต็มจำนวนและบางส่วน ภายใน 90 วัน:
// Full refund
const fullRefund = await omise.charges.refund('chrg_test_...', {
amount: 50000
});
// Partial refund
const partialRefund = await omise.charges.refund('chrg_test_...', {
amount: 25000 // Half refund
});
การคืนเงินรองรับภายใน 90 วันหลังจากทำรายการเดิม อนุญาตทั้งการคืนเงินเต็มจำนวนและบางส่วน
ระยะเวลาและนโยบายการคืนเงินอาจมีการเปลี่ยนแปลง ตรวจสอ บความสามารถในการคืนเงินปัจจุบันผ่านเอกสาร Omise API หรือแดชบอร์ดผู้ค้าของคุณเสมอ
ปัญหาทั่วไปและการแก้ไข
ปัญหา: ลูกค้าไม่มีแอป Alipay
สาเหตุ: ลูกค้าเลือก Alipay แต่ไม่มีแอป (ส่วนใหญ่เป็นลูกค้าชาวจีน)
วิธีแก้:
- ระบุอย่างชัดเจนว่า Alipay เป็นสำหรับลูกค้าชาวจีน
- จัดหาลิงก์ดาวน์โหลดแอป
- แสดงตัวเลือก QR code สำหรับผู้ใช้เดสก์ท็อป
function checkAlipayAvailability() {
// Detect if user is likely from China
const userLocale = navigator.language;
const isChineseLocale = /^zh/i.test(userLocale);
if (!isChineseLocale) {
showWarning('Alipay is primarily for customers in China. Do you have an Alipay account?');
}
}
ปัญหา: ความสับสนเรื่องการแปลงสกุลเงิน
สาเหตุ: ลูกค้าเห็นจำนวนเงินที่ต่างกันในแอป Alipay ของพวกเขา
วิธีแก้:
// Display amount in customer's currency
function displayAlipayAmount(amount, currency) {
return `
<div class="payment-amount">
<p>คุณจะจ่าย: ${amount / 100} ${currency}</p>
<p class="note">จำนวนเงินจะถูกแปลงเป็น CNY ในแอป Alipay ที่อัตราแลกเปลี่ยนปัจจุบัน</p>
</div>
`;
}
ปัญหา: หมดเวลาการชำระเงิน
วิธีแก้:
const TIMEOUT = 15 * 60 * 1000; // 15 minutes
setTimeout(() => {
if (!paymentConfirmed) {
showTimeoutMessage();
allowRetry();
}
}, TIMEOUT);