จำลองความล้มเหลวและสถานการณ์ข้อผ ิดพลาด
คำแนะนำที่ครอบคลุมสำหรับการทดสอบสถานการณ์ข้อผิดพลาด, โหมดความล้มเหลว และกรณีพิเศษในการผสานรวม Omise ของคุณ เรียนรู้วิธีจำลองความล้มเหลวของเครือข่าย, การปฏิเสธการชำระเงิน, ข้อผิดพลาด API และการใช้ลอจิกการลองใหม่ที่เหมาะสม
ภาพรวม
การทดสอบสถานการณ์ความล้มเหลวเป็นสิ่งสำคัญสำหรับการสร้างการผสานรวมการชำระเงินที่แข็งแกร่ง แอปพลิเคชันของคุณต้องจัดการข้อผิดพลาดอย่างสวยงาม, ให้ข้อมูลป้อนกลับที่ชัดเจนแก่ผู้ใช้ และใช้ลอจิกการลองใหม่ที่เหมาะสม คำแนะนำนี้ครอบคลุมสถานการณ์ความล้มเหลวทั้งหมดที่คุณควรทดสอบก่อนไปใช้งานจริง
เหตุใดจึงต้องทดสอบความล้มเหลว
- ประสบการณ์ผู้ใช้: ให้ข้อความแสดงข้อผิดพลาดที่ชัดเจนและเป็นประโยชน์
- ความสมบูรณ์ของข้อมูล: ป้องกันประจำเงินที่ซ้ำกันและการเสียหายของข้อมูล
- ความน่าเชื่อถือของระบบ: จัดการปัญหาเครือข่ายและการหมดเวลาอย่างสง่างาม
- ความปลอดภัย: ตรวจจับและป้องกันธุรกรรมปลอมปลน
- ความปฏิบัติตาม: ปฏิบัติตามข้อกำหนดของอุตสาหกรรมการชำระเงิน
- ความต่อเนื่องทางธุรกิจ: รักษาการดำเนินการระหว่างการหยุดชั่วคราว
ประเภทของความล้มเหลวที่ต้องทดสอบ
- การปฏิเสธการชำระเงิน: การปฏิเสธบัตร, เงินไม่เพียงพอ, การตรวจจับปลอมปลน
- ความล้มเหลวของเครือข่าย: ข้อผิดพลาดการเชื่อมต่อ, การหมดเวลา, ความล้มเหลว DNS
- ข้อผิดพลาด API: คำขอไม่ถูกต้อง, ข้อผิดพลาดการตรวจสอบสิทธิ์, ขีดจำกัดอัตรา
- ความล้มเหลว 3D Secure: ล้มเหลวการตรวจสอบสิทธิ์, การหมดเวลา, ยกเลิก
- ความล้มเหลวของเวบฮุก: ความล้มเหลวในการจัดส่ง, ข้อผิดพลาดการตรวจสอบลายเซ็น
- ข้อผิดพลาดระบบ: ข้อผิดพลาดของเซิร์ฟเวอร์, ความล้มเหลวของฐานข้อมูล, ปัญหาการผสานรวม
สถานการณ์การปฏิเสธการชำระเงิน
การทดสอบเหตุผลการปฏิเสธเฉพาะ
ใช้บัตรทดสอบเหล่านี้เพื่อจำลองสถานการณ์การปฏิเสธเฉพาะ:
// JavaScript - การทดสอบสถานการณ์การปฏิเสธทั้งหมด
const Omise = require('omise')({
secretKey: 'skey_test_xxxxxxxxxx'
});
const declineTestCases = [
{
card: '4000000000000101',
expectedCode: 'insufficient_funds',
description: 'เงินไม่เพียงพอ'
},
{
card: '4000000000000119',
expectedCode: 'processing_error',
description: 'ข้อผิดพลาดในการประมวลผล'
},
{
card: '4000000000000127',
expectedCode: 'lost_card',
description: 'บัตรหาย'
},
{
card: '4000000000000135',
expectedCode: 'stolen_card',
description: 'บัตรถูกขโมย'
},
{
card: '4000000000000143',
expectedCode: 'expired_card',
description: 'บัตรหมดอายุ'
},
{
card: '4000000000000150',
expectedCode: 'invalid_security_code',
description: 'CVV ไม่ถูกต้อง'
},
{
card: '4000000000000192',
expectedCode: 'failed_fraud_check',
description: 'ล้มเหลวการตรวจจับปลอมปลน'
},
{
card: '4000000000000234',
expectedCode: 'payment_rejected',
description: 'ปฏิเสธการชำระเงิน'
}
];
async function testAllDeclines() {
for (const testCase of declineTestCases) {
try {
console.log(`Testing: ${testCase.description}`);
const token = await Omise.tokens.create({
card: {
name: 'Test User',
number: testCase.card,
expiration_month: 12,
expiration_year: 2026,
security_code: '123'
}
});
const charge = await Omise.charges.create({
amount: 100000,
currency: 'THB',
card: token.id
});
// ตรวจสอบการปฏิเสธที่คาดหวัง
if (charge.status === 'failed') {
console.log(`✓ ${testCase.description}: ${charge.failure_code}`);
// ยืนยันรหัสความล้มเหลวที่คาดหวัง
if (charge.failure_code === testCase.expectedCode) {
console.log(` รหัสที่คาดหวังตรงกัน: ${testCase.expectedCode}`);
} else {
console.error(` คาดหวัง: ${testCase.expectedCode}, ได้รับ: ${charge.failure_code}`);
}
} else {
console.error(`✗ คาดหวังประจำที่ล้มเหลว, ได้รับ: ${charge.status}`);
}
} catch (error) {
console.error(`✗ ${testCase.description} error:`, error.message);
}
}
}
testAllDeclines();
การจัดการข้อความการปฏิเสธ
ให้ข้อความแสดงข้อผิดพลาดที่เป็นมิตรกับผู้ใช้:
# Ruby - การแปลงรหัสความล้มเหลวเป็นข้อความผู้ใช้
require 'omise'
Omise.api_key = 'skey_test_xxxxxxxxxx'
class PaymentErrorHandler
DECLINE_MESSAGES = {
'insufficient_funds' => 'บัตรของคุณมีเงินไม่เพียงพอ โปรดใช้วิธีการชำระเงินอื่น',
'processing_error' => 'ไม่สามารถประมวลผลการชำระเงินของคุณ โปรดลองอีกครั้ง',
'lost_card' => 'บัตรนี้ได้รับการรายงานว่าหาย โปรดใช้บัตรอื่น',
'stolen_card' => 'บัตรนี้ไม่สามารถใช้ได้ โปรดติดต่อธนาคา รของคุณ',
'expired_card' => 'บัตรของคุณหมดอายุแล้ว โปรดอัปเดตข้อมูลการชำระเงินของคุณ',
'invalid_security_code' => 'รหัสความปลอดภัย (CVV) ไม่ถูกต้อง',
'invalid_card_number' => 'เลขบัตรไม่ถูกต้อง โปรดตรวจสอบและลองอีกครั้ง',
'invalid_expiry_date' => 'วันหมดอายุไม่ถูกต้อง โปรดตรวจสอบและลองอีกครั้ง',
'transaction_not_permitted' => 'ธุรกรรมนี้ไม่อนุญาตสำหรับบัตรของคุณ',
'failed_fraud_check' => 'การชำระเงินปฏิเสธเพื่อเหตุผลความปลอดภัย',
'payment_rejected' => 'การชำระเงินปฏิเสธ โปรดลองวิธีการชำระเงินอื่น',
'card_restricted' => 'บัตรของคุณมีข้อจำกัดที่ป้องกันการชำระเงินนี้',
'exceeds_withdrawal_limit' => 'จำนวนเงินเกินขีดจำกัดของบัตรของคุณ',
'issuer_unavailable' => 'ผู้ออกบัตรไม่พร้อมชั่วคราว โปรดลองอีกครั้งในภายหลัง'
}.freeze
def self.get_user_message(failure_code)
DECLINE_MESSAGES[failure_code] || '