ชำระเงิน
ชำระด้วยพอยท์ (เครดิตในระบบ) รองรับซื้อเดี่ยวและ batch order
ฟีเจอร์
- ชำระด้วยพอยท์ — สกุลเงินภายในระบบที่ได้จากการเติมเครดิต
- ซื้อสินค้าเดียว หรือซื้อทั้งหมดในตะกร้าพร้อมกัน (batch order)
- ตรวจสอบพอยท์ก่อนดำเนินการ — แสดง error ทันทีหากไม่เพียงพอ
- ดึงสต็อกแบบ atomic เพื่อป้องกัน race condition
- คืนพอยท์อัตโนมัติหากรายการใดล้มเหลวใน batch
- แสดงรหัสสินค้า (stock data) ทันทีหลังซื้อสำเร็จ
ขั้นตอนการชำระเงิน
- 1ตรวจสอบพอยท์คงเหลือ
- 2ล็อคสต็อกแบบ atomic (ป้องกัน race condition)
- 3หักพอยท์จากบัญชีผู้ใช้
- 4ส่ง stock data ให้ผู้ใช้
- 5บันทึกประวัติการสั่งซื้อ
- 6ส่ง Discord Webhook แจ้งเตือนออเดอร์
Batch Order
เมื่อกด "ซื้อทั้งหมด" ระบบจะประมวลผลรายการทั้งหมดในตะกร้าพร้อมกัน หากรายการใดรายการหนึ่งล้มเหลว (สต็อกหมด / พอยท์ไม่พอระหว่างทาง) ระบบจะ คืนพอยท์ ให้รายการที่ชำระไปแล้วอัตโนมัติ
OTP ยืนยันตัวตนก่อน Batch Order
เมื่อ Admin เปิด enable_order_otp ผู้ใช้ต้องยืนยันด้วย OTP ทางอีเมลก่อนกด "ซื้อทั้งหมด" ทุกครั้ง
1กด "ซื้อทั้งหมด" — ระบบตรวจพบว่าเปิด OTP ไว้
2ส่ง OTP ไปยังอีเมลของผู้ใช้ (6 หลัก หมดอายุใน 10 นาที)
3ผู้ใช้กรอก OTP ใน dialog ยืนยัน
4ระบบตรวจสอบ OTP (สูงสุด 3 ครั้ง) แล้วดำเนินการสั่งซื้อ
OTP หมดอายุหรือใช้ผิดเกิน 3 ครั้ง ต้องขอรหัสใหม่ — การซื้อสินค้าเดี่ยว (POST /order) ไม่ต้องใช้ OTP
สต็อกถูก lock ในระดับ database transaction เพื่อป้องกันผู้ซื้อหลายคนได้สินค้าชิ้นเดียวกัน หากสต็อกหมดระหว่างชำระ ระบบจะแจ้งทันทีและไม่หักพอยท์

