Refunds API
ภาพรวม
Refunds API ช่วยให้คุณสามารถคืนเงินให้กับลูกค้าสำหรับการเรียกเก็บเงินด้วยบัตรเครดิต ออกการคืนเงินเต็มจำนวนหรือบางส่วน ติดตามประวัติการคืนเงิน และจัดการการคืนสินค้าได้อย่างราบรื่น
การคืนเงินคืออะไร
การคืนเงินคือออบเจ็กต์ที่แสดงถึงจำนวนเงินที ่คืนให้กับลูกค้า:
- การคืนเงินเต็มจำนวน - คืนเงินทั้งหมดของการเรียกเก็บเงิน
- การคืนเงินบางส่วน - คืนเงินบางส่วนของการเรียกเก็บเงิน
- การคืนเงินหลายครั้ง - ออกการคืนเงินบางส่วนหลายครั้งจนถึงจำนวนเงินเดิม
- การประมวลผลอัตโนมัติ - คืนเงินเข้าบัตรของลูกค้าโดยอัตโนมัติ
ฟีเจอร์หลัก
ตัวเลือกการคืนเงินที่ยืดหยุ่น
- เต็มจำนวนหรือบางส่วน - คืนเงินจำนวนใดก็ได้จนถึงจำนวนการเรียกเก็บเงินเดิม
- การคืนเ งินหลายครั้ง - แบ่งการคืนเงินออกเป็นหลายธุรกรรม
- รองรับ Metadata - เพิ่มข้อมูลที่กำหนดเองสำหรับการติดตาม
- การประมวลผลทันที - การคืนเงินได้รับการประมวลผลทันที
การจัดการที่ง่ายดาย
- แสดงรายการการคืนเงิน - ดูการคืนเงินทั้งหมดสำหรับการเรียกเก็บเงิน
- ติดตามสถานะ - ตรวจสอบการประมวลผลการคืนเงิน
- ค้นหาการคืนเงิน - ค้นหาธุรกรรมการคืนเงินที่ระบุ
- บันทึกตรวจสอบ - ประวัติการคืนเงินที่สมบูรณ์
การจัดการอัตโนมัติ
- ตรงไปยังบัตร - คืนเงินเข้าบัตรเดิมของลูกค้า
- ไม่ต้องให้ลูกค้าดำเนินการ - ประมวลผลอัตโนมัติ
- การจัดการค่าธรรมเนียม - จัดการค่าธรรมเนียมธุรกรรมตามนโยบาย
- สกุลเงินตรงกัน - สกุลเงินเดียวกับการเรียกเก็บเงินเดิม
การคืนเงินทำงานอย่างไร
ขั้นตอนมาตรฐาน
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Your │ │ Omise │ │ Customer│
│ Server │ │ API │ │ Bank │
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
│ 1. Create refund │ │
├──────────────────>│ │
│ │ │
│ 2. Return refund │ │
│<──────────────────┤ │
│ │ │
│ │ 3. Process refund │
│ ├──────────────────>│
│ │ │
│ │ 4. Funds returned │
│ │<──────────────────┤
│ │ │
│ 5. Webhook notify │ │
│<──────────────────┤ │
│ │ │
ไทม์ไลน์การคืนเงิน
- ทันที: สร้างการคืนเงินในระบบ Omise
- กำลังประมวลผล: ส่งไปยังเครือข่ายบัตร (ทันที)
- ลูกค้าเห็น: โดยปกติ 5-10 วันทำการ
- ส่ง Webhook: เมื่อการคืนเงินเสร็จสมบูรณ์
API Endpoints
| เมธอด | Endpoint | คำอธิบาย |
|---|---|---|
| POST | /charges/:id/refunds | สร้างการคืนเงินสำหรับการเรียกเก็บเงิน |
| GET | /refunds/:id | ดึงข้อมูลรายละเอียดการคืนเงิน |
| GET | /charges/:id/refunds | แสดงรายการการคืนเงินทั้งหมดสำหรับการเรียกเก็บเงิน |
เริ่มต้นอย่างรวดเร็ว
การคืนเงินเต็มจำนวน
// Refund entire charge
const refund = await omise.charges.refund('chrg_test_5xuy4w91xqz7d1w9u0t');
console.log('Refund created:', refund.id);
console.log('Amount:', refund.amount);
console.log('Status:', refund.status);
การคืนเงินบางส่วน
// Refund portion of charge
const refund = await omise.charges.refund('chrg_test_5xuy4w91xqz7d1w9u0t', {
amount: 50000 // Refund ฿500 of ฿1000 charge
});
console.log('Refunded:', refund.amount);
console.log('Original:', refund.charge.amount);
การคืนเงินบางส่วนหลายครั้ง
// Issue multiple refunds for same charge
const refund1 = await omise.charges.refund(chargeId, { amount: 30000 });
const refund2 = await omise.charges.refund(chargeId, { amount: 20000 });
// Check total refunded
const charge = await omise.charges.retrieve(chargeId);
console.log('Total refunded:', charge.refunded_amount);
console.log('Remaining:', charge.amount - charge.refunded_amount);
กรณีการใช้งานทั่วไป
การคืนสินค้า
// Customer returns product
const refund = await omise.charges.refund(chargeId, {
amount: productPrice,
metadata: {
reason: 'product_return',
order_id: 'ORDER-123',
return_tracking: 'TRACK-456'
}
});
การยกเลิกคำสั่งซื้อ
// Cancel order, full refund
const refund = await omise.charges.refund(chargeId, {
metadata: {
reason: 'order_cancelled',
cancelled_by: 'customer'
}
});
การคืนเงินบางส่วน (สินค้าชำรุด)
// Refund portion for damaged item
const refund = await omise.charges.refund(chargeId, {
amount: damageCompensation, // e.g., 30% of original
metadata: {
reason: 'partial_damage',
compensation_rate: 0.3
}
});
กฎการคืนเงิน
เวลา
- สามารถคืนเงินได้: ได้ตลอดเวลาหลังจากการเรียกเก็บเงินสำเร็จ
- ไม่สามารถคืนเงินได้: การเรียกเก็บเงินที่ล้มเหลวหรืออยู่ระหว่างดำเนินการ
- ระยะเวลา: ไม่มีข้อจำกัด (สามารถคืนเงินได้แม้หลายปีต่อมา)
จำนวนเงิน
- ขั้นต่ำ: 1 หน่วยในสกุลเงิน (1 สตางค์สำหรับบาท)
- สูงสุด: จำนวนเงินการเรียกเก็บเงินเดิมหักลบด้วยการคืนเงินก่อนหน้า
- หลายครั้ง: สามารถออกการคืนเงินบางส่วนหลายครั้งได้
- รวม: ไม่สามารถเกินจำนวนเงินการเรียกเก็บเงินเดิม
คุณสมบัติ
- ✅ การเรียกเก็บเงินที่สำเร็จ - สามารถคืนเงินได้
- ❌ การเรียกเก็บเงินที่รอดำเนินการ - ไม่สามารถคืนเงินได้
- ❌ การเรียกเก็บเงินที่ล้มเหลว - ไม่สามารถคืนเงินได้
- ✅ คืนเงินบางส่วนแล้ว - สามารถคืนเงินส่วนที่เหลือได้
ค่าธรรมเนียมธุรกรรม
การจัดการค่าธรรมเนียม
- การคืนเงินเต็มจำนวน: ค่าธรรมเนียมธุรกรรมอาจได้รับคืน (ขึ้นอยู่กับนโยบาย)
- การคืนเงินบางส่วน: โดยปกติค่าธรรมเนียมจะไม่ได้รับคืน
- ตรวจสอบนโยบาย: ติดต่อฝ่ายสนับสนุนสำหรับนโยบายค่าธรรมเนียมการคืนเงินของบัญชีของคุณ
แนวทางปฏิบัติที่ดีที่สุด
✅ แนะนำ
- เพิ่ม Metadata เพื่อบันทึกเหตุผลการคืนเงิน
- ตรวจสอบสถานะการเรียกเก็บเงิน ก่อนคืนเงิน (ต้องสำเร็จ)
- ตรวจสอบจำนวนเงินที่สามารถคืนได้ (จำนวนเงินเดิม - จำนวนที่คืนแล้ว)
- แจ้งให้ลูกค้าทราบ เมื่อออกการคืนเงิน
- ติดตาม ID การคืนเงิน ในระบบของคุณ
- ตั้งค่า Webhooks เพื่อรับการแจ้งเตือนการคืนเงิน
- จัดการข้อผิดพลาดอย่างเหมาะสม (เงินไม่เพียงพอ ฯลฯ)
❌ ไม่แนะนำ
- อย่าคืนเงินการเรียกเก็บเงินที่รอดำเนินการ (จะล้มเหลว)
- อย่าเกินจำนวนเงินเดิม (จะล้มเหลว)
- อย่าคาดหวังเครดิตทันที (ใช้เวลา 5-10 วัน)
- อย่าคืนเงินโดยไม่ม ีการยืนยัน (ตรวจสอบความถูกต้อง)
- อย่าข้ามการติดตามเหตุผล (ใช้ Metadata)
การทดสอบ
การคืนเงินในโหมดทดสอบ
// Test refunds work same as live
const refund = await omise.charges.refund('chrg_test_xxx', {
amount: 50000
});
// Check refund in test dashboard
console.log('Test refund:', refund.id);
การจัดการข้อผิดพลาด
ข้อผิดพลาดการคืนเงินทั่วไป:
| รหัสข้อผิดพลาด | คำอธิบาย | วิธีแก้ไข |
|---|---|---|
not_refundable | ไม่สามารถคืนเงินการเรียกเก็บเงินนี้ได้ | ตรวจสอบสถานะการเรียกเก็บเงิน |
insufficient_refundable_amount | จำนวนเงินเกินยอดคงเหลือที่สามารถคืนได้ | ตรวจสอบ refunded_amount |
invalid_amount | จำนวนเงินไม่ถูกต้อง | ตรวจสอบว่าจำนวนเงิน > 0 |
เอกสารอ้างอิง API
- สร้างการคืนเงิน - POST /charges/:id/refunds
- ดึงข้อมูลการคืนเงิน - GET /refunds/:id
ทรัพยากรที่เกี่ยวข้อง
ต้องการความช่วยเหลือ? ดูคู่มือการคืนเงินของเรา หรือติดต่อ support@omise.co