Webhook: สิ่งที่คุณต้องทำเมื่อระบบแสดงรหัสสถานะ HTTP ที่ขึ้นต้นด้วย 4 (4xx) หรือ 5 (5xx)

รหัสสถานะ HTTP ในช่วง 400-499 หรือ 500-599 ที่มาจากเซิร์ฟเวอร์ของคุณหมายถึงระบบได้รับคำขอดังกล่าวแต่ไม่สามารถดำเนินการคำขอได้ ให้ลองดำเนินการดังนี้

  1. ดูข้อมูลเพิ่มเติมที่การตอบกลับจากเซิร์ฟเวอร์ของคุณในแดชบอร์ด โดยการตอบกลับอาจไม่มีข้อมูลเพิ่มเติมใดๆ ทั้งนี้ ขึ้นอยู่กับลักษณะการกำหนดค่าของเซิร์ฟเวอร์รวมถึงการออกแบบโค้ดเพื่อให้ดำเนินการกับข้อผิดพลาด

  2. ตรวจสอบข้อผิดพลาดหรือคำเตือนในบันทึกเซิร์ฟเวอร์ ข้อผิดพลาดเหล่านี้อาจช่วยให้คุณพบสาเหตุของการตอบกลับที่ผิดพลาด ซึ่งอาจเกิดจากโค้ดที่ใช้ดำเนินการ Webhook หรือปัญหาเกี่ยวกับการกำหนดค่าบนเซิร์ฟเวอร์ของคุณ

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

ดูข้อมูลโดยละเอียดเกี่ยวกับข้อผิดพลาดที่พบบ่อยบางส่วนซึ่งส่งผลให้เกิดรหัสสถานะ 4xx และ 5xx รวมถึงวิธีการแก้ไขได้ด้านล่าง

ข้อผิดพลาด: ไม่พบลายเซ็นที่ตรงกับลายเซ็นสำหรับเพย์โหลดที่คาดไว้

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

  • คีย์ลับลงนามของ Webhook (whsec_) ที่ใช้ในขั้นตอนการยืนยันลายเซ็นไม่ถูกต้อง

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

    • หากคุณใช้ Stripe CLI ระบบจะสร้างและแสดงคีย์ลับลงนามของ Webhook ให้คุณใช้งานเมื่อคุณเรียกใช้คำสั่ง stripe listen

  • มีการแก้ไขเนื้อหาคำขอก่อนที่การยืนยันลายเซ็นของ Webhook จะทำงาน

    • การเรียกใช้งานขั้นตอนการยืนยันลายเซ็นของ Webhook ต้องใช้เนื้อหาคำขอขาเข้าที่ไม่มีการดัดแปลงหรือแก้ไขเปลี่ยนแปลงจาก Stripe

    • หากโค้ดที่คุณใช้มีการแยกวิเคราะห์ จัดรูปแบบ หรือการกระทำอื่นใดที่เป็นการแก้ไขเนื้อหาคำขอก่อนการยืนยันลายเซ็น คุณจะพบข้อผิดพลาดในลักษณะนี้

    • ปรับเปลี่ยนหรือลบโค้ดรวมถึงซอฟต์แวร์ตัวกลางที่อาจแก้ไขเนื้อหาคำขอขาเข้าเดิมแล้วลองอีกครั้ง

      • หมายเหตุ ซอฟต์แวร์ตัวกลาง Node.js มักจะแก้ไขเนื้อหาของคำขอขาเข้า โดยพยายามแยกเนื้อหาคำขอเดิมออกก่อนที่จะมีการเรียกใช้งานซอฟต์แวร์ตัวกลางอื่นๆ

ข้อผิดพลาด: การประทับเวลาอยู่นอกเขตที่ยอมรับได้

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

ให้ลองดำเนินการดังนี้

  • ยืนยันว่าได้ตั้งเวลาและวันที่ในเซิร์ฟเวอร์อย่างถูกต้องแล้ว

  • ตรวจสอบว่าคุณยืนยันลายเซ็นของ Webhook ขาเข้าทันทีที่ได้รับเหตุการณ์โดยไม่เกิดความล่าช้า

ข้อผิดพลาดภายในของเซิร์ฟเวอร์

ข้อผิดพลาดเหล่านี้มักมีสาเหตุมาจากการที่โค้ดสร้างข้อยกเว้น ข้อผิดพลาดในการแยกวิเคราะห์ หรือการเปลี่ยนแปลงบางประเภทที่ส่งผลกับส่วนอื่นๆ

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

หากคุณพบข้อผิดพลาดนี้ ให้ดูข้อมูลเพิ่มเติมจากบันทึกข้อผิดพลาดของเซิร์ฟเวอร์ ตำแหน่งของบันทึกข้อผิดพลาดนั้นจะแตกต่างกันไปในแต่ละเซิร์ฟเวอร์ ทั้งนี้ ขึ้นอยู่กับการกำหนดค่า ระบบปฏิบัติการ ภาษาการเขียนโปรแกรมที่ใช้ รวมถึงปัจจัยอื่นๆ เราจึงไม่สามารถให้คำแนะนำที่เจาะจงได้  เราขอแนะนำให้คุณตรวจสอบทั้งบันทึกและการกำหนดค่าบันทึกข้อผิดพลาดเพื่อดูว่าคุณได้ใช้สิ่งใดต่อไปนี้ในการรับ Webhook หรือไม่

  • ภาษาการเขียนโปรแกรมที่คุณใช้ (เช่น Ruby, Python, PHP, Java, Node.js, Go, .NET ฯลฯ)

  • เว็บเซิร์ฟเวอร์ที่คุณใช้ (เช่น Nginx, Apache, Microsoft IIS ฯลฯ)

  • ผู้ให้บริการระบบคลาวด์หรือเซิร์ฟเวอร์ที่คุณใช้บริการ (เช่น Amazon Web Services, Google Cloud Computing, Cloudflare ฯลฯ)

Did this answer your question?
We use cookies to improve your experience and for marketing. Read our cookie policy or manage cookies.