บทความทั้งหมด

Webhook คืออะไร และทำไมระบบรับชำระเงินควรใช้

อ่าน 1 นาที

ไม่มีรูปภาพ
Webhook คืออะไร และทำไมระบบรับชำระเงินควรใช้

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

Webhook คืออะไร

Webhook คือการที่ระบบหนึ่งส่งคำขอ HTTP มาหาอีกระบบหนึ่งเองเมื่อมีเหตุการณ์เกิดขึ้น เปรียบเหมือนการให้ร้านขนส่งโทรบอกเมื่อพัสดุถึง แทนที่เราจะโทรถามทุกห้านาที ในงานชำระเงิน เมื่อสลิปของลูกค้าผ่านการตรวจ ระบบจะส่งเหตุการณ์ เช่น invoice.paid ไปยัง URL ที่ร้านกำหนดไว้

ทำไมระบบรับชำระควรใช้

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

ในทางปฏิบัติแนวทางที่ดีคือผสมกัน ใช้ webhook เป็นทางหลักเพื่อความเร็ว และมีงานตรวจตามรอบเป็นตัวสำรองเผื่อ webhook หายระหว่างทาง ปลั๊กอินของ PPay ใช้แนวทางนี้ คือ webhook ตอนลูกค้ากลับร้าน และงานตรวจทุก 5 นาที

ข้อควรระวังด้านความปลอดภัย

URL ของ webhook เป็นประตูที่เปิดรับคำขอจากอินเทอร์เน็ต ใครก็ลองยิงเข้ามาได้ ฝั่งผู้รับจึงต้องไม่เชื่อเนื้อหาที่ส่งมาทันที

1. ตรวจลายเซ็น

ผู้ส่งที่ดีจะแนบลายเซ็น (เช่นแบบ HMAC) ที่คำนวณจากเนื้อหาและความลับที่ใช้ร่วมกัน ฝั่งรับต้องคำนวณซ้ำและเทียบ หากไม่ตรงให้ปฏิเสธ ควรเปรียบเทียบด้วยฟังก์ชันที่ปลอดภัยต่อการโจมตีด้านเวลา

2. ตรวจเวลา

คำขอเก่าที่ถูกดักไว้แล้วส่งซ้ำ (replay) เป็นความเสี่ยงที่พบได้ ปลั๊กอินของ PPay ตรวจว่าเวลาของเหตุการณ์ไม่เก่าเกิน 5 นาที

3. ยืนยันซ้ำจากต้นทาง

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

4. ทำให้ประมวลผลซ้ำได้อย่างปลอดภัย

เหตุการณ์เดียวอาจมาถึงมากกว่าหนึ่งครั้ง เช่น ส่งซ้ำเพราะรอบแรกตอบช้า ระบบต้องออกแบบให้การทำซ้ำไม่ทำให้ตัดสต็อกสองครั้งหรือบันทึกยอดสองรอบ เช่น ใช้ล็อกหรือเช็กสถานะออเดอร์ก่อนทำงาน

5. อย่าเปิดเผยความลับ

Webhook Secret ต้องไม่อยู่ในโค้ดฝั่งเบราว์เซอร์หรือที่เก็บโค้ดสาธารณะ ดูแนวทางเพิ่มเติมได้ใน บทความเรื่องการจัดการ API key

ตอบกลับอย่างไรให้เหมาะสม

  • ตอบรหัส 200 เมื่อรับและประมวลผลสำเร็จ
  • ถ้าเหตุการณ์ไม่ใช่ของระบบคุณ ตอบ 200 แล้วข้ามได้ เพื่อไม่ให้ผู้ส่งลองใหม่ไม่รู้จบ
  • ถ้าลายเซ็นไม่ถูกต้อง ให้ปฏิเสธด้วยรหัสในกลุ่ม 4xx
  • ทำงานหนักแบบไม่รอ ให้ตอบเร็วแล้วไปประมวลผลต่อเบื้องหลัง

ข้อจำกัดที่ควรรู้กับ PPay

บัญชี PPay หนึ่งบัญชีตั้ง Webhook ได้ 1 URL หากคุณมีหลายเว็บ ควรเลือกเว็บหลักไว้รับ และให้เว็บอื่นพึ่งการตรวจตามรอบ ซึ่งปลั๊กอินของ PPay รองรับอยู่แล้ว

สรุป

Webhook ทำให้ร้านรู้เรื่องการชำระเงินเร็วขึ้น แต่ต้องมาพร้อมการตรวจลายเซ็น ตรวจเวลา และยืนยันซ้ำจากต้นทาง รายละเอียดรูปแบบเหตุการณ์และการตรวจลายเซ็นของ PPay ดูได้ที่ เอกสาร API หรือถ้าไม่อยากเขียนเอง ดูทางเลือกแบบปลั๊กอินที่ หน้าปลั๊กอิน

ลองตรวจสลิปอัตโนมัติกับร้านของคุณ

สมัครแล้วเริ่มใช้งานได้ภายในไม่กี่นาที

บทความอื่น ๆ