การสร้าง Refunds
Refunds ช่วยให้คุณคืนเงินให้กับลูกค้าสำหรับธุรกรรมที่ charge สำเร็จแล้ว คู่มือนี้ครอบคลุมวิธีการสร้าง refunds เต็มจำนวนผ่านทั้ง API และ Dashboard
ภาพรวม
Refunds เป็นสิ่งจำเป็นสำหรับการจัดการการคืนสินค้า การยกเล ิก ข้อพิพาทของลูกค้า และสถานการณ์อื่นๆ ที่คุณต้องการกลับรายการการชำระเงิน เมื่อคุณสร้าง refund:
- จำนวน charge เต็มจำนวนจะถูกคืนให้กับวิธีการชำระเงินของลูกค้า
- เงินทุนมักจะถูกคืนภายใน 5-10 วันทำการ (แตกต่างกันตามผู้ออกบัตร)
- สถานะ refund สามารถติดตามได้ตลอดกระบวนการ
- ค่าธรรมเนียมธุรกรรมเดิมจะไม่ถูกคืนตามค่าเริ่มต้น
- Charge จะยังคงอยู่ในประวัติธุรกรรมของคุณด้วยสถานะ refunded
คุณสมบัติหลัก
- การประมวลผลทันที: Refunds ถูกประมวลผลทันทีผ่าน API
- วิธีการชำระเงินหลายแบบ: รองรับ refunds บัตรและวิธีการชำระเงินทางเลือก
- การติดตามสถานะ: การอัปเดตสถานะ refund แบบเรียลไทม์
- การ แจ้งเตือนอัตโนมัติ: การแจ้งเตือนลูกค้า (ถ้ามีการกำหนดค่า)
- รองรับ Metadata: เพิ่ม metadata แบบกำหนดเองเพื่อติดตามเหตุผลของ refund
- Webhook Events: รับการแจ้งเตือนเมื่อสถานะ refund เปลี่ยนแปลง
เมื่อใดควรใช้ Refunds
สถานการณ์ทั่วไปสำหรับการสร้าง refunds:
- การคืนสินค้า: ลูกค้าคืนสินค้า
- การยกเลิกบริการ: ลูกค้ายกเลิกบริการหรือการสมัครสมาชิก
- Charges ซ้ำซ้อน: การ charge ซ้ำโดยไม่ตั้งใจ
- ข้อพิพาทของลูกค้า: แก้ไขข้อร้องเรียนของลูกค้า
- สินค้าที่มีข้อบกพร่อง: รายการที่ไม่ตรงตามมาตรฐานคุณภาพ
- สินค้าหมด: ไม่สามารถดำเนินการตามคำสั่งซื้อได้
- การปรั บราคา: แก้ไขข้อผิดพลาดในการเรียกเก็บเงิน
การสร้าง Refunds ผ่าน API
Refund เต็มจำนวน
สร้าง refund เต็มจำนวนโดยไม่ระบุจำนวน:
- Node.js
- Python
- PHP
const omise = require('omise')({
secretKey: 'skey_test_123456789',
});
// Create a full refund
async function createFullRefund() {
try {
const refund = await omise.charges.createRefund('chrg_test_123456789', {
metadata: {
reason: 'Customer requested refund',
order_id: 'ORD-12345',
refund_type: 'product_return'
}
});
console.log('Refund created:', refund.id);
console.log('Amount refunded:', refund.amount);
console.log('Status:', refund.status);
console.log('Created at:', new Date(refund.created * 1000));
return refund;
} catch (error) {
console.error('Refund failed:', error.message);
throw error;
}
}
createFullRefund();
import omise
from datetime import datetime
omise.api_secret = 'skey_test_123456789'
def create_full_refund(charge_id):
"""Create a full refund for a charge"""
try:
refund = omise.Charge.retrieve(charge_id).refund(
metadata={
'reason': 'Customer requested refund',
'order_id': 'ORD-12345',
'refund_type': 'product_return'
}
)
print(f"Refund created: {refund.id}")
print(f"Amount refunded: {refund.amount}")
print(f"Status: {refund.status}")
return refund
except omise.errors.BaseError as e:
print(f"Refund failed: {str(e)}")
raise
create_full_refund('chrg_test_123456789')
<?php
require_once 'vendor/autoload.php';
define('OMISE_SECRET_KEY', 'skey_test_123456789');
function createFullRefund($chargeId) {
try {
$charge = OmiseCharge::retrieve($chargeId);
$refund = $charge->refund([
'metadata' => [
'reason' => 'Customer requested refund',
'order_id' => 'ORD-12345',
'refund_type' => 'product_return'
]
]);
echo "Refund created: {$refund['id']}\n";
echo "Amount refunded: {$refund['amount']}\n";
echo "Status: {$refund['status']}\n";
return $refund;
} catch (Exception $e) {
echo "Refund failed: {$e->getMessage()}\n";
throw $e;
}
}
createFullRefund('chrg_test_123456789');
?>
API Response
การสร้าง refund ที่สำเร็จจะคืนค่า:
{
"object": "refund",
"id": "rfnd_test_5xyz789abc",
"location": "/charges/chrg_test_123456789/refunds/rfnd_test_5xyz789abc",
"amount": 100000,
"currency": "thb",
"charge": "chrg_test_123456789",
"transaction": "trxn_test_5xyz789abc",
"created": "2024-01-15T10:30:00Z",
"status": "pending",
"metadata": {
"reason": "Customer requested refund",
"order_id": "ORD-12345",
"refund_type": "product_return"
}
}
การสร้าง Refunds ผ่าน Dashboard
กระบวนการทีละขั้นตอน
-
ไปที่ธุรกรรม
- ล็อกอินเข้า Omise Dashboard
- ไปที่ "Transactions" > "Charges"
-
ค้นหา Charge
- ใช้แถบค้นหาเพื่อค้นหา charge ID
- หรือกรองตามวันที่ จำนวน หรือสถานะ
- คลิกที่ charge เพื่อดูรายละเอียด
-
เริ่ม Refund
- คลิกปุ่ม "Refund"
- จำนวน charge เต็มจำนวนจะถูกกรอกล่วงหน้า
- คุณสามารถแก ้ไขจำนวนสำหรับ refunds บางส่วน
-
เพิ่มรายละเอียด Refund (ไม่บังคับ)
- ป้อนเหตุผลสำหรับ refund
- เพิ่มบันทึกภายใน
- เลือกหมวดหมู่ refund (การคืนสินค้า การยกเลิก ฯลฯ)
-
ยืนยัน Refund
- ตรวจสอบรายละเอียด refund
- คลิก "Confirm Refund"
- Refund จะถูกประมวลผลทันที
-
ติดตามสถานะ
- ดูสถานะ refund บนหน้ารายละเอียด charge
- ตรวจสอบส่วน "Refunds" สำหรับความพยายาม refund ทั้งหมด
- ติดตาม webhook events สำหรับการอัปเดตสถานะ
วงจรชีวิตสถานะ Refund
เข้าใจสถานะ refund:
Pending
- Refund ถูกสร้างและก ำลังถูกประมวลผล
- โดยทั่วไปใช้เวลาสองสามนาที
- ลูกค้ายังไม่ได้รับเงิน
Successful
- Refund เสร็จสมบูรณ์
- เงินทุนถูกส่งไปยังผู้ให้บริการการชำระเงิน
- ลูกค้าควรได้รับเงินภายใน 5-10 วันทำการ
Failed
- Refund ไม่สามารถประมวลผลได้
- เหตุผลทั่วไป: ยอดเงินไม่เพียงพอ บัตรไม่ถูกต้อง บัตรหมดอายุ
- ติดต่อฝ่ายสนับสนุนหากปัญหายังคงอยู่