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

3D Secure

เพิ่มการยืนยันตัวตนสองขั้นตอนจากธนาคารเพื่อลดการฉ้อโกงมากกว่า 70% และโอนความรับผิดชอบ chargeback ไปยังผู้ออกบัตร

ภาพรวม

3D Secure (3DS) เป็นชั้นความปลอดภัยเพิ่มเติมสำหรับธุรกรรมบัตรเครดิตและเดบิตออนไลน์ที่ต้องการให้ผู้ถือบัตรผ่านขั้นตอนการยืนยันเพิ่มเติมกับธนาคารผู้ออกบัตร การยืนยันตัวตนนี้ช่วยลดการฉ้อโกงอย่างมีนัยสำคัญและโอนความรับผิดชอบ chargeback จากร้านค้าไปยังธนาคาร

ประโยชน์หลัก:

  • ลดการฉ้อโกงมากกว่า 70% - การยืนยันตัวตนเพิ่มเติมป้องกันการใช้งานโดยไม่ได้รับอนุญาต
  • โอนความรับผิดชอบ - ธนาคารรับผิดชอบ chargeback สำหรับธุรกรรมที่ยืนยันแล้ว
  • อัตรา chargeback ที่ต่ำลง - ลดข้อพิพาทและค่าธรรมเนียมที่เกี่ยวข้อง
  • ตัวเลือก Frictionless - 3DS2 อนุญาตให้อนุมัติทันทีสำหรับธุรกรรมความเสี่ยงต่ำ
  • จำเป็นสำหรับการปฏิบัติตาม - บังคับใช้สำหรับประเภทธุรกิจและภูมิภาคบางแห่ง

3D Secure 1 vs 3D Secure 2

คุณสมบัติ3DS1 (เลิกใช้แล้ว)3DS2 (มาตรฐานปัจจุบัน)
สถานะเลิกใช้ตุลาคม 2022ใช้งานและจำเป็น
วิธีการยืนยันตัวตนOTP/SMS เท่านั้นOTP, SMS, ไบโอเมตริกส์, การจดจำใบหน้า
Frictionless Flowไม่พร้อมใช้งานพร้อมใช้งานสำหรับธุรกรรมความเสี่ยงต่ำ
การรองรับมือถือจำกัดรองรับเต็มรูปแบบในแอป
การแชร์ข้อมูลจำกัดบริบทธุรกรรมที่สมบูรณ์ (อุปกรณ์, ตำแหน่ง, ประวัติ)
ประสบการณ์ผู้ใช้ต้องมีปฏิสัมพันธ์เสมอการตัดสินใจอัจฉริยะตามความเสี่ยง
อัตราการอนุมัติต่ำกว่าสูงกว่า (frictionless ลดการละทิ้งรถเข็น)
การยกเลิก 3DS1

3D Secure 1 ถูกยกเลิกในเดือนตุลาคม 2022 การใช้งานทั้งหมดควรใช้ 3D Secure 2 (3DS2)

3DS2 ทำงานอย่างไร

Frictionless Flow

  • ธนาคารวิเคราะห์ความเสี่ยงธุรกรรมโดยใช้ข้อมูลละเอียด (ID อุปกรณ์, ตำแหน่งทางภูมิศาสตร์, ประวัติการซื้อ)
  • หากความเสี่ยงต่ำพอ ธุรกรรมได้รับการอนุมัติทันทีโดยไม่ต้องมีปฏิสัมพันธ์กับลูกค้า
  • การปกป้องความรับผิดเหมือนกับ challenge flow
  • ประสบการณ์ผู้ใช้ที่ดีกว่ามาก - ไม่มีการเปลี่ยนเส้นทาง, ชำระเงินเร็วขึ้น

Challenge Flow

  • ใช้สำหรับธุรกรรมที่มีความเสี่ยงสูงกว่าที่ต้องการการยืนยันเพิ่มเติม
  • ลูกค้าถูกเปลี่ยนเส้นทางไปยังหน้ายืนยันตัวตนของธนาคาร
  • ตัวเลือกการยืนยันตัวตนหลายแบบ:
    • OTP (รหัสผ่านใช้ครั้งเดียวทาง SMS)
    • ไบโอเมตริกส์ (ลายนิ้วมือ, Face ID)
    • การแจ้งเตือนแบบพุชแอปธนาคาร
  • โดยปกติใช้เวลา 1-3 นาที
  • อาจใช้เวลาถึง 10 นาทีหากเป็นการลงทะเบียนครั้งแรก

เมื่อใดควรเปิดใช้งาน 3D Secure

บังคับสำหรับ

  • การเดินทางและที่พัก - โรงแรม, สายการบิน, แพลตฟอร์มการจอง
  • สินค้าดิจิทัล - เพลง, ภาพยนตร์, ซอฟต์แวร์, เกม
  • ไอเทมเสมือน - สกุลเงินในเกม, การซื้อในแอป
  • บัตรเติมเงิน - บัตรของขวัญ, บริการเติมเงิน
  • ร้านค้าความเสี่ยงสูง - ตามที่กำหนดโดยนักวิเคราะห์การฉ้อโกง

แนะนำสำหรับ

  • ธุรกรรมมูลค่าสูง (> 10,000 บาทหรือเทียบเท่า)
  • ธุรกิจที่มีอัตรา chargeback > 0.3%
  • ธุรกรรมบัตรระหว่างประเทศ
  • ลูกค้าครั้งแรก
  • รูปแบบธุรกรรมที่น่าสงสัย

ไม่แนะนำสำหรับ

  • การสมัครสมาชิกแบบเกิดซ้ำ - ป้องกันการเรียกเก็บเงินอัตโนมัติ
  • การซื้อซ้ำด้วยคลิกเดียว - ต้องการปฏิสัมพันธ์ทุกครั้ง
  • ธุรกรรมมูลค่าต่ำ - อาจลดการแปลงในการซื้อจำนวนเล็ก
วิธีแก้สำหรับการสมัครสมาชิก

สำหรับการสมัครสมาชิก: ใช้ 3DS สำหรับการตั้งค่าบัตรเริ่มต้น จากนั้นเรียกเก็บเงิน customer ID ที่บันทึกไว้โดยไม่ใช้ 3DS สำหรับการชำระเงินครั้งต่อไป (ขึ้นอยู่กับกฎของธนาคาร)

คู่มือการใช้งาน

ขั้นตอนที่ 1: เปิดใช้งาน 3DS ในบัญชีของคุณ

ติดต่อฝ่ายสนับสนุน Omise เพื่อเปิดใช้งาน 3D Secure:

Email: support@omise.co
หัวเรื่อง: เปิดใช้งาน 3D Secure สำหรับ [บัญชีของคุณ]

ขั้นตอนที่ 2: สร้าง Token (กระบวนการมาตรฐาน)

// ฝั่งไคลเอ็นต์: สร้าง token ตามปกติ
Omise.setPublicKey("pkey_test_YOUR_KEY");

Omise.createToken("card", {
name: "John Doe",
number: "4242424242424242",
expiration_month: 12,
expiration_year: 2027,
security_code: "123"
}, function(statusCode, response) {
if (statusCode === 200) {
// ส่ง token ไปยังเซิร์ฟเวอร์
submitToServer(response.id);
}
});

ขั้นตอนที่ 3: สร้าง Charge พร้อม return_uri

พารามิเตอร์ return_uri จำเป็น สำหรับ 3DS:

curl https://api.omise.co/charges \
-u skey_test_YOUR_SECRET_KEY: \
-d "amount=100000" \
-d "currency=THB" \
-d "card=tokn_test_..." \
-d "return_uri=https://yourdomain.com/payment/callback"

ขั้นตอนที่ 4: จัดการการเปลี่ยนเส้นทางลูกค้า

หาก authorize_uri มีอยู่ในการตอบกลับ ให้เปลี่ยนเส้นทางลูกค้า:

// ฝั่งเซิร์ฟเวอร์
app.post('/create-charge', async (req, res) => {
const charge = await omise.charges.create({
amount: req.body.amount,
currency: 'THB',
card: req.body.token,
return_uri: 'https://yourdomain.com/payment/callback',
metadata: {
order_id: req.body.order_id
}
});

if (charge.authorize_uri) {
// ต้องการการยืนยันตัวตน 3DS
res.json({
requires_3ds: true,
authorize_uri: charge.authorize_uri,
charge_id: charge.id
});
} else {
// Frictionless - charge เสร็จสมบูรณ์
res.json({
requires_3ds: false,
status: charge.status,
charge_id: charge.id
});
}
});
// ฝั่งไคลเอ็นต์
fetch('/create-charge', {
method: 'POST',
body: JSON.stringify({ token, amount, order_id })
})
.then(res => res.json())
.then(data => {
if (data.requires_3ds) {
// เปลี่ยนเส้นทางไปยังการยืนยันตัวตน 3DS
window.location.href = data.authorize_uri;
} else {
// การชำระเงินเสร็จสมบูรณ์
window.location.href = '/payment-success';
}
});

ขั้นตอนที่ 5: จัดการ Callback

หลังการยืนยันตัวตน ลูกค้าจะถูกเปลี่ยนเส้นทางกลับไปยัง return_uri ของคุณ:

app.get('/payment/callback', async (req, res) => {
// ดึงสถานะ charge
const chargeId = req.query.charge_id || req.session.charge_id;

const charge = await omise.charges.retrieve(chargeId);

if (charge.status === 'successful') {
// การยืนยันตัวตน 3DS ผ่าน
await processOrder(charge.metadata.order_id);
res.redirect('/payment-success?order=' + charge.metadata.order_id);
} else if (charge.status === 'failed') {
// การยืนยันตัวตน 3DS ล้มเหลว
res.redirect('/payment-failed?reason=' + encodeURIComponent(charge.failure_message));
} else {
// ยังรออยู่ - ตรวจสอบอีกครั้งหรือใช้ webhooks
res.redirect('/payment-pending');
}
});

ขั้นตอนที่ 6: ใช้งาน Webhook Handler

สำหรับการอัพเดตสถานะที่เชื่อถือได้ ให้ใช้ webhooks:

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

if (event.key === 'charge.complete') {
const charge = event.data;

if (charge.status === 'successful') {
// ประมวลผลการชำระเงินที่สำเร็จ
processOrder(charge.metadata.order_id);
} else if (charge.status === 'failed') {
// จัดการการชำระเงินที่ล้มเหลว
handleFailedPayment(charge.metadata.order_id, charge.failure_message);
}
}

res.sendStatus(200);
});

ตัวอย่างการใช้งานแบบสมบูรณ์

<!DOCTYPE html>
<html>
<head>
<title>3DS Checkout</title>
<script src="https://cdn.omise.co/omise.js"></script>
</head>
<body>
<form id="payment-form">
<input type="text" id="card-name" placeholder="Card Holder" required />
<input type="text" id="card-number" placeholder="Card Number" required />
<input type="text" id="expiry-month" placeholder="MM" required />
<input type="text" id="expiry-year" placeholder="YYYY" required />
<input type="text" id="cvv" placeholder="CVV" required />
<button type="submit">ชำระ 1,000 บาท</button>
</form>

<script>
Omise.setPublicKey("pkey_test_YOUR_KEY");

document.getElementById('payment-form').addEventListener('submit', async (e) => {
e.preventDefault();

// ขั้นตอนที่ 1: สร้าง token
Omise.createToken("card", {
name: document.getElementById('card-name').value,
number: document.getElementById('card-number').value,
expiration_month: parseInt(document.getElementById('expiry-month').value),
expiration_year: parseInt(document.getElementById('expiry-year').value),
security_code: document.getElementById('cvv').value
}, async (statusCode, response) => {
if (statusCode !== 200) {
alert('Error: ' + response.message);
return;
}

// ขั้นตอนที่ 2: สร้าง charge บนเซิร์ฟเวอร์
const result = await fetch('/create-charge', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
token: response.id,
amount: 100000,
order_id: 'ORD-12345'
})
}).then(r => r.json());

// ขั้นตอนที่ 3: จัดการการตอบกลับ
if (result.requires_3ds) {
// เปลี่ยนเส้นทางไปยังการยืนยันตัวตน 3DS
window.location.href = result.authorize_uri;
} else {
// Frictionless - การชำระเงินเสร็จสมบูรณ์
window.location.href = '/payment-success';
}
});
});
</script>
</body>
</html>

การแลกเปลี่ยนและข้อพิจารณา

ข้อดี

  • ลดการฉ้อโกง: ลดธุรกรรมที่ไม่ได้รับอนุญาต 70% ขึ้นไป
  • โอนความรับผิดชอบ: ธนาคารรับผิดชอบความรับผิด chargeback
  • ค่าธรรมเนียมที่ต่ำลง: ข้อพิพาทน้อยลง = ค่าธรรมเนียมข้อพิพาทต่ำลง
  • การปฏิบัติตาม: จำเป็นสำหรับประเภทธุรกิจบางอย่าง
  • ความไว้วางใจของลูกค้า: ความปลอดภัยระดับมืออาชีพ = ความมั่นใจที่เพิ่มขึ้น

ข้อเสีย

  • ผลกระทบต่อการแปลง: ลูกค้าบางคนละทิ้งที่การเปลี่ยนเส้นทาง (frictionless ช่วย)
  • ไม่มีการชำระเงินซ้ำ: ไม่สามารถเรียกเก็บเงินบัตรที่บันทึกไว้อัตโนมัติ
  • แรงเสียดทานของผู้ใช้: Challenge flow เพิ่ม 1-3 นาทีในการชำระเงิน
  • ความซับซ้อนทางเทคนิค: ต้องการการจัดการการเปลี่ยนเส้นทางเพิ่มเติม
  • ความแตกต่างระหว่างประเทศ: คุณภาพการใช้งานของธนาคารแตกต่างกัน

กลยุทธ์การลดผลกระทบ

ลดการละทิ้งรถเข็น:

// แสดงข้อความที่ชัดเจนก่อนการเปลี่ยนเส้นทาง
function initiate3DS(authorizeUri) {
const modal = showModal({
title: "การยืนยันการชำระเงินที่ปลอดภัย",
message: "คุณจะถูกเปลี่ยนเส้นทางไปยังธนาคารของคุณเพื่อการยืนยัน สิ่งนี้ช่วยให้การชำระเงินของคุณปลอดภัย",
button: "ดำเนินการยืนยันต่อ"
});

modal.onConfirm = () => {
window.location.href = authorizeUri;
};
}

จัดการการชำระเงินซ้ำ:

// Charge แรก: ใช้ 3DS
const firstCharge = await omise.charges.create({
amount: 29900,
currency: 'THB',
card: tokenId,
return_uri: 'https://example.com/callback',
metadata: { type: 'subscription_signup' }
});

// บันทึกลูกค้าสำหรับ charge ในอนาคต
const customer = await omise.customers.create({
email: 'customer@example.com',
card: tokenId
});

// Charge ที่ตามมา: ไม่ใช้ 3DS (ใช้ customer ID)
const recurringCharge = await omise.charges.create({
amount: 29900,
currency: 'THB',
customer: customer.id,
// ไม่มี return_uri = ไม่ต้องการ 3DS
});

ทดสอบ 3D Secure

เปิดใช้งาน 3DS โหมดทดสอบ

ติดต่อฝ่ายสนับสนุนเพื่อเปิดใช้งาน 3DS ในโหมดทดสอบ:

Email: support@omise.co
หัวเรื่อง: เปิดใช้งาน 3DS สำหรับโหมดทดสอบ

บัตรทดสอบ

ใช้บัตรเหล่านี้เพื่อทดสอบสถานการณ์ 3DS ที่แตกต่างกัน:

หมายเหตุ

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

บัตรสำเร็จมาตรฐาน (ไม่มีปัญหา 3DS):

หมายเลขบัตรแบรนด์ผลลัพธ์ที่คาดหวัง
4242 4242 4242 4242Visaการอนุมัติแบบ Frictionless
5555 5555 5555 4444Mastercardการอนุมัติแบบ Frictionless

บัตรล้มเหลวในการลงทะเบียน 3DS:

หมายเลขบัตรแบรนด์ผลลัพธ์ที่คาดหวัง
4111 1111 1115 0002Visaการลงทะเบียน 3DS ล้มเหลว
5555 5511 1112 0002Mastercardการลงทะเบียน 3DS ล้มเหลว
3530 1111 1110 0002JCBการลงทะเบียน 3DS ล้มเหลว

บัตรล้มเหลวในการยืนยันตัวตน 3DS:

หมายเลขบัตรแบรนด์ผลลัพธ์ที่คาดหวัง
4111 1111 1114 0003Visaการยืนยันตัวตน 3DS ล้มเหลว
5555 5511 1111 0003Mastercardการยืนยันตัวตน 3DS ล้มเหลว
3771 3816 1111 003Amexการยืนยันตัวตน 3DS ล้มเหลว

FAQ

3D Secure เป็นข้อบังคับหรือไม่?

3D Secure เป็นข้อบังคับสำหรับประเภทธุรกิจบางอย่าง (การเดินทาง, สินค้าดิจิทัล, เกม) ตามที่กำหนดโดยนักวิเคราะห์การฉ้อโกงของ Omise สำหรับผู้ขายอื่นๆ เป็นตัวเลือก แต่แนะนำสำหรับธุรกรรมมูลค่าสูงหรือความเสี่ยงสูง

3D Secure รับประกัน chargeback หรือไม่?

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

ฉันสามารถใช้ 3D Secure สำหรับการสมัครสมาชิกได้หรือไม่?

ไม่สามารถใช้โดยตรงสำหรับการชำระเงินซ้ำอัตโนมัติ อย่างไรก็ตาม คุณสามารถ:

  1. ใช้ 3DS สำหรับการตั้งค่าบัตรเริ่มต้น
  2. บันทึกบัตรเป็นลูกค้า
  3. เรียกเก็บเงิน customer ID โดยไม่ใช้ 3DS สำหรับการชำระเงินซ้ำ (ขึ้นอยู่กับกฎของธนาคาร)
อะไรคือความแตกต่างระหว่าง frictionless และ challenge flow?

Frictionless: ธนาคารอนุมัติทันทีตามการวิเคราะห์ความเสี่ยง - ไม่ต้องการปฏิสัมพันธ์กับลูกค้า UX ที่ดีกว่า

Challenge: ธนาคารต้องการการยืนยันเพิ่มเติม (OTP, ไบโอเมตริกส์) - ลูกค้าต้องมีปฏิสัมพันธ์ ปลอดภัยกว่าแต่ช้ากว่า

ธนาคารตัดสินใจว่าจะใช้ flow ใดตามความเสี่ยงของธุรกรรม

การยืนยันตัวตน 3DS ใช้เวลานานเท่าไร?
  • Frictionless: ทันที (< 1 วินาที)
  • Challenge: โดยปกติ 1-3 นาที
  • การลงทะเบียนครั้งแรก: สูงสุด 10 นาที

การใช้งานสมัยใหม่ส่วนใหญ่ใช้ frictionless flow สำหรับธุรกรรมความเสี่ยงต่ำ

3D Secure ทำงานบนมือถือหรือไม่?

ใช่! 3DS2 ได้รับการปรับให้เหมาะสมอย่างสมบูรณ์สำหรับมือถือด้วย:

  • การยืนยันตัวตนในแอป (ไม่มีการเปลี่ยนเส้นทางเบราว์เซอร์)
  • ตัวเลือกไบโอเมตริกส์ (ลายนิ้วมือ, Face ID)
  • Deep link แอปธนาคาร
  • UX บนมือถือที่ดีกว่า 3DS1

แหล่งข้อมูลที่เกี่ยวข้อง

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

  1. ติดต่อฝ่ายสนับสนุนเพื่อเปิดใช้งาน 3DS
  2. ใช้งานการจัดการ return_uri
  3. ตั้งค่าการแจ้งเตือน webhook
  4. ทดสอบด้วยบัตรทดสอบ
  5. ตรวจสอบการลดการฉ้อโกง
  6. เข้าสู่การใช้งานจริง