เชื่อมสต็อกสินค้ากับสถานะการชำระเงินไม่ให้ขายเกิน
อ่าน 1 นาที
ไม่มีรูปภาพ
ลูกค้าสองคนสั่งสินค้าชิ้นสุดท้ายพร้อมกัน คนแรกโอนเงินเลย คนที่สองโอนทีหลังไม่กี่นาที ถ้าระบบไม่รู้ว่าใครจ่ายแล้วบ้าง คุณอาจรับเงินสองรายการสำหรับสินค้าชิ้นเดียว แล้วต้องขอโทษและคืนเงินคนหนึ่ง ปัญหา "ขายเกิน" ส่วนใหญ่ไม่ได้เกิดจากสต็อกนับผิด แต่เกิดจากสต็อกกับสถานะชำระเงินไม่ได้เชื่อมกัน
สามสถานะของสต็อกที่ควรแยกให้ชัด
แทนที่จะมีตัวเลขสต็อกตัวเดียว ลองแยกเป็นสามค่า
- คงเหลือพร้อมขาย: จำนวนที่ลูกค้าใหม่สั่งได้จริง
- จองไว้ (รอชำระ): ออเดอร์ที่สร้างแล้วแต่ยังไม่จ่าย
- ขายแล้ว (ชำระแล้ว): ออเดอร์ที่ตรวจเงินแล้ว รอแพ็กหรือส่ง
เมื่อมีออเดอร์ใหม่ ให้ย้ายจาก "พร้อมขาย" ไป "จองไว้" และเมื่อชำระสำเร็จจึงย้ายไป "ขายแล้ว" หากชำระไม่ทันเวลา ให้คืนจาก "จองไว้" กลับไป "พร้อมขาย"
ตารางสถานะออเดอร์กับการเปลี่ยนสต็อก
| เหตุการณ์ | สถานะออเดอร์ | สิ่งที่เกิดกับสต็อก |
|---|---|---|
| ลูกค้ากดสั่ง | รอชำระ | จองสต็อกตามจำนวนที่สั่ง |
| ตรวจเงินเข้าตรงยอด | ชำระแล้ว | ตัดสต็อกเป็นขายแล้ว |
| เลยเวลาที่กำหนดแล้วไม่ชำระ | หมดอายุ | ปล่อยสต็อกกลับ |
| ลูกค้ายกเลิกก่อนส่ง | ยกเลิก | คืนสต็อก และจัดการคืนเงินหากจ่ายแล้ว |
ตั้งเวลาหมดอายุการจองให้เหมาะสม
การจองสต็อกไม่จำกัดเวลาเป็นอีกต้นเหตุหนึ่ง เพราะสินค้าถูกล็อกโดยคนที่ไม่จ่าย ทำให้ลูกค้าอื่นซื้อไม่ได้ ควรกำหนดเวลา เช่น 30 นาที ถึงหลายชั่วโมงตามลักษณะสินค้า (เป็นตัวอย่างแนวคิด ไม่ใช่ค่าแนะนำตายตัว) สินค้าที่มีน้อยหรือทำตามสั่งอาจให้เวลานานกว่า และต้องแจ้งเวลาให้ลูกค้าเห็นชัดก่อนชำระ เช่นเดียวกับ เรื่องเวลาที่ใช้ได้ของสลิป ที่ควรมีกรอบชัดเจน
เงินเข้าต้องเป็นตัวสั่ง ไม่ใช่คำบอกเล่า
จุดอ่อนที่พบบ่อยคือคนดูแลปรับสถานะเป็น "ชำระแล้ว" เมื่อเห็นรูปสลิปในแชต ซึ่งเสี่ยงต่อสลิปปลอมหรือสลิปใช้ซ้ำ ควรให้การตรวจสลิปผ่านขั้นตอนที่เชื่อถือได้ก่อนตัดสต็อก ดูตัวอย่างความเสี่ยงที่ สลิปที่แก้ด้วยแอป และ การใช้สลิปซ้ำข้ามร้าน
ใน PPay เมื่อใบแจ้งหนี้ชำระสำเร็จ ระบบมีเหตุการณ์ webhook ชื่อ invoice.paid ส่งไปยังระบบของคุณได้ ทำให้ฝั่งสต็อกอัปเดตอัตโนมัติเมื่อได้รับเหตุการณ์นี้ รายละเอียดอยู่ใน เอกสาร API และแนวคิดพื้นฐานของ webhook อยู่ที่ webhook สำหรับการชำระเงิน ที่สำคัญคือฝั่งรับต้องรองรับกรณีได้รับเหตุการณ์ซ้ำโดยไม่ตัดสต็อกสองครั้ง
กรณีขอบที่ต้องวางกติกา
สินค้าหมดระหว่างที่ลูกค้ากำลังโอน
หากลูกค้าโอนหลังจากเลยเวลาและสต็อกถูกปล่อยให้คนอื่นไปแล้ว ให้ตกลงนโยบายไว้ก่อน เช่น เสนอสินค้าทดแทน รอล็อตใหม่ หรือคืนเงินเต็มจำนวน อ่านขั้นตอนการคืนเงินที่ การคืนเงินของร้านออนไลน์
โอนไม่ครบ
ถ้าลูกค้าโอนไม่ครบ ไม่ควรตัดสต็อกเป็นขายแล้ว ดูแนวทางที่ จัดการการโอนไม่ครบ
โอนซ้ำ
ออเดอร์เดียวแต่เงินเข้าสองรอบ ต้องไม่เพิ่มจำนวนที่ขาย ดู การจัดการโอนซ้ำ
เช็กลิสต์สรุป
- แยกสต็อกเป็น พร้อมขาย จองไว้ ขายแล้ว
- ตั้งเวลาหมดอายุการจองและแจ้งลูกค้าชัดเจน
- ตัดสต็อกเมื่อยืนยันเงินเข้าแล้วเท่านั้น
- ออกแบบฝั่งรับ webhook ให้ทำซ้ำได้โดยไม่เสียหาย (idempotent)
- มีขั้นตอนคืนสต็อกเมื่อยกเลิกหรือหมดอายุ
- สินค้าที่เหลือน้อยให้ตรวจสต็อกจริงก่อนส่งเสมอ
หากใช้ WooCommerce, WHMCS หรือ Magento 2 ดูปลั๊กอินที่รองรับได้ที่ หน้าปลั๊กอิน ซึ่งช่วยให้สถานะชำระเงินและออเดอร์ในร้านเชื่อมกันได้สะดวกขึ้น