Case Study

ตัวอย่างเคส: WooCommerce Order ไม่เข้าเพราะ Webhook Error

ตัวอย่างเคส: WooCommerce Order ไม่เข้าเพราะ Webhook Error

หนึ่งในปัญหาที่เจ้าของร้านค้าออนไลน์บน WooCommerce เจอบ่อยแต่มักหาสาเหตุไม่เจอ คือ ออเดอร์หายหรือสถานะไม่อัปเดต ทั้ง ๆ ที่ลูกค้าจ่ายเงินสำเร็จแล้ว ปัญหานี้มักเกิดจาก Webhook Error ที่ระบบชำระเงิน (เช่น Omise, Stripe, 2C2P) ส่งการแจ้งเตือนมาที่เว็บแล้วเว็บไม่รับ ทำให้ออเดอร์ค้างอยู่ที่สถานะ “รอดำเนินการ” ตลอดไป บทความนี้จะพาคุณไล่เหตุผลและขั้นตอนแก้ไขแบบละเอียด

nn

อาการที่พบ

n

ก่อนเริ่มแก้ไข ให้ตรวจสอบว่าเข้าข่ายปัญหา Webhook หรือไม่ อาการทั่วไปที่พบ ได้แก่:

n

    n

  • ลูกค้าแจ้งว่าจ่ายเงินสำเร็จ มีสลิปหรือรายการหักบัญชี แต่ออเดอร์ใน WooCommerce ยังเป็น Pending Payment
  • n

  • ไม่มีอีเมลยืนยันออเดอร์ส่งให้ลูกค้าและร้านค้า
  • n

  • หน้า Checkout วนกลับมาหน้าเดิม หรือแสดงข้อผิดพลาดหลังชำระ
  • n

  • Dashboard ของ Payment Gateway แสดงธุรกรรมสำเร็จ แต่ใน WooCommerce ไม่มีออเดอร์ใหม่
  • n

nn

กู้เว็บ WordPress กลับมาปกติ — WP Doctor Thailand
กู้เว็บ WordPress ให้กลับมาสะอาดและทำงานได้ตามปกติ

nn

สาเหตุที่พบบ่อย

n

Webhook คือ URL ที่ Payment Gateway จะ POST ข้อมูลมาเมื่อการชำระเงินเสร็จสมบูรณ์ ถ้า URL นั้นตอบสนองไม่ได้ ออเดอร์จะไม่เปลี่ยนสถานะ สาเหตุหลักมีดังนี้:

n

    n

  • Webhook URL ผิดหรือเปลี่ยนไป — เกิดหลังย้ายโฮสต์ เปลี่ยนโดเมน หรือเปิด HTTPS ใหม่
  • n

  • Firewall/Security Plugin บล็อก IP — Wordfence, iThemes Security หรือ Cloudflare บล็อก IP ของ Payment Gateway ไว้
  • n

  • SSL Certificate มีปัญหา — Gateway ไม่ยอมส่งข้อมูลมาที่ URL ที่ใบรับรองหมดอายุหรือ self-signed
  • n

  • เว็บโหลดช้า / PHP timeout — สคริปต์ตอบกลับ Webhook ไม่ทัน Gateway จึง retry ซ้ำหรือหยุดส่ง
  • n

  • Plugin ขัดแย้งกัน — Plugin อื่นเปลี่ยน URL structure หรือดัก hook ของ WooCommerce ก่อน
  • n

nn

วิธีตรวจสอบ Webhook Error

n

ทำตามขั้นตอนนี้เพื่อระบุสาเหตุให้ชัดขึ้น:

n

    n

  • ดู WooCommerce Logs: ไปที่ WooCommerce > Status > Logs กรองตาม plugin ของ Payment Gateway เช่น omise-woocommerce หรือ stripe หาข้อความ webhook, IPN, หรือ HTTP 4xx/5xx
  • n

  • ตรวจ Dashboard ของ Gateway: เปิดหน้า Webhook ของ Omise/Stripe แล้วดู “Attempts” หรือ “Delivery History” จะเห็น response code ที่เว็บตอบกลับ
  • n

  • ทดสอบ Webhook URL: ใช้เครื่องมือออนไลน์เช่น webhook.site หรือ Postman POST ไปที่ URL เดียวกัน ดูว่าเว็บตอบกลับ 200 OK หรือเปล่า
  • n

  • ตรวจ Server Error Log: ดู error_log ใน cPanel หรือ /var/log/apache2/error.log หาบรรทัดที่ตรงกับเวลาที่ลูกค้าชำระเงิน
  • n

nn

สิ่งสำคัญที่ต้องตรวจก่อนเสมอ: เปิด WooCommerce Logs และ Webhook Delivery History ใน Dashboard ของ Payment Gateway คู่กัน — คุณจะเห็นทันทีว่า Gateway ส่ง Webhook มาแล้วหรือยัง และเว็บตอบกลับด้วย HTTP status อะไร

nn

บริการแก้ WordPress ล่ม / Error — WP Doctor Thailand
การวิเคราะห์และไล่หาต้นเหตุของ Error อย่างเป็นระบบ

nn

วิธีแก้ไขทีละขั้นตอน

n

เมื่อรู้สาเหตุแล้ว ให้แก้ไขตามข้อที่ตรงกัน:

n

    n

  • อัปเดต Webhook URL ใน Dashboard ของ Gateway: URL มาตรฐานของ WooCommerce คือ https://yourdomain.com/?wc-api=[gateway_id] หรือ https://yourdomain.com/wc-api/[gateway_id]/ ขึ้นอยู่กับ plugin — ตรวจสอบในเอกสารของ Payment Gateway ที่ใช้
  • n

  • Whitelist IP ของ Gateway: นำ IP range ของ Omise/Stripe/2C2P ไปเพิ่มใน Whitelist ของ Wordfence (Wordfence > Firewall > Allowlisted IPs) หรือ Cloudflare WAF Rules
  • n

  • ต่ออายุ SSL: ถ้า SSL หมดอายุให้ต่ออายุทันที หลังจากนั้นใช้คำสั่ง curl -I https://yourdomain.com เพื่อยืนยันว่า HTTPS ใช้ได้ปกติ
  • n

  • เพิ่ม PHP max_execution_time: ใส่ max_execution_time = 120 ใน php.ini หรือ .htaccess (php_value max_execution_time 120) แล้วทดสอบใหม่
  • n

  • ทดสอบ Disable Plugin ทีละตัว: ปิด Security Plugin และ Cache Plugin ทีละตัวแล้วทดสอบการชำระเงิน ถ้าผ่านแสดงว่า plugin นั้นคือตัวการ
  • n

  • Resend Webhook: Payment Gateway ส่วนใหญ่มีปุ่ม “Resend” หรือ “Retry” ใน Webhook Delivery History ใช้ฟีเจอร์นี้ทดสอบหลังแก้ไขแล้วโดยไม่ต้องให้ลูกค้าจ่ายซ้ำ
  • n

nn

สำหรับกรณีที่ออเดอร์ค้างอยู่แล้ว สามารถอัปเดตสถานะด้วยตนเองได้ที่ WooCommerce > Orders > [ออเดอร์] > Order Status เปลี่ยนเป็น Processing หรือ Completed แล้วกด Save — แต่ควรแก้ต้นตอก่อนเพื่อไม่ให้เกิดซ้ำ หากคุณพบว่า WooCommerce Checkout ไม่ทำงาน ร่วมด้วย อาจมีปัญหาลึกกว่านี้ที่ต้องตรวจสอบเพิ่มเติม

nn

วิธีป้องกันไม่ให้เกิดซ้ำ

n

    n

  • ตั้ง Webhook Monitoring: ใช้บริการอย่าง UptimeRobot หรือ Better Uptime ส่ง Alert เมื่อ Webhook URL ตอบสนองผิดปกติ
  • n

  • ทุกครั้งที่ ย้ายโฮสต์หรือเปลี่ยนโดเมน ให้อัปเดต Webhook URL ใน Dashboard ของ Gateway เป็นขั้นตอนแรกเสมอ
  • n

  • ตรวจสอบ SSL Certificate ก่อนหมดอายุอย่างน้อย 30 วัน ตั้ง Auto-Renew ถ้าโฮสต์รองรับ
  • n

  • ทดสอบ Payment Flow ด้วย Test Mode ทุกครั้งหลังอัปเดต WooCommerce หรือ Plugin ที่เกี่ยวข้อง
  • n

  • เก็บ Log ไว้อย่างน้อย 30 วัน เพื่อให้ตรวจสอบย้อนหลังได้เมื่อมีปัญหา
  • n

nn

เมื่อไหร่ควรเรียกผู้เชี่ยวชาญ

n

ถ้าคุณทำตามขั้นตอนด้านบนแล้วยังพบปัญหา หรือ Webhook Delivery History แสดงว่า Gateway ส่งข้อมูลมาถูกต้องแต่ WooCommerce ไม่รับ อาจมีความผิดพลาดในระดับโค้ดหรือ Database ที่ต้องใช้ผู้เชี่ยวชาญวิเคราะห์ นอกจากนี้ หากเว็บมีอาการผิดปกติอื่นร่วมด้วย เช่น มีการ Redirect ไปเว็บที่ไม่รู้จัก หรือ Error 500 หลังอัปเดต ควรตรวจสอบความปลอดภัยของเว็บด้วย เพราะ Malware บางชนิดดักจับ Request และทำให้ Webhook ล้มเหลว ศึกษาเพิ่มเติมได้จาก Checklist ความปลอดภัย WordPress หรือติดต่อทีมงานเพื่อขอรับบริการ ล้างไวรัส WordPress และตรวจสอบระบบอย่างละเอียด

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

ทำไม Payment Gateway บอกว่าชำระสำเร็จ แต่ WooCommerce ไม่มีออเดอร์?

เกิดจาก Webhook ที่ Gateway ส่งมาเพื่อแจ้งผลการชำระเงินไม่สามารถเข้าถึงเว็บได้ อาจถูก Firewall บล็อก URL ผิด หรือ SSL มีปัญหา ให้ตรวจ Webhook Delivery History ใน Dashboard ของ Gateway เป็นขั้นแรก

Webhook URL ของ WooCommerce คือ URL อะไร?

โดยทั่วไปคือ https://yourdomain.com/?wc-api=[gateway_id] หรือในรูปแบบ Pretty Permalink เป็น https://yourdomain.com/wc-api/[gateway_id]/ ขึ้นอยู่กับ Plugin ของ Payment Gateway ที่ใช้งาน ให้ตรวจสอบในเอกสารของ Plugin นั้น ๆ

ถ้าออเดอร์ค้างเป็น Pending Payment จะอัปเดตสถานะได้อย่างไร?

เข้าไปที่ WooCommerce > Orders แล้วเปิดออเดอร์นั้น เปลี่ยน Order Status เป็น Processing หรือ Completed ด้วยตนเอง แต่ควรแก้ไขสาเหตุของ Webhook ด้วย ไม่เช่นนั้นจะเกิดซ้ำกับออเดอร์ถัดไป

Wordfence หรือ Security Plugin บล็อก Webhook ได้ด้วยหรือ?

ได้ Wordfence และ Plugin ด้านความปลอดภัยหลายตัวมี Rate Limiting และ IP Blocking ที่อาจบล็อก IP ของ Payment Gateway ให้นำ IP range ของ Gateway ไปเพิ่มใน Allowlisted IPs ของ Wordfence หรือ Whitelist ใน Cloudflare

บทความอื่นในหมวดนี้

LINE ส่งปัญหา