บทความทั้งหมด
เหตุการณ์การชำระเงินไหลเข้ามาเป็น Webhook สู่ตัวตรวจสอบบนเครื่องโลคัลพร้อมลายเซ็นที่ยืนยันแล้ว
Stripewebhook debugginglocal testingpayments

ทดสอบ Webhook ของ Stripe บนเครื่องโลคัล: คู่มือฉบับสมบูรณ์

การทดสอบ Webhook ของ Stripe บนเครื่องโลคัล ช่วยให้คุณตรวจสอบ handler ของเหตุการณ์การชำระเงินบนเครื่องตัวเองก่อนปล่อยขึ้นโปรดักชัน คุณรันแอปบนเครื่องโลคัล เปิดให้เข้าถึงผ่าน URL HTTPS สาธารณะ และรับเหตุการณ์ทดสอบจริงของ Stripe โดยที่การตรวจสอบลายเซ็นยังทำงานครบถ้วน

ทำไม Webhook ของ Stripe จึงต้องมี URL สาธารณะ

Stripe ส่งเหตุการณ์ Webhook ผ่านอินเทอร์เน็ตสาธารณะไปยัง URL ปลายทางที่ตั้งค่าไว้ ที่อยู่อย่าง 127.0.0.1:3000 เซิร์ฟเวอร์ของ Stripe เข้าถึงไม่ได้ การพัฒนาบนเครื่องโลคัลจึงต้องมีตัวเชื่อม ทันเนล localhost จะแมป URL HTTPS สาธารณะเข้ากับโพรเซสบนเครื่องของคุณโดยไม่ต้องแก้เราเตอร์หรือไฟร์วอลล์

สิ่งที่ต้องเตรียมก่อนทดสอบ

  • บัญชี Stripe ในโหมดทดสอบ
  • แอปบนเครื่องโลคัลที่มี route สำหรับ Webhook (เช่น /api/webhooks/stripe)
  • Webhook signing secret ของ Stripe ที่ตั้งไว้ในตัวแปรสภาพแวดล้อม
  • เครื่องมือทันเนลที่รักษา header ของคำขอไว้สำหรับการตรวจสอบลายเซ็น

ทีละขั้นตอน: ทดสอบ Webhook ของ Stripe บนเครื่องโลคัลด้วย PortPreview

  1. รันแอปพลิเคชันบนเครื่องโลคัลที่พอร์ตที่ต้องการ
  2. รัน npx portpreview 3000 เพื่อสร้าง URL HTTPS สาธารณะ
  3. ใน Stripe Dashboard ไปที่ Developers → Webhooks แล้วเพิ่ม URL ทันเนลพร้อม path ของ Webhook
  4. เลือกเหตุการณ์ที่ต้องการทดสอบ (เช่น checkout.session.completed, invoice.paid)
  5. ส่งเหตุการณ์ทดสอบจาก Dashboard หรือ CLI ของ Stripe แล้วตรวจดูการส่งแต่ละครั้ง
  6. ยืนยันว่า handler ตอบกลับ 2xx และการตรวจสอบลายเซ็นผ่าน

PortPreview บันทึก header, body และสถานะการตอบกลับ ทำให้คุณดีบักการส่งที่ล้มเหลวได้โดยไม่ต้องเดาจาก log ของเซิร์ฟเวอร์เพียงอย่างเดียว

ตรวจสอบลายเซ็น Webhook ของ Stripe บนเครื่องโลคัล

อย่าปิดการตรวจสอบลายเซ็นระหว่างพัฒนาเด็ดขาด Stripe เซ็นทุก payload ด้วย secret ของ Webhook คุณ และ handler ควรตรวจสอบ header Stripe-Signature ให้เหมือนกับบนโปรดักชันทุกประการ เครื่องมือทันเนลที่รักษา header เดิมไว้จะช่วยให้คุณทดสอบเส้นทางโค้ดจริง

ข้อผิดพลาดด้านลายเซ็นที่พบบ่อยระหว่างทดสอบโลคัล:

  • ใช้ Webhook secret ผิดตัว (secret จาก Dashboard เทียบกับ secret จาก CLI)
  • อ่าน body JSON ที่ parse แล้วก่อนการตรวจสอบ แทนที่จะใช้ body ดิบของคำขอ
  • นาฬิกาคลาดเคลื่อนเกินช่วงที่ Stripe ยอมรับ

เหตุการณ์ที่ควรทดสอบบนเครื่องโลคัล

Checkout และการสมัครสมาชิก

ทดสอบ checkout.session.completed, customer.subscription.created และ invoice.payment_failed เพื่อยืนยันการจัดสรรสิทธิ์ การให้สิทธิ์เข้าถึง และตรรกะการทวงชำระ

ฟลว์ Connect และมาร์เก็ตเพลส

หากคุณใช้ Stripe Connect ให้ตรวจสอบเหตุการณ์อัปเดตบัญชีและการแจ้งเตือนการโอนด้วยบัญชีเชื่อมต่อทดสอบก่อนเปิดใช้งานจริง

Idempotency และการลองใหม่

Stripe จะลองส่งซ้ำเมื่อการส่งล้มเหลว ใช้ การรีเพลย์ Webhook เพื่อยืนยันว่า handler ประมวลผลเหตุการณ์ซ้ำได้อย่างปลอดภัย

Stripe CLI กับทันเนล localhost

Stripe CLI ส่งต่อเหตุการณ์ได้ด้วย stripe listen --forward-to ซึ่งเหมาะกับการตรวจสอบเร็วๆ ส่วนทันเนล localhost ให้ URL สาธารณะที่เสถียร นำไปวางใน Dashboard แชร์กับทีม และใช้ได้กับหลายผู้ให้บริการ ไม่ใช่แค่ Stripe หลายทีมใช้ทั้งสองอย่าง: CLI สำหรับการพัฒนาเร็วๆ และทันเนลสำหรับการทดสอบแบบ integration ที่สะท้อนการตั้งค่าโปรดักชัน

เมื่อไรควรย้ายจากโลคัลไป staging

การทดสอบโลคัลครอบคลุมตรรกะของ handler การ parse payload และการตรวจสอบลายเซ็น ให้ย้ายไป staging สำหรับการตรวจสอบเฉพาะสภาพแวดล้อม เช่น secret ที่จัดการแบบ managed การ migrate ฐานข้อมูล และ pipeline release แบบ end-to-end สำหรับงานฟีเจอร์การชำระเงินประจำวัน การทดสอบ Webhook ของ Stripe บนเครื่องโลคัลช่วยลดเวลาวนรอบจากนาทีเหลือวินาที

อ่านคู่มือฉบับเต็มเรื่อง การดีบัก Webhook บนเครื่องโลคัล หรือ เข้าร่วม waitlist ของ PortPreview สำหรับเวิร์กโฟลว์ทันเนลที่เน้น Webhook

คำถามที่พบบ่อย

จะทดสอบ Webhook ของ Stripe บน localhost ได้อย่างไร?
รันแอปบนเครื่องโลคัล เปิดทันเนลด้วย PortPreview เพื่อรับ URL HTTPS สาธารณะ แล้วเพิ่ม URL นั้นเป็นปลายทาง Webhook ใน Stripe Dashboard จากนั้นส่งเหตุการณ์โหมดทดสอบและตรวจดูการส่งแต่ละครั้ง
การตรวจสอบลายเซ็นของ Stripe ทำงานผ่านทันเนลได้ไหม?
ได้ ตราบใดที่ทันเนลรักษา header และ body เดิมของคำขอไว้ PortPreview ส่งต่อ header แบบไม่แตะต้อง ทำให้การตรวจสอบ Stripe-Signature ทำงานเหมือนกับบนโปรดักชัน
ควรใช้ Stripe CLI หรือทันเนล localhost?
Stripe CLI รวดเร็วสำหรับการดีบักคนเดียว ส่วนทันเนล localhost ให้ URL สาธารณะที่เสถียรสำหรับตั้งค่าใน Dashboard แชร์กับทีม และทดสอบ Webhook หลายผู้ให้บริการที่สะท้อนการตั้งค่าโปรดักชัน