ข้ามไปยังเนื้อหาหลัก
เวอร์ชัน: ล่าสุด

Sources API

ภาพรวม

Sources API ช่วยให้คุณสามารถรับวิธีการชำระเงินทางเลือกนอกเหนือจากบัตรเครดิต Sources แทนช่องทางการชำระเงิน เช่น PromptPay QR codes, mobile banking, internet banking, แผนผ่อนชำระ และอื่น ๆ

Sources คืออะไร?

Sources คือ payment method objects ที่แทน:

  • PromptPay QR codes - การชำระเงินแบบ QR แบบเรียลไทม์
  • Mobile banking - การ redirect การชำระเงินในแอป (SCB Easy, Krungthai Next ฯลฯ)
  • Internet banking - การโอนเงินผ่านธนาคารออนไลน์
  • Convenience stores - การชำระเงินด้วยเงินสดที่ 7-Eleven, FamilyMart ฯลฯ
  • Installment plans - ตัวเลือกการผ่อนชำระ
  • E-wallets - TrueMoney, Rabbit LINE Pay ฯลฯ

คุณสมบัติหลัก

รองรับวิธีการชำระเงินหลากหลาย

  • การชำระเงินผ่าน QR - PromptPay, Alipay, WeChat Pay
  • การโอนเงินผ่านธนาคาร - Mobile และ internet banking
  • ผ่อนชำระ - แผนผ่อนชำระดอกเบี้ย 0%
  • การชำระเงินด้วยเงินสด - การชำระเงินที่ร้านสะดวกซื้อ
  • E-wallets - การเชื่อมต่อกระเป๋าเงินดิจิทัล

ขั้นตอนการทำงานที่ยืดหยุ่น

  • แบบ Redirect - ลูกค้า redirect เพื่อทำการชำระเงินให้เสร็จสมบูรณ์
  • แสดง QR code - แสดง QR code ให้ลูกค้าสแกน
  • การแจ้งเตือนผ่าน Webhook - การอัปเดตสถานะการชำระเงินแบบเรียลไทม์
  • การประมวลผลแบบ Asynchronous - การชำระเงินเสร็จสมบูรณ์นอกเว็บไซต์ของคุณ

การรองรับภูมิภาค

  • ประเทศไทย - PromptPay, SCB, Krungthai, BAY, BBL ฯลฯ
  • มาเลเซีย - FPX, Boost, GrabPay, Touch 'n Go
  • สิงคโปร์ - PayNow, GrabPay
  • ระหว่างประเทศ - Alipay, WeChat Pay

Sources ทำงานอย่างไร

ขั้นตอนมาตรฐาน

┌─────────┐         ┌─────────┐         ┌─────────┐         ┌─────────┐
│ เซิร์ฟเวอร์ │ │ Omise │ │ ผู้ให้บริการ │ │ ลูกค้า │
│ ของคุณ │ │ API │ │ การชำระเงิน │ │ │
└────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘
│ │ │ │
│ 1. สร้าง source │ │ │
├──────────────────>│ │ │
│ │ │ │
│ 2. ส่งกลับ source │ │ │
│ (พร้อม QR/URL) │ │ │
│<──────────────────┤ │ │
│ │ │ │
│ 3. สร้าง charge │ │ │
├──────────────────>│ │ │
│ │ │ │
│ 4. ส่งกลับ charge │ │ │
│ (status:pending) │ │
│<──────────────────┤ │ │
│ │ │ │
│ 5. แสดง QR │ │ │
│ หรือ redirect │ │ │
├──────────────────────────────────────────────────────────>│
│ │ │ │
│ │ │ 6. ลูกค้าชำระเงิน │
│ │ │<──────────────────┤
│ │ │ │
│ │ 7. แจ้งเตือน Webhook │ │
│<──────────────────┤ │ │
│ │ │ │
│ 8. แสดงผลสำเร็จ │ │ │
├──────────────────────────────────────────────────────────>│
│ │ │ │

ขั้นตอนการดำเนินการ

  1. สร้าง source - ระบุประเภทวิธีการชำระเงินและจำนวนเงิน
  2. สร้าง charge - ใช้ source ID เพื่อสร้าง charge (status: pending)
  3. แสดง UI การชำระเงิน - แสดง QR code หรือ redirect ลูกค้า
  4. รอ webhook - ลูกค้าทำการชำระเงินเสร็จสมบูรณ์แบบ asynchronous
  5. ตรวจสอบสถานะ - ตรวจสอบสถานะ charge ผ่าน webhook หรือ API
  6. ดำเนินการคำสั่งซื้อ - ประมวลผลคำสั่งซื้อหลังจากการชำระเงินสำเร็จ

ประเภท Source

การชำระเงินแบบ QR

ประเภทคำอธิบายภูมิภาค
promptpayการชำระเงินผ่าน QR แห่งชาติของไทยไทย
alipayE-wallet ชั้นนำของจีนระหว่างประเทศ
wechat_payWeChat Pay QRระหว่างประเทศ
paynowการชำระเงินผ่าน QR ของสิงคโปร์สิงคโปร์

Mobile Banking

ประเภทคำอธิบายภูมิภาค
mobile_banking_scbแอป SCB Easyไทย
mobile_banking_kbankแอป K PLUSไทย
mobile_banking_bblBangkok Bank Mobileไทย
mobile_banking_bayKrungsri Mobileไทย
mobile_banking_ktbแอป Krungthai NEXTไทย

Internet Banking

ประเภทคำอธิบายภูมิภาค
internet_banking_scbSCB online bankingไทย
internet_banking_bblBangkok Bank onlineไทย
internet_banking_bayKrungsri onlineไทย
fpxOnline banking ของมาเลเซียมาเลเซีย

วิธีการชำระเงินอื่น ๆ

ประเภทคำอธิบายภูมิภาค
truemoneyTrueMoney Walletไทย
rabbit_linepayRabbit LINE Payไทย
installment_bayผ่อนชำระกรุงศรีไทย
installment_kbankผ่อนชำระกสิกรไทยไทย
econtextการชำระเงินที่ร้านสะดวกซื้อญี่ปุ่น

วงจรชีวิตของ Source

สถานะ

สถานะคำอธิบายสถานะ Charge
pendingสร้าง source แล้ว รอการชำระเงินpending
successfulการชำระเงินเสร็จสมบูรณ์successful
failedการชำระเงินล้มเหลวหรือถูกปฏิเสธfailed
expiredหมดเวลาการชำระเงินexpired

กฎการหมดอายุ

วิธีการชำระเงินที่แตกต่างกันมีเวลาหมดอายุเริ่มต้นที่แตกต่างกัน:

การตรวจสอบเวลาหมดอายุ

เวลาหมดอายุที่ระบุด้านล่างอ้างอิงจากเอกสารที่มีอยู่และอาจแตกต่างกัน สำหรับเวลาหมดอายุที่แม่นยำและเป็นปัจจุบันที่สุดสำหรับวิธีการชำระเงินเฉพาะของคุณ โปรดดูเอกสารวิธีการชำระเงินแต่ละรายการหรือติดต่อฝ่ายสนับสนุน Omise

วิธีการชำระเงินการหมดอายุเริ่มต้นการหมดอายุกำหนดเอง
PromptPay24 ชั่วโมงกำหนดเองได้ผ่าน expires_in
Mobile Banking (SCB/KBANK/BBL/BAY/KTB)15-30 นาที*กำหนดเองได้ผ่าน expires_in
Internet Banking (SCB/BBL/BAY)15-30 นาที*กำหนดเองได้ผ่าน expires_in
FPX (มาเลเซีย)30 นาที*กำหนดเองได้ผ่าน expires_in
PayNow (สิงคโปร์)15-30 นาที*กำหนดเองได้ผ่าน expires_in
Alipay15-30 นาที*กำหนดเองได้ผ่าน expires_in
WeChat Pay15-30 นาที*กำหนดเองได้ผ่าน expires_in
TrueMoney Wallet15-30 นาที*กำหนดเองได้ผ่าน expires_in
Rabbit LINE Pay15-30 นาที*กำหนดเองได้ผ่าน expires_in
GrabPay15-30 นาที*กำหนดเองได้ผ่าน expires_in
Boost15-30 นาที*กำหนดเองได้ผ่าน expires_in
Touch 'n Go15-30 นาที*กำหนดเองได้ผ่าน expires_in
แผนผ่อนชำระ (BAY/KBANK)24-48 ชั่วโมง*กำหนดเองได้ผ่าน expires_in
ร้านสะดวกซื้อ (ญี่ปุ่น)7 วัน*กำหนดเองได้ผ่าน expires_in

*ตรวจสอบกับเอกสารวิธีการชำระเงินเฉพาะหรือฝ่ายสนับสนุน Omise สำหรับค่าที่แน่นอน

การตั้งค่าการหมดอายุกำหนดเอง:

const source = await omise.sources.create({
type: 'promptpay',
amount: 100000,
currency: 'thb',
expires_in: 1800 // 30 นาที (เป็นวินาที)
});

แนวทางปฏิบัติที่ดีที่สุด:

  • ตรวจสอบเอกสารวิธีการชำระเงินแต่ละรายการสำหรับเวลาหมดอายุที่แนะนำ
  • การหมดอายุที่สั้นกว่า (5-15 นาที) สำหรับการชำระเงินผ่าน QR เพื่อป้องกัน QR codes ที่หมดอายุ
  • การหมดอายุที่ยาวกว่า (24-48 ชั่วโมง) สำหรับการโอนเงินผ่านธนาคารเพื่อให้มีเวลาประมวลผล
  • จัดการ webhook events source.expired เสมอเพื่ออัปเดตสถานะคำสั่งซื้อ

API Endpoints

เมธอดEndpointคำอธิบาย
POST/sourcesสร้าง source ใหม่
GET/sources/:idดึงข้อมูล source

เริ่มต้นอย่างรวดเร็ว

ตัวอย่างการชำระเงินผ่าน PromptPay QR

// 1. สร้าง PromptPay source
const source = await omise.sources.create({
type: 'promptpay',
amount: 100000,
currency: 'thb'
});

// 2. สร้าง charge ด้วย source
const charge = await omise.charges.create({
amount: 100000,
currency: 'thb',
source: source.id,
return_uri: 'https://example.com/payment/complete'
});

// 3. แสดง QR code ให้ลูกค้า
const qrCodeUrl = charge.source.scannable_code.image.download_uri;
console.log('แสดง QR code:', qrCodeUrl);

// 4. รอการแจ้งเตือน webhook
// Webhook event: charge.complete
// ตรวจสอบว่าสถานะ charge เปลี่ยนเป็น "successful"

ตัวอย่าง Mobile Banking

// 1. สร้าง mobile banking source
const source = await omise.sources.create({
type: 'mobile_banking_scb',
amount: 50000,
currency: 'thb'
});

// 2. สร้าง charge
const charge = await omise.charges.create({
amount: 50000,
currency: 'thb',
source: source.id,
return_uri: 'https://example.com/payment/complete'
});

// 3. Redirect ลูกค้าไปยัง authorize_uri
const redirectUrl = charge.authorize_uri;
// Redirect ลูกค้าไปยัง URL นี้
window.location.href = redirectUrl;

// 4. ลูกค้าทำการชำระเงินในแอปธนาคาร
// 5. ลูกค้าถูก redirect กลับไปยัง return_uri
// 6. Webhook ถูกส่งเมื่อการชำระเงินเสร็จสมบูรณ์

ขั้นตอนการชำระเงิน

ขั้นตอน QR Code (PromptPay, Alipay, WeChat Pay)

  1. สร้าง source -> สร้าง charge
  2. แสดง QR code ให้ลูกค้า
  3. ลูกค้าสแกนด้วยแอปมือถือ
  4. ลูกค้ายืนยันการชำระเงินในแอป
  5. การแจ้งเตือน webhook ถูกส่ง
  6. อัปเดตสถานะคำสั่งซื้อ

ขั้นตอน Redirect (Mobile Banking, Internet Banking)

  1. สร้าง source -> สร้าง charge
  2. Redirect ลูกค้าไปยัง authorize_uri
  3. ลูกค้าทำการชำระเงินให้เสร็จสมบูรณ์
  4. ลูกค้าถูก redirect ไปยัง return_uri
  5. การแจ้งเตือน webhook ถูกส่ง
  6. ตรวจสอบสถานะการชำระเงิน

ขั้นตอน Offline (ร้านสะดวกซื้อ)

  1. สร้าง source -> สร้าง charge
  2. แสดงรหัสการชำระเงินให้ลูกค้า
  3. ลูกค้าชำระเงินที่ร้านสะดวกซื้อ
  4. การแจ้งเตือน webhook ถูกส่ง (ชั่วโมง/วันหลังจากนั้น)
  5. ดำเนินการคำสั่งซื้อ

กรณีการใช้งานทั่วไป

การชำระเงินครั้งเดียว

const source = await omise.sources.create({ type: 'promptpay', amount: 100000, currency: 'thb' });
const charge = await omise.charges.create({ amount: 100000, currency: 'thb', source: source.id });

การชำระเงินแบบผ่อนชำระ

const source = await omise.sources.create({
type: 'installment_kbank',
amount: 300000,
currency: 'thb',
installment_term: 6 // 6 เดือน
});
const charge = await omise.charges.create({ amount: 300000, currency: 'thb', source: source.id });

การชำระเงินที่ร้านสะดวกซื้อ

const source = await omise.sources.create({
type: 'econtext',
amount: 50000,
currency: 'jpy',
name: 'TARO YAMADA',
email: 'taro@example.com',
phone_number: '+81312345678'
});
const charge = await omise.charges.create({ amount: 50000, currency: 'jpy', source: source.id });

แนวทางปฏิบัติที่ดีที่สุด

ควรทำ

  • ตั้งค่า return_uri สำหรับการชำระเงินแบบ redirect
  • ใช้งาน webhooks สำหรับการแจ้งเตือนแบบ asynchronous
  • แสดงคำแนะนำที่ชัดเจน สำหรับแต่ละวิธีการชำระเงิน
  • ตั้งค่าการหมดอายุที่เหมาะสม ตามประเภทการชำระเงิน
  • ตรวจสอบสถานะการชำระเงิน ผ่าน webhooks ไม่ใช่ polling
  • จัดการ timeouts อย่างเหมาะสม (ลูกค้าไม่ทำการชำระเงินให้เสร็จ)
  • ทดสอบแต่ละวิธีการชำระเงิน ก่อนใช้งานจริง
  • เก็บ source IDs ไว้สำหรับการติดตามและการสนับสนุน

ไม่ควรทำ

  • อย่า poll ตลอดเวลา (ใช้ webhooks)
  • อย่าคิดว่าการชำระเงินจะสำเร็จทันที (เป็นแบบ async)
  • อย่าข้าม return_uri (ลูกค้าต้องกลับมา)
  • อย่าละเลยการหมดอายุ (sources หมดอายุ)
  • อย่าผสมวิธีการชำระเงิน (หนึ่ง source = หนึ่งประเภทการชำระเงิน)
  • อย่าใช้ sources กับสกุลเงินที่ผิด (เฉพาะประเภท)

ข้อควรพิจารณาด้านความปลอดภัย

การตรวจสอบ Webhook

ตรวจสอบ webhook signatures เสมอเพื่อยืนยันความถูกต้อง:

const crypto = require('crypto');

function verifyWebhook(payload, signature, secret) {
const hmac = crypto.createHmac('sha256', secret);
hmac.update(payload);
const expectedSignature = hmac.digest('hex');
return signature === expectedSignature;
}

การตรวจสอบสถานะ

อย่าเชื่อ return_uri parameters เพียงอย่างเดียว ตรวจสอบสถานะ charge เสมอ:

// ลูกค้ากลับมาจากการชำระเงิน
app.get('/payment/complete', async (req, res) => {
const chargeId = req.query.charge_id;

// ตรวจสอบสถานะ charge จริง
const charge = await omise.charges.retrieve(chargeId);

if (charge.status === 'successful') {
// ยืนยันการชำระเงินแล้ว ดำเนินการคำสั่งซื้อ
} else {
// การชำระเงินยังไม่เสร็จสมบูรณ์ แสดงข้อผิดพลาด
}
});

การทดสอบ

โหมดทดสอบ

ประเภท source ทั้งหมดทำงานในโหมดทดสอบด้วย test secret key ของคุณ

การจำลองการชำระเงิน

ในโหมดทดสอบ คุณสามารถ:

  • สร้าง sources และ charges
  • รับ webhooks
  • ทดสอบขั้นตอน redirect
  • สร้าง test QR codes

ทดสอบ Webhooks

ใช้เครื่องมือทดสอบ webhook หรือ ngrok สำหรับการพัฒนาในเครื่อง:

ngrok http 3000
# ตั้งค่า webhook URL ใน Omise Dashboard

การจัดการข้อผิดพลาด

ข้อผิดพลาด source ที่พบบ่อย:

รหัสข้อผิดพลาดคำอธิบายวิธีแก้ไข
invalid_source_typeวิธีการชำระเงินไม่รองรับตรวจสอบประเภทที่มีสำหรับสกุลเงินของคุณ
amount_too_lowจำนวนเงินต่ำกว่าขั้นต่ำตรวจสอบจำนวนเงินขั้นต่ำสำหรับประเภทการชำระเงิน
currency_not_supportedสกุลเงินผิดตรวจสอบว่าประเภทการชำระเงินรองรับสกุลเงิน
expired_sourceSource หมดอายุสร้าง source ใหม่

API Reference

แหล่งข้อมูลที่เกี่ยวข้อง

คู่มือวิธีการชำระเงิน


ต้องการความช่วยเหลือ? ดู คู่มือวิธีการชำระเงิน หรือติดต่อ support@omise.co