Omise ทำงานอย่างไร
การทำความเข้าใจแนวคิดหลักของ Omise จะช่วยให้คุณสร้างการผูกรวมการชำระเงินที่ปลอดภัยและมีประสิทธิภาพ เรียนรู้เกี่ยวกับ tokens, charges, sources และกระบวนการชำระเงิน
ภาพรวม
Omise เป็น payment gateway ที่ได้รับการรับรอง PCI ที่ช่วยให้ธุรกิจสามารถรับการชำระเงินอย่างปลอดภัยโดยไม่ต้องจัดการข้อมูลบัตรที่ละเอียดอ่อนโดยตรง โดยใช้สถาปัตยกรรมแบบ token-based Omise ช่วยให้ข้อมูลบัตรไม่อยู่ในเซิร์ฟเวอร์ของคุณ ลดภาระการปฏิบัติตาม PCI ของคุณพร้อมรักษาความปลอดภัย
แนวคิดหลัก
1. สถาปัตยกรรม Payment Gateway
Omise อยู่ระหว่างแอปพลิเคชันของคุณและ payment processors โดยจัดการ:
- Tokenization: แปลงข้อมูลที่ละเอียดอ่อนเป็น tokens ที่ปลอดภัย
- Authorization: ตรวจสอบและอนุมัติการชำระเงิน
- Settlement: ย้ายเงินจากลูกค้าไปยังบัญชีของคุณ
- Reconciliation: ติดตามและรายงานธุรกรรมทั้งหมด
2. โมเดลสองเซิร์ฟเวอร์
Omise ใช้ API endpoints สองตัวที่แยกกันเพื่อความปลอดภัย:
Vault Server (vault.omise.co)
- วัตถุประสงค์: จัดการข้อมูลผู้ถือบัตรที่ละเอียดอ่อน
- ใช้กับ: Public keys
- การดำเนินการ: สร้าง tokens และ sources
- ความปลอดภัย: แยกข้อมูลบัตรจาก main API
API Server (api.omise.co)
- วัตถุประสงค์: จัดการการดำเนินการอื่นๆ ทั้งหมด
- ใช้กับ: Secret keys
- การดำเนินการ: สร้าง charges, refunds, transfers ฯลฯ
- ความปลอดภัย: ไม่เคยรับข้อมูลบัตรดิบ
การแยกนี้ช่วยให้แน่ใจว่าข้อมูลบัตรที่ละเอียดอ่อนไม่เคยถูกสัมผัสเซิร์ฟเวอร์ของคุณหรือ main API ซึ่งช่วยลดความต้องการการปฏิบัติตาม PCI ของคุณอย่างมาก
3. API Keys
Omise ใช้ API keys สามแบบ:
| Key Type | รูปแบบ | กรณีการใช้งาน | ปลอดภัยสำหรับ Client? |
|---|---|---|---|
| Public Key | pkey_test_... | Tokenization | ✅ ใช่ |
| Secret Key | skey_test_... | การดำเนินการทั้งหมด | ❌ ไม่ (server เท่านั้น) |
| Chain Key | ck_test_... | Sub-merchants | ❌ ไม่ (server เท่านั้น) |
เรียนรู้เพิ่มเติมเกี่ยวกับ authentication →
4. Payment Objects
Tokens
Token แสดงถึงวิธีการชำระเงิน (มักเป็นบัตร) และสามารถใช้ครั้งเดียวเพื่อสร้าง charge
คุณสมบัติ:
- ใช้ได้ครั้งเดียวเท่านั้น
- ใช้ได้นาน 30 นาทีหลังจากสร้าง
- มีข้อมูลบัตรที่ tokenize แล้ว
- สร้างด้วย public key
ตัวอย่าง:
{
"object": "token",
"id": "tokn_test_5xp6ca4dtzx5cskm9mk",
"used": false,
"card": {
"brand": "Visa",
"last_digits": "4242",
"expiration_month": 12,
"expiration_year": 2027
}
}
Charges
Charge แสดงถึงคำขอชำระเงินไปยังวิธีการชำระเงินของลูกค้า
คุณสมบัติ:
- สร้างด้วย token, source หรือ customer card
- สามารถอนุมัติ (captured ภายหลัง) หรือ captured ทันที
- รองรับ metadata สำหรับการติดตามแบบกำหนดเอง
- สร้าง transaction เมื่อสำเร็จ
ตัวอย่าง:
{
"object": "charge",
"id": "chrg_test_5xp6ccfmecft4zxrb7p",
"amount": 100000,
"currency": "thb",
"status": "successful",
"paid": true,
"authorized": true,
"captured": true
}
สถานะ Charge:
pending- รอการชำระเงิน (สำหรับวิธีการ async)successful- การชำระเงินเสร็จสมบูรณ์failed- การชำระเงินถูกปฏิเสธหรือล้มเหลวexpired- หน้าต่างการชำระเงินหมดอายุ (วิธีการ async)
Sources
Source แสดงถึงวิธีการชำระเงินทางเลือกเช่น PromptPay, mobile banking หรือรหัส QR
คุณสมบัติ:
- สร้างสำหรับวิธีการชำระเงินเฉพาะ
- สามารถใช้ครั้งเดียวหรือใช้ซ้ำได้
- มักมีคำแนะนำการชำระเงิน (รหัส QR, รายละเอียดธนาคาร)
- ต้องการการดำเนินการของลูกค้าเพื่อให้เสร็จสมบูรณ์
ตัวอย่าง:
{
"object": "source",
"id": "src_test_5xp6ccfmecft4zxrb7p",
"type": "promptpay",
"flow": "redirect",
"amount": 100000,
"currency": "thb",
"scannable_code": {
"image": {
"download_uri": "https://...",
"type": "qr_code"
}
}
}
Customers
Customer object เก็บวิธีการชำระเงินสำหรับ recurring charges
คุณสมบัติ:
- สามารถเก็บหลายบัตร
- เปิดใช้งาน subscription billing
- รองรับ metadata สำหรับการติดตามแบบกำหนดเอง
- บัตรที่แนบกับลูกค้าสามารถเรียกเก็บเงินซ้ำได้
ตัวอย่าง:
{
"object": "customer",
"id": "cust_test_5xp6ccfmecft4zxrb7p",
"email": "customer@example.com",
"description": "John Doe",
"cards": {
"total": 1,
"data": [...]
}
}
กระบวนการชำระเงิน
กระบวนการชำระเงินบัตรมาตรฐาน
นี่คือวิธีการทำงานของการชำระเงินบัตรทั่วไป:
ทีละขั้นตอน:
- ลูกค้ากรอกรายละเอียดบัตร บนหน้า checkout ของคุณ
- เบราว์เซอร์ส่งข้อมูลบัตร ไปยัง Omise Vault (ใช้ public key)
- Omise ส่งคืน token ที่แสดงถึงบัตร
- เบราว์เซอร์ส่ง token ไปยังเซิร์ฟเวอร์ของคุณ (ไม่ใช่ข้อมูลบัตร!)
- เซิร์ฟเวอร์ของคุณสร้าง charge โดยใช้ secret key + token
- Omise ประมวลผลการชำระเงิน กับธนาคาร
- ธนาคารอนุมัติ (หรือปฏิเสธ) การชำระเงิน
- Omise ส่งคืนผลลัพธ์ ไปยังเซิร์ฟเวอร์ของคุณ
- เซิร์ฟเวอร์ของคุณอัปเดตคำสั่งซื้อ และแสดงการยืนยัน
กระบวนการวิธีการชำระเงินทางเลือก
สำหรับวิธีการเช่น PromptPay หรือ mobile banking:
ความแตกต่างหลัก:
- สร้าง source แทน token
- ลูกค้าทำการชำระเงินให้เสร็จสมบูรณ์นอกแอปของคุณ
- คุณได้รับ webhook เมื่อการชำระเงินเสร็จสมบูรณ์
- การชำระเงินอาจหมดอายุหากไม่เสร็จสมบูรณ์ในเวลา
กระบวนการข้อมูลและความปลอดภัย
สิ่งที่อยู่อย่างปลอดภัย
หลักการความปลอดภัย:
- ✅ ข้อมูลบัตรไปยัง Omise Vault โดยตรง (ไม่ผ่านเซิร์ฟเวอร์ของคุณ)
- ✅ Tokens ใช้ครั้งเดียวและจำกัดเวลา
- ✅ Secret keys อยู่บนเซิร์ฟเวอร์ของคุณ
- ✅ การสื่อสารทั้งหมดผ่าน HTTPS
- ✅ โครงสร้างพื้นฐานที่ปฏิบัติตาม PCI
สิ่งที ่คุณควรเก็บ
คุณควรเก็บ:
- ✅ Charge IDs
- ✅ Customer IDs
- ✅ ข้อมูลคำสั่งซื้อ
- ✅ Metadata
- ❌ หมายเลขบัตร
- ❌ รหัส CVV
- ❌ รายละเอียดบัตรทั้งหมด
สภาพแวดล้อม
โหมดทดสอบ
- ธุรกรรมจำลอง
- ไม่มีเงินจริง
- บัตรและวิธีการชำระเงินทดสอบ
- Dashboard แยกต่างหาก
- API keys ที่มี prefix
_test_
โหมดจริง
- ธุรกรรมจริง
- ประมวลผลเงินจริง
- บัตรและวิธีการชำระเงินจริง
- Dashboard production
- API keys ที่ไม่มี prefix
_test_
เรียนรู้เกี่ยวกับโหมดทดสอบกับโหมดจริง →
FAQ
อะไรคือความแตกต่างระหว่าง token และ charge?
Token คือการแสดงที่ปลอดภัยของวิธีการชำระเงิน (เช่นบัตร) มันถูกสร้างขึ้นฝั่ง client และส่งไปยังเซิร์ฟเวอร์ของคุณ
Charge คือคำขอชำระเงินที่แท้จริง มันถูกสร้างขึ้นบนเซิร์ฟเวอร์ของคุณโดยใช้ token และมันประมวลผลเงินจากลูกค้าถึงคุณ
คิดว่ามันเป็น: Token = วิธีการชำระเงิน, Charge = คำขอชำระเงิน
ทำไมฉันไม่สามารถใช้ tokens หลายครั้งได้?
Tokens ใช้ครั้งเดียวเพื่อเหตุผลด้านความปลอดภัย หาก tokens สามารถใช้ซ้ำได้ token ที่ถูกบุกรุกอาจส่งผลให้เกิด charges หลายรายการที่ไม่ได้รับอนุญาต
สำหรับการชำระเงินที่เกิดขึ้นซ้ำ ให้สร้าง Customer object และแนบบัตรเข้ากับมัน จากนั้นคุณสามารถเรียกเก็บเงินจากลูกค้าหลายครั้งได้โดยไม่ต้องสร้าง tokens ใหม่
จะเกิดอะไรขึ้นหาก charge ล้มเหลว?
Charges ที่ล้มเหลวส่งคืนข้อผิดพลาดพร้อมรายละเอียดเกี่ยวกับสาเหตุที่การชำระเงินล้มเหลว:
- เงินไม่เพียงพอ
- หมายเลขบัตรไม่ถูกต้อง
- บัตรถูกปฏิเสธโดยผู้ออก
- บัตรหมดอายุ
Charge object จะมี status: "failed" และรวม failure_code และ failure_message ที่อธิบายเหตุผล
ฉันจะรู้ได้อย่างไรเมื่อการชำระเงิน async เสร็จสมบูรณ์?
สำหรับวิธีการชำระเงินทางเลือก (PromptPay, mobile banking ฯลฯ) ใช้ webhooks เพื่อรับการแจ้งเตือนเมื่อการชำระเงินเสร็จสมบูรณ์
ตั้งค่า webhook endpoint บนเซิร์ฟเวอร์ของคุณ จากนั้นกำหนดค่าใน Omise dashboard ของคุณ Omise จะ POST ข้อมูลเหตุการณ์ไปยัง endpoint ของคุณเมื่อสถานะการชำระเงินเปลี่ยนแปลง
ฉันสามารถ capture บางส่วนของ pre-authorized charge ได้หรือไม่?
ได้! คุณสามารถ capture น้อยกว่าจำนวนที่อนุมัติ:
// อนุมัติ ฿1,000
omise.charges.create({
amount: 100000,
currency: 'thb',
card: token,
capture: false
});
// Capture เฉพาะ ฿500
omise.charges.capture('chrg_123', {
capture_amount: 50000
});
จำนวนที่ไม่ได้ capture จะถูกปล่อยโดยอัตโนมัติ
อะไรคือความแตกต่างระหว่าง sources และ tokens?
- Tokens: ใช้สำหรับการชำระเงินบัตร สร้างฝั่ง client ใช้ครั้งเดียว
- Sources: ใช้สำหรับวิธีการชำระเงินทางเลือก (PromptPay, QR, banking) สามารถรวมคำแนะนำการชำระเงิน อาจต้องการการดำเนินการของลูกค้า
ทั้งสองแสดงถึงวิธีการชำระเงิน แต่ sources จัดการกระบวนการชำระเงินที่ซับซ้อนมากขึ้น
ทรัพยากรที่เกี่ยวข้อง
- คู่มือเริ่มต้นด่วน - สร้างการผูกรวมแรกของคุณ
- การ Authentication - ทำความเข้าใจ API keys
- วิธีการชำระเงิน - สำรวจตัวเลือกการชำระเงินทั้งหมด
- แนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัย - รักษาความปลอดภัยการผูกรวมของคุณ
พร้อมที่จะสร้างหรือไม่? เริ่มต้นด้วย คู่มือเริ่มต้นด่วน ของเรา หรือสำรวจ วิธีการชำระเงินทั้งหมด