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

วารสาร

Webhook รับชำระเงินคริปโต: วิธีตรวจสอบ signature และรับมือการส่งซ้ำ

วิธีรับ webhook แจ้งการชำระเงินอย่างปลอดภัย ตรวจสอบเฮดเดอร์ X-CryBit-Signature ทิ้งคำขอที่เก่าเกินไป ตอบกลับให้เร็ว และทำให้การประมวลผลเป็นแบบ idempotent

  • API
  • Security
Webhook รับชำระเงินคริปโต: วิธีตรวจสอบ signature และรับมือการส่งซ้ำ

webhook คือคำขอที่ CryBit ส่งมายังเซิร์ฟเวอร์ของคุณเมื่อสถานะใบแจ้งหนี้เปลี่ยนไป เป็นวิธีที่น่าเชื่อถือที่สุดในการรู้ว่าออเดอร์ถูกชำระแล้ว แต่ในขณะเดียวกันมันก็เป็น URL สาธารณะที่ใครก็สามารถส่งคำขอเข้ามาได้ ดังนั้นต้องตรวจสอบทุกคำขอก่อนที่จะนำไปใช้งานจริงเสมอ

สิ่งที่คุณจะได้รับ

คำขอที่ส่งมาเป็น POST พร้อมบอดี้แบบ JSON ชื่ออีเวนต์จะมาในเฮดเดอร์ X-CryBit-Event เช่น payment.paid คุณเลือกได้เองว่าต้องการรับอีเวนต์ไหนบ้างในหน้าตั้งค่าร้านค้า ได้แก่ paid, expired, refunded, cancelled ส่วน URL ของ webhook จะตั้งไว้ที่ระดับร้านค้า ไม่ใช่ในคำขอสร้างใบแจ้งหนี้

Webhook รับชำระเงินคริปโต: วิธีตรวจสอบ signature และรับมือการส่งซ้ำ

ตรวจสอบ signature

ทุก webhook จะมีเฮดเดอร์ X-CryBit-Signature ในรูปแบบ t=<unix time>,v1=<hex> วิธีตรวจสอบคือนำค่า t มาต่อด้วยจุดแล้วตามด้วยบอดี้คำขอแบบดิบ (raw body) จากนั้นคำนวณ HMAC-SHA256 ด้วยคีย์ลับสำหรับเซ็นชื่อของคุณ แล้วนำผลลัพธ์ไปเทียบกับค่า v1 โดยควรเปรียบเทียบแบบ constant-time และปฏิเสธคำขอหาก t เก่ากว่าห้านาที คีย์ลับสำหรับเซ็นชื่อของแต่ละร้านค้าอยู่ในหน้าตั้งค่าร้านค้า แท็บ Integration หากไม่มีคีย์นี้จะไม่มีใครปลอมสถานะ paid ได้เลย

คำนวณลายเซ็นจากบอดี้ดิบตามที่ได้รับมาเป๊ะ ๆ หากคุณแปลง JSON ออกมาแล้วสร้างใหม่ก่อน ไบต์ของข้อมูลจะเปลี่ยนไปและการตรวจสอบจะไม่ผ่าน

ตอบกลับให้เร็ว ประมวลผลให้ปลอดภัย

  • ตอบกลับด้วยสถานะ 2xx ทันทีที่บันทึกอีเวนต์เรียบร้อยแล้ว ส่วนงานที่หนักให้ไปทำภายหลัง เพราะ CryBit จะรอผลตอบกลับประมาณสิบสองวินาที
  • หากไม่มีการตอบกลับ CryBit จะส่งซ้ำโดยเว้นระยะห่างที่เพิ่มขึ้นเรื่อย ๆ คือ 15 วินาที 1 นาที 5, 15 และ 30 นาที จากนั้น 2, 6 และ 24 ชั่วโมง หากตอบกลับด้วยสถานะ 4xx ที่ไม่ใช่ 429 การส่งซ้ำจะหยุดทันที
  • ทำให้การประมวลผลเป็นแบบ idempotent เพราะอีเวนต์เดียวกันอาจถูกส่งมาซ้ำได้มากกว่าหนึ่งครั้ง ให้ใช้ order_id หรือ uuid ของใบแจ้งหนี้เป็นคีย์ และมองข้ามการส่งซ้ำครั้งถัดไป
  • อย่าปิดออเดอร์โดยอาศัยเพียงอีเวนต์จากวิดเจ็ตในเบราว์เซอร์ เพราะอีเวนต์นั้นมีไว้สำหรับหน้าตาอินเทอร์เฟซของผู้ใช้เท่านั้น

หากด้วยเหตุใดก็ตามที่คุณพลาด webhook ไป ให้เรียกดูสถานะใบแจ้งหนี้ด้วย GET /api/v1/payments/{uuid} เพราะสถานะนี้คือแหล่งข้อมูลที่ถูกต้องที่สุดเสมอ

รับคริปโต ได้รับ USDT

สร้างร้านค้า ออกใบแจ้งหนี้ ลองโหมดทดสอบ การรับชำระจริงเปิดหลังการตรวจสอบ

เพิ่มเติมจากวารสาร

สเตเบิลคอยน์ vs เหรียญผันผวน: ร้านค้าหลีกเลี่ยงความเสี่ยงด้านราคาอย่างไรหากลูกค้าจ่ายด้วย Bitcoin หรือเอทีเรียม ราคาอาจเปลี่ยนไปก่อนที่คุณจะขายออก มาดูวิธีทำงานของการแปลงเงินทันทีที่ชำระ สิ่งที่การรับเป็นสเตเบิลคอยน์ปกป้องได้จริง และข้อจำกัดของมันรับชำระคริปโตบนเว็บไซต์แบบไม่ต้องใช้ปลั๊กอิน: 3 วิธีที่ใช้ได้กับทุกแพลตฟอร์มไม่มีโมดูลสำเร็จรูปสำหรับแพลตฟอร์มของคุณ? สามวิธีนี้ใช้ได้กับเว็บไซต์หรือ CMS แทบทุกแบบ ไม่ว่าจะเป็นลิงก์ชำระเงินแบบแมนนวล สคริปต์เซิร์ฟเวอร์เล็ก ๆ ที่เรียก API หรือวิดเจ็ตแบบฝังในหน้าเว็บความปลอดภัยของการรับชำระเงินคริปโต: เช็คลิสต์สำหรับร้านค้าขั้นตอนที่ช่วยลดความเสี่ยงเมื่อรับชำระด้วยคริปโต ตั้งแต่การล็อกอินแบบสองชั้น การดูแล API key ให้ปลอดภัย การตรวจสอบลายเซ็น webhook HTTPS การประมวลผลแบบ idempotent การตรวจสอบ AML ไปจนถึงการระวังฟิชชิ่ง