ข้ามไปยังเนื้อหาหลัก

การทดสอบ

คำแนะนำที่ครอบคลุมเพื่อทดสอบการรวม Omise โดยใช้โหมดทดสอบที่สนับสนุนวิธีการชำระเงินทั้งหมด การ์ดทดสอบ และสถานการณ์การชำระเงินที่จำลองแบบ

ภาพรวม

Omise มีสภาพแวดล้อมการทดสอบแบบเต็มรูปแบบที่ทำเลียนแบบพฤติกรรมของการผลิตโดยไม่ต้องประมวลผลธุรกรรมจริง โหมดทดสอบช่วยให้คุณตรวจสอบการรวม ทดสอบการจัดการข้อผิดพลาด และจำลองสถานการณ์การชำระเงินต่างๆ ก่อนที่จะไปยังการผลิต

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

  • คีย์ทดสอบที่เป็นอิสระ - คีย API เฉพาะสำหรับการทดสอบ
  • การ์ดทดสอบ - จำลองสถานการณ์ความสำเร็จ การปฏิเสธ และข้อผิดพลาด
  • วิธีการชำระเงินทั้งหมด - ทดสอบ QR วอลเล็ต ธนาคาร และอื่นๆ
  • การทดสอบ Webhook - รับ Webhook ทดสอบ
  • ไม่มีเงินจริง - สภาพแวดล้อมการทดสอบที่ปลอดภัย
  • ความเท่าเทียมกันของฟีเจอร์ที่สมบูรณ์ - สภาพแวดล้อมการทดสอบหล่อเลียนแบบการผลิต

โหมดทดสอบเทียบกับโหมดสด

คุณสมบัติโหมดทดสอบโหมดสด
คีย APIpkey_test_..., skey_test_...pkey_..., skey_...
เงินจริงไม่ใช่
การ์ดทดสอบยอมรับปฏิเสธ
การ์ดจริงปฏิเสธยอมรับ
Webhookมีการส่งมอบมีการส่งมอบ
แดชบอร์ดเฉพาะข้อมูลทดสอบธุรกรรมสด
สำคัญ

โหมดทดสอบและโหมดสดจะแยกออกจากกันอย่างสมบูรณ์ คีย์ทดสอบไม่สามารถประมวลผลธุรกรรมจริงได้ และคีย์สดไม่สามารถใช้ข้อมูลทดสอบได้

การรับคีย API ทดสอบ

จากแดชบอร์ด

  1. เข้าสู่ระบบ แดชบอร์ด Omise
  2. ใช้การสลับเพื่อเปลี่ยนเป็น โหมดทดสอบ
  3. ไปที่ การตั้งค่า → คีย API
  4. คัดลอกคีย์ทดสอบ:
    • คีย สาธารณะ: pkey_test_... (ใช้ไดโดยปลอดภัยฝั่งไคลเอนต์)
    • คีย ลับ: skey_test_... (เฉพาะฝั่งเซิร์ฟเวอร์ ไม่เปิดเผยเลย)

รูปแบบคีย์ทดสอบ

# คีย สาธารณะ (ใช้ได้อย่างปลอดภัยบนไคลเอนต์)
pkey_test_5rt6s9vah5lkvi1rh9c

# คีย ลับ (เฉพาะเซิร์ฟเวอร์เท่านั้น อย่าเปิดเผยเลย)
skey_test_5rt6s9vah5lkvi1rh9c
ความปลอดภัย

อย่าส่งคีย์ทดสอบไปยังที่เก็บข้อมูลสาธารณะหรือเปิดเผยต่อไคลเอนต์โดยสมบูรณ์ แม้ว่าคีย์ทดสอบจะไม่ประมวลผลเงินจริง แต่สามารถเข้าถึงข้อมูลการทดสอบและสร้างธุรกรรมทดสอบได้

การ์ดทดสอบ

สถานการณ์ความสำเร็จ

หมายเลขการ์ดแบรนด์3DSผลลัพธ์
4242 4242 4242 4242Visaไม่สำเร็จ
4242 4242 4242 4242Visaใช่สำเร็จ (3DS)
5555 5555 5555 4444Mastercardไม่สำเร็จ
5555 5555 5555 4444Mastercardใช่สำเร็จ (3DS)
3566 1111 1111 1111JCBไม่สำเร็จ
3782 822463 10005Amexไม่สำเร็จ

สถานการณ์การปฏิเสธ

หมายเลขการ์ดรหัสข้อผิดพลาดข้อความ
4000 0000 0000 0002payment_rejectedปฏิเสธการชำระเงิน
4000 0000 0000 0010insufficient_fundเงินไม่พอ
4000 0000 0000 0028stolen_or_lost_cardการ์ดหายไปหรือโดนลักขโมย
4000 0000 0000 9995failed_processingข้อผิดพลาดในการประมวลผล

การตรวจจับ欺่วง

หมายเลขการ์ดผลลัพธ์การเงินตรวจสอบพฤติกรรม
4000 0000 0000 0101ทำเครื่องหมายทำเครื่องหมายสำหรับการทบทวนด้วยตนเอง
4000 0000 0000 0044บล็อกธุรกรรมที่ถูกบล็อก

การทดสอบ 3D Secure

หมายเหตุ

การทดสอบ 3DS ต้องมีบัญชีทดสอบที่เปิดใช้งาน 3DS ติดต่อ support@omise.co เพื่อเปิดใช้งาน

หมายเลขการ์ดพฤติกรรม 3DSผลลัพธ์
4242 4242 4242 4242ไม่มีแรงเสียดทาน (ไม่มีการท้าทาย)สำเร็จ
4111 1111 1115 0002การลงทะเบียนล้มเหลวปฏิเสธ
4111 1111 1114 0003ความล้มเหลวในการพิสูจน์ตัวตนปฏิเสธ

การทดสอบการพิสูจน์ตัวตน 3DS:

  • วันหมดอายุในอนาคตจะทำงาน
  • ใช้รหัส CVV 3-4 หลักใดก็ได้
  • ใช้ชื่อผู้ถือการ์ดใดก็ได้

รายละเอียดการ์ดทดสอบ

// การ์ดที่สำเร็จ
{
name: "John Doe",
number: "4242424242424242",
expiration_month: 12,
expiration_year: 2027,
security_code: "123"
}

// การ์ดที่ปฏิเสธ
{
name: "Jane Smith",
number: "4000000000000002",
expiration_month: 12,
expiration_year: 2027,
security_code: "123"
}
วันหมดอายุ

การ์ดทดสอบสามารถใช้วันหมดอายุใดก็ได้ เราแนะนำให้ใช้วันที่ในอนาคตอย่างน้อย 1 ปี

การทดสอบวิธีการชำระเงิน

บัตรเครดิต/เดบิต

// ใช้ Omise.js
Omise.setPublicKey("pkey_test_YOUR_KEY");

Omise.createToken("card", {
name: "Test Card",
number: "4242424242424242",
expiration_month: 12,
expiration_year: 2027,
security_code: "123"
}, function(statusCode, response) {
if (statusCode === 200) {
console.log('Token created:', response.id);
// ใช้โทเค็นเพื่อสร้างการชำระเงิน
}
});

การชำระเงิน QR (PromptPay, PayNow เป็นต้น)

// สร้างแหล่งที่มา PromptPay ทดสอบ
const source = await omise.sources.create({
type: 'promptpay',
amount: 35000,
currency: 'THB'
});

// สร้างรหัส QR
console.log('QR Code URL:', source.scannable_code.image.download_uri);

// จำลองการชำระเงินในแดชบอร์ด
// 1. ไปที่แดชบอร์ด → การชำระเงิน
// 2. ค้นหาการชำระเงินที่รอดำเนินการ
// 3. คลิก [ทำให้สำเร็จ] หรือ [ทำให้ล้มเหลว]

กระเป๋าเงินดิจิทัล (TrueMoney, GrabPay เป็นต้น)

// สร้างแหล่งที่มากระเป๋าเงินทดสอบ
const source = await omise.sources.create({
type: 'truemoney',
amount: 50000,
currency: 'THB',
phone_number: '+66876543210' // สามารถใช้หมายเลขไทยในการทดสอบ
});

// จำลองในแดชบอร์ด
// แดชบอร์ด → การชำระเงิน → ทำให้สำเร็จ

การทำธนาคารมือถือ

// สร้างแหล่งที่มาธนาคารมือถือทดสอบ
const source = await omise.sources.create({
type: 'mobile_banking_kbank',
amount: 100000,
currency: 'THB'
});

// จำลองในแดชบอร์ด
// แดชบอร์ด → การชำระเงิน → ลำดับเหตุการณ์ → ทำให้สำเร็จ

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

ผ่านแดชบอร์ด

  1. เข้าสู่ระบบ แดชบอร์ดทดสอบ
  2. ตรวจสอบว่าเปิดใช้งาน โหมดทดสอบ
  3. ไปที่ การชำระเงิน
  4. ค้นหาการชำระเงินที่รอดำเนินการ
  5. คลิก ลำดับเหตุการณ์ ที่ด้านข้าง
  6. เลือก:
    • ทำให้สำเร็จ - จำลองการชำระเงินที่สำเร็จ
    • ทำให้ล้มเหลว - จำลองการล้มเหลวของการชำระเงิน

ผ่าน API (Webhook ทดสอบ)

// การชำระเงินจะเรียกใช้ webhook โดยอัตโนมัติ
// ตรวจสอบบันทึก webhook endpoint

app.post('/webhooks/omise', (req, res) => {
const event = req.body;

console.log('Test webhook received:', event.key);
console.log('Charge ID:', event.data.id);
console.log('Status:', event.data.status);

res.sendStatus(200);
});

การทดสอบ Webhook

การทดสอบโลกัลด้วย ngrok

# ติดตั้ง ngrok
npm install -g ngrok

# เริ่มเซิร์ฟเวอร์ของคุณ
node server.js # ทำงานบนพอร์ต 3000

# สร้างอุโมงค์
ngrok http 3000

# ผลลัพธ์:
# Forwarding https://abc123.ngrok.io -> http://localhost:3000

ตั้งค่า webhook ในแดชบอร์ด:

  1. คัดลอก ngrok HTTPS URL
  2. ไปที่ การตั้งค่า → Webhook
  3. เพิ่มเอนด์พอยต์: https://abc123.ngrok.io/webhooks/omise
  4. เลือกกิจกรรมทดสอบ
  5. บันทึก

การส่งมอบ Webhook ทดสอบ

// ตัวจัดการ webhook
app.post('/webhooks/omise', (req, res) => {
const event = req.body;

// บันทึกสำหรับการแก้ไขข้อบกพร่อง
console.log('=== Webhook Received ===');
console.log('Event:', event.key);
console.log('Object:', event.object);
console.log('Data:', JSON.stringify(event.data, null, 2));

// ตรวจสอบลายเซ็น (สำคัญ!)
if (!verifyWebhookSignature(req)) {
console.error('Invalid signature!');
return res.sendStatus(401);
}

// ประมวลผลเหตุการณ์
switch (event.key) {
case 'charge.complete':
handleChargeComplete(event.data);
break;
case 'charge.failed':
handleChargeFailed(event.data);
break;
}

res.sendStatus(200);
});

การทดสอบ Webhook ด้วยตนเอง

# จำลองการร้องขอ webhook ด้วย cURL
curl -X POST http://localhost:3000/webhooks/omise \
-H "Content-Type: application/json" \
-d '{
"object": "event",
"id": "evnt_test_123",
"key": "charge.complete",
"data": {
"object": "charge",
"id": "chrg_test_123",
"status": "successful",
"amount": 100000
}
}'

รายการตรวจสอบการทดสอบ

ตรวจสอบว่าคุณได้ทดสอบสิ่งต่อไปนี้ก่อนไปยังการผลิต:

การรวมพื้นฐาน

  • สร้างการชำระเงินที่สำเร็จด้วยการ์ด (4242...)
  • สร้างการชำระเงินที่ปฏิเสธ (4000 0000 0000 0002)
  • จัดการการ์ดที่ปฏิเสธได้อย่างเหมาะสม
  • แสดงข้อความแสดงข้อผิดพลาดที่ชัดเจนแก่ผู้ใช้
  • ตรวจสอบสถานะการชำระเงินผ่าน API
  • ทดสอบการส่งมอบและการประมวลผล webhook

วิธีการชำระเงิน

  • ทดสอบวิธีการชำระเงินทั้งหมดที่ใช้ได้
  • แสดงรหัส QR (หากใช้ได้)
  • โปรแกรมเปลี่ยนเส้นทาง mobile banking
  • การรวมกระเป๋าเงินดิจิทัล
  • ตัวจัดการ URL การเปลี่ยนเส้นทางสำหรับวิธีการเปลี่ยนเส้นทาง

3D Secure (ถ้าเปิดใช้งาน)

  • โฟลว์ไร้แรงเสียดทาน (ไม่มีการท้าทาย)
  • โฟลว์ที่ท้าทาย (ต้องการการพิสูจน์ตัวตน)
  • ความล้มเหลวในการพิสูจน์ตัวตน
  • ตรวจสอบการตัดสินใจของ return_uri
  • ตรวจสอบว่า webhook ถูกเรียกใช้อย่างถูกต้อง

การคืนเงิน

  • สร้างการคืนเงินเต็มจำนวน
  • สร้างการคืนเงินบางส่วน
  • การทดสอบการยกเลิก (ภายใน 24 ชั่วโมง)
  • ตรวจสอบ webhook การคืนเงิน
  • ตรวจสอบสถานะการคืนเงินในแดชบอร์ด

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

  • คีย API ที่ไม่ถูกต้อง
  • โทเค็นที่หมดอายุ
  • เงินไม่พอ
  • หมดเวลาเครือข่าย
  • จำนวนการชำระเงินที่ไม่ถูกต้อง
  • ฟิลด์ที่จำเป็นหายไป

ความปลอดภัย

  • ตรวจสอบลายเซ็น webhook
  • ทดสอบเฉพาะด้วย HTTPS
  • ตรวจสอบอินพุตของผู้ใช้
  • ตรวจสอบการปฏิบัติตามพีซีไอ (ไม่มีข้อมูลการ์ดบนเซิร์ฟเวอร์)
  • การทดสอบขีดจำกัดอัตรา

ประสบการณ์ลูกค้า

  • ชำระเงินเพื่อตอบสนองอุปกรณ์มือถือ
  • คำแนะนำการชำระเงินที่ชัดเจน
  • สถานะโหลดระหว่างประมวลผล
  • หน้ายืนยันความสำเร็จ
  • การจัดการความล้มเหลวและตัวเลือกการลองใหม่
  • ยืนยันอีเมล (ทดสอบอีเมล)

ความปลอดภัยข้อมูลทดสอบ

1. ใช้ข้อมูลทดสอบที่สมจริง

// ดี - ข้อมูลทดสอบที่สมจริง
{
email: 'test.customer@example.com',
name: 'Test Customer',
description: 'Test order #12345'
}

// ไม่ดี - อาจทำให้เกิดธงทดสอบ
{
email: 'test@test.com',
name: 'Test',
description: 'test'
}

2. ล้างข้อมูลทดสอบเป็นระยะ

// ลบการชำระเงินทดสอบเก่า (ผ่านแดชบอร์ด)
// หรือแยกข้อมูลทดสอบและข้อมูลสด

3. ติดแท็กธุรกรรมทดสอบ

const charge = await omise.charges.create({
amount: 100000,
currency: 'THB',
card: tokenId,
metadata: {
environment: 'test',
test_scenario: 'successful_payment',
tester: 'john@company.com'
}
});

4. สถานการณ์ทดสอบเอกสาร

// เอกสารสถานการณ์ทดสอบ
const TEST_SCENARIOS = {
successful_payment: {
card: '4242424242424242',
expected: 'successful',
description: 'Standard successful payment'
},
declined_payment: {
card: '4000000000000002',
expected: 'failed',
description: 'Card declined by bank'
},
insufficient_funds: {
card: '4000000000000010',
expected: 'failed',
description: 'Insufficient funds'
}
};

การแก้ไขปัญหา

ปัญหาการทดสอบทั่วไป

ปัญหา: การชำระเงินทดสอบไม่ปรากฏในแดชบอร์ด

อาการ:

  • สร้างการชำระเงินผ่าน API แต่ไม่ปรากฏในแดชบอร์ด
  • แดชบอร์ดไม่แสดงข้อมูลทดสอบ

สาเหตุ:

  • ใช้คีย์สดแทนคีย์ทดสอบ
  • แดชบอร์ดแสดงโหมดอื่น
  • ข้อผิดพลาด API ที่ไม่ถูกจับ

วิธีแก้ไข:

// 1. ตรวจสอบว่าใช้คีย์ทดสอบ
const omise = require('omise')({
secretKey: 'skey_test_...' // ต้องเริ่มต้นด้วย skey_test_
});

// 2. ตรวจสอบข้อผิดพลาด API
try {
const charge = await omise.charges.create({
amount: 100000,
currency: 'THB',
card: tokenId
});
console.log('Charge created:', charge.id);
} catch (error) {
console.error('API Error:', error.message);
console.error('Error code:', error.code);
}

// 3. ตรวจสอบว่าแดชบอร์ดอยู่ในโหมดทดสอบ
// แดชบอร์ด → เปิดใช้งานตัวสลับ "โหมดทดสอบ"

คำถามที่พบบ่อย

ฉันสามารถใช้การ์ดจริงในโหมดทดสอบได้หรือไม่

ไม่ โหมดทดสอบยอมรับเฉพาะหมายเลขการ์ดทดสอบ การ์ดจริงจะถูกปฏิเสธ นี่เป็นมาตรการป้องกันเพื่อป้องกันการชำระเงินจริงโดยไม่ตั้งใจระหว่างการพัฒนา

Webhook ทดสอบส่งมอบจริงหรือไม่

ใช่! Webhook ทดสอบส่งมอบไปยังเอนด์พอยต์ของคุณเหมือนกับ webhook สด ใช้ ngrok สำหรับการทดสอบในเครื่องหรือปรับใช้บนเซิร์ฟเวอร์ขั้นตอนกลาง

ฉันจะทดสอบวิธีการชำระเงินโดยไม่มีการ์ดทดสอบได้อย่างไร

สำหรับ QR, wallet, mobile banking ในโหมดทดสอบ:

  1. สร้างแหล่งที่มา/การชำระเงิน
  2. ไปที่แดชบอร์ดทดสอบ
  3. ค้นหาการชำระเงินที่รอดำเนินการ
  4. คลิก [ทำให้สำเร็จ] หรือ [ทำให้ล้มเหลว]
ปลอดภัยหรือไม่ที่จะส่งคีย์ทดสอบไปยังที่เก็บข้อมูล git

คีย์ทดสอบไม่ได้ประมวลผลเงินจริง แต่ควรเก็บไว้ในตัวแปรสภาพแวดล้อมและไม่ส่งไปยังที่เก็บข้อมูลสาธารณะ สามารถใช้เพื่อเข้าถึงข้อมูลการทดสอบและสร้างการชำระเงินทดสอบ

ฉันสามารถเปลี่ยนระหว่างโหมดทดสอบและโหมดสดได้ง่ายหรือไม่

ใช่ โดยใช้ตัวแปรสภาพแวดล้อม:

const omise = require('omise')({
secretKey: process.env.OMISE_SECRET_KEY // สลับผ่านสภาพแวดล้อม
});

ทรัพยากรที่เกี่ยวข้อง

ขั้นตอนถัดไป

  1. รับคีย API ทดสอบ
  2. ทดสอบด้วยการ์ดสำเร็จ
  3. ทดสอบสถานการณ์การปฏิเสธ
  4. ตั้งค่าการทดสอบ Webhook
  5. ดำเนินการรายการตรวจสอบการทดสอบให้เสร็จสิ้น
  6. ไปยังการผลิต