Case Study

ตัวอย่างสถานการณ์: WooCommerce Order ไม่เข้าเพราะ Webhook Error

ตัวอย่างสถานการณ์: WooCommerce Order ไม่เข้าเพราะ Webhook Error

สรุปคำตอบ

ปัญหาคือลูกค้าชำระเงินสำเร็จและ Payment Gateway เช่น Omise หรือ Stripe แสดงธุรกรรมสำเร็จ แต่ออเดอร์ใน WooCommerce ค้างเป็น Pending Payment และไม่มีอีเมลยืนยัน สาเหตุคือ Webhook ที่ Gateway ส่งมาแจ้งผลเข้าเว็บไม่ได้ เช่น URL ผิดหลังย้ายโฮสต์ Firewall บล็อก IP ของ Gateway หรือ SSL หมดอายุ วิธีแก้คือดู WooCommerce Logs คู่กับ Webhook Delivery History แก้ต้นเหตุให้ตรงจุด แล้วกด Resend จนเว็บตอบกลับ 200 OK และออเดอร์เปลี่ยนสถานะได้ตามปกติ

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

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

อาการที่พบ

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

  • ลูกค้าแจ้งว่าจ่ายเงินสำเร็จ มีสลิปหรือรายการหักบัญชี แต่ออเดอร์ใน WooCommerce ยังเป็น Pending Payment
  • ไม่มีอีเมลยืนยันออเดอร์ส่งให้ลูกค้าและร้านค้า
  • หน้า Checkout วนกลับมาหน้าเดิม หรือแสดงข้อผิดพลาดหลังชำระ
  • Dashboard ของ Payment Gateway แสดงธุรกรรมสำเร็จ แต่ใน WooCommerce ไม่มีออเดอร์ใหม่
กู้เว็บ WordPress กลับมาปกติ — WP Doctor Thailand
ลูกค้าจ่ายเงินแล้ว แต่ออเดอร์ค้าง Pending เพราะ Webhook ส่งกลับมาไม่ถึงเว็บ

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

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

  • Webhook URL ผิดหรือเปลี่ยนไป — เกิดหลังย้ายโฮสต์ เปลี่ยนโดเมน หรือเปิด HTTPS ใหม่
  • Firewall/Security Plugin บล็อก IP — Wordfence, iThemes Security หรือ Cloudflare บล็อก IP ของ Payment Gateway ไว้
  • SSL Certificate มีปัญหา — Gateway ไม่ยอมส่งข้อมูลมาที่ URL ที่ใบรับรองหมดอายุหรือ self-signed
  • เว็บโหลดช้า / PHP timeout — สคริปต์ตอบกลับ Webhook ไม่ทัน Gateway จึง retry ซ้ำหรือหยุดส่ง
  • Plugin ขัดแย้งกัน — Plugin อื่นเปลี่ยน URL structure หรือดัก hook ของ WooCommerce ก่อน

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

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

  • ดู WooCommerce Logs: ไปที่ WooCommerce > Status > Logs กรองตาม plugin ของ Payment Gateway เช่น omise-woocommerce หรือ stripe หาข้อความ webhook, IPN, หรือ HTTP 4xx/5xx
  • ตรวจ Dashboard ของ Gateway: เปิดหน้า Webhook ของ Omise/Stripe แล้วดู “Attempts” หรือ “Delivery History” จะเห็น response code ที่เว็บตอบกลับ
  • ทดสอบ Webhook URL: ใช้เครื่องมือออนไลน์เช่น webhook.site หรือ Postman POST ไปที่ URL เดียวกัน ดูว่าเว็บตอบกลับ 200 OK หรือเปล่า
  • ตรวจ Server Error Log: ดู error_log ใน cPanel หรือ /var/log/apache2/error.log หาบรรทัดที่ตรงกับเวลาที่ลูกค้าชำระเงิน
สิ่งสำคัญที่ต้องตรวจก่อนเสมอ: เปิด WooCommerce Logs และ Webhook Delivery History ใน Dashboard ของ Payment Gateway คู่กัน — คุณจะเห็นทันทีว่า Gateway ส่ง Webhook มาแล้วหรือยัง และเว็บตอบกลับด้วย HTTP status อะไร
บริการแก้ WordPress ล่ม / Error — WP Doctor Thailand
การวิเคราะห์และไล่หาต้นเหตุของ Error อย่างเป็นระบบ

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

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

  • อัปเดต Webhook URL ใน Dashboard ของ Gateway: URL มาตรฐานของ WooCommerce คือ https://yourdomain.com/?wc-api=[gateway_id] หรือ https://yourdomain.com/wc-api/[gateway_id]/ ขึ้นอยู่กับ plugin — ตรวจสอบในเอกสารของ Payment Gateway ที่ใช้
  • Whitelist IP ของ Gateway: นำ IP range ของ Omise/Stripe/2C2P ไปเพิ่มใน Whitelist ของ Wordfence (Wordfence > Firewall > Allowlisted IPs) หรือ Cloudflare WAF Rules
  • ต่ออายุ SSL: ถ้า SSL หมดอายุให้ต่ออายุทันที หลังจากนั้นใช้คำสั่ง curl -I https://yourdomain.com เพื่อยืนยันว่า HTTPS ใช้ได้ปกติ
  • เพิ่ม PHP max_execution_time: ใส่ max_execution_time = 120 ใน php.ini หรือ .htaccess (php_value max_execution_time 120) แล้วทดสอบใหม่
  • ทดสอบ Disable Plugin ทีละตัว: ปิด Security Plugin และ Cache Plugin ทีละตัวแล้วทดสอบการชำระเงิน ถ้าผ่านแสดงว่า plugin นั้นคือตัวการ
  • Resend Webhook: Payment Gateway ส่วนใหญ่มีปุ่ม “Resend” หรือ “Retry” ใน Webhook Delivery History ใช้ฟีเจอร์นี้ทดสอบหลังแก้ไขแล้วโดยไม่ต้องให้ลูกค้าจ่ายซ้ำ

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

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

  • ตั้ง Webhook Monitoring: ใช้บริการอย่าง UptimeRobot หรือ Better Uptime ส่ง Alert เมื่อ Webhook URL ตอบสนองผิดปกติ
  • ทุกครั้งที่ ย้ายโฮสต์หรือเปลี่ยนโดเมน ให้อัปเดต Webhook URL ใน Dashboard ของ Gateway เป็นขั้นตอนแรกเสมอ
  • ตรวจสอบ SSL Certificate ก่อนหมดอายุอย่างน้อย 30 วัน ตั้ง Auto-Renew ถ้าโฮสต์รองรับ
  • ทดสอบ Payment Flow ด้วย Test Mode ทุกครั้งหลังอัปเดต WooCommerce หรือ Plugin ที่เกี่ยวข้อง
  • เก็บ Log ไว้อย่างน้อย 30 วัน เพื่อให้ตรวจสอบย้อนหลังได้เมื่อมีปัญหา

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

ถ้าคุณทำตามขั้นตอนด้านบนแล้วยังพบปัญหา หรือ 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

Webhook ใน WooCommerce คืออะไร?

Webhook คือ URL ที่ Payment Gateway ส่งข้อมูล (POST) มาแจ้งเว็บเมื่อการชำระเงินเสร็จสมบูรณ์ WooCommerce ใช้ข้อมูลนี้เปลี่ยนสถานะออเดอร์และส่งอีเมลยืนยัน ถ้า URL นี้ตอบกลับไม่ได้ ออเดอร์จะค้างอยู่ที่ Pending Payment

ย้ายโฮสต์หรือเปลี่ยนโดเมนแล้ว ต้องทำอะไรกับ Webhook บ้าง?

ให้อัปเดต Webhook URL ใน Dashboard ของ Payment Gateway เป็นโดเมนใหม่เป็นขั้นตอนแรก ตรวจว่า SSL ใช้งานได้ แล้วทดสอบการชำระเงินด้วย Test Mode เพื่อยืนยันว่าออเดอร์เปลี่ยนสถานะได้ถูกต้อง

บทความที่เกี่ยวข้อง

เคสจริง: ขโมยบัตรเครดิต WooCommerce ผ่านปลั๊กอินปลอม แก้จบใน 1 วัน

ร้านกระเป๋าบน WooCommerce เห็นฟอร์มบัตรแปลกในหน้าชำระเงินแล้วซ่อนด้วย CSS แต่โค้ดยังทำงานต่อ เราพบปลั๊กอินปลอมขโมยบัตรและรหัสผ่าน, EtherHiding ใน Code Snippets, Web Shell 15 ไฟล์ และสแปมคาสิโน 380 โพสต์ ล้างจบในวันเดียว

36 นาที 29 Oct 2026
อ่านต่อ

Google แจ้ง Unwanted Software หรือ Harmful Downloads คืออะไร เว็บต้องแก้อย่างไร

Search Console แจ้ง Harmful downloads หรือ Uncommon downloads แปลว่าอะไร นโยบาย Unwanted Software ของ Google ว่าไว้อย่างไร และเว็บ WordPress ต้องหาไฟล์หรือลิงก์ต้นเหตุ แก้ และขอ Review อย่างไร

25 นาที 31 Oct 2026
อ่านต่อ
LINE ส่งปัญหา