WooCommerce Troubleshooting

Webhook และ Callback ในระบบชำระเงินคืออะไร

Webhook และ Callback ในระบบชำระเงินคืออะไร

เมื่อลูกค้าจ่ายเงินผ่านเว็บ WooCommerce ของคุณ มีกระบวนการเบื้องหลังที่ทำงานอยู่ตลอดเวลาโดยที่คุณอาจไม่เคยสังเกตเห็น หนึ่งในนั้นคือ Webhook และ Callback ซึ่งเป็นกลไกสำคัญที่ทำให้ระบบชำระเงินรู้ว่าการโอนเงินสำเร็จหรือล้มเหลว และอัปเดตสถานะ Order ให้อัตโนมัติ ถ้าระบบนี้มีปัญหา คุณจะเจออาการเช่น ลูกค้าจ่ายเงินแล้วแต่ Order ยังค้างสถานะ “Pending” หรือไม่มีอีเมลยืนยันส่งออกไป ซึ่งเชื่อมโยงโดยตรงกับปัญหา WooCommerce Checkout ไม่ได้ กดสั่งซื้อไม่ทำงาน ที่พบบ่อยมากในไทย

nn

Webhook และ Callback คืออะไร ต่างกันอย่างไร

n

ทั้งสองคำนี้หมายถึงการที่ระบบภายนอก (เช่น Payment Gateway) ส่งข้อมูลมาหาเว็บของคุณโดยอัตโนมัติ แต่มีความแตกต่างเล็กน้อย:

n

    n

  • Callback URL คือ URL บนเว็บคุณที่คุณส่งให้ Payment Gateway เก็บไว้ เมื่อธุรกรรมเสร็จสิ้น Gateway จะ POST ข้อมูลผลการชำระเงินมาที่ URL นี้ทันที เรียกอีกชื่อว่า IPN (Instant Payment Notification) หรือ Return URL
  • n

  • Webhook คือกลไกเดียวกัน แต่มักใช้กับระบบที่ทันสมัยกว่า เช่น Omise, Stripe หรือ 2C2P โดย Gateway จะ Push เหตุการณ์ (Event) ต่าง ๆ มาให้เว็บคุณแบบ Real-time
  • n

n

ใน WooCommerce ตัวอย่าง Callback URL ของ Omise จะหน้าตาประมาณนี้: https://yoursite.com/?wc-api=omise และของ PromptPay บางปลั๊กอินจะเป็น https://yoursite.com/wc-api/gbprimepay_webhook

nn

WooCommerce ออเดอร์/อีเมลไม่เข้า — WP Doctor Thailand
ปัญหา Order และอีเมลแจ้งเตือนใน WooCommerce

nn

ทำไม Webhook ถึงล้มเหลว — สาเหตุที่พบบ่อย

n

เมื่อ Webhook ไม่ทำงาน ผลคือ Order ค้าง Pending ไม่อัปเดตเป็น Processing หรือ Complete ซึ่งสาเหตุหลักมีดังนี้:

n

    n

  • URL ไม่ถูกต้อง — ตั้งค่า Callback URL ผิดใน Dashboard ของ Payment Gateway เช่น URL มี typo หรือลืมใส่ https
  • n

  • SSL/TLS ไม่ถูกต้อง — Gateway ส่วนใหญ่ต้องการ HTTPS และ SSL Certificate ที่ valid หาก Certificate หมดอายุหรือ Self-signed อาจถูกปฏิเสธ
  • n

  • Firewall หรือ Security Plugin บล็อก — Wordfence หรือ Cloudflare อาจตีความ Request จาก Gateway ว่าเป็น Bot แล้วบล็อก IP
  • n

  • เว็บล่มหรือช้าเกินไป — ถ้าเว็บตอบสนองช้ากว่า Timeout ของ Gateway Webhook จะถูกมองว่า Failed
  • n

  • WC-API ไม่ทำงาน — Permalink ไม่ได้ตั้งค่า หรือ REST API ถูก Disable โดยปลั๊กอิน ทำให้ URL /?wc-api=... ไม่ตอบสนอง
  • n

nn

สรุปสั้น: Webhook คือช่องทางที่ Payment Gateway ใช้บอกเว็บว่า “จ่ายสำเร็จแล้ว” — ถ้าช่องทางนี้ขาด Order จะค้าง Pending ตลอดไม่ว่าลูกค้าจะจ่ายเงินจริงหรือไม่

nn

วิธีตรวจสอบ Webhook/Callback เบื้องต้น

n

ก่อนแก้ไข ให้ตรวจสอบว่าปัญหาอยู่ที่ไหนก่อน:

n

    n

  • ดู WooCommerce Order Notes — เข้า WooCommerce > Orders > เปิด Order ที่มีปัญหา > ดูส่วน “Order Notes” ด้านขวา ถ้าไม่มีบันทึกใด ๆ จาก Gateway แสดงว่า Webhook ยังไม่เคยเข้ามาถึงเว็บ
  • n

  • เช็ค WooCommerce Status Log — ไปที่ WooCommerce > Status > Logs เลือก Log ของ Plugin ชำระเงินที่ใช้ (เช่น omise, gbprimepay) จะเห็น Request/Response ที่รับมา
  • n

  • ทดสอบ Callback URL ด้วย Browser — เปิด URL เช่น https://yoursite.com/?wc-api=omise ในเบราว์เซอร์ ถ้าได้ Error 404 แสดงว่า WC-API ไม่ทำงาน ให้ไป Settings > Permalinks > Save เพื่อ Flush Rewrite Rules
  • n

  • ตรวจสอบ Gateway Dashboard — เข้า Portal ของ Omise, GBPrimePay หรือ 2C2P แล้วดูหัวข้อ Webhook Events หรือ Transaction Log จะเห็นว่า Gateway ส่ง Webhook ออกไปหรือยัง และได้ Response อะไรกลับ
  • n

n

หากปัญหาอยู่ที่ Order ไม่อัปเดตสถานะ แนะนำให้อ่านต่อที่ Omise / Opn Payment ไม่อัปเดตสถานะ Order ทำยังไง ซึ่งครอบคลุมกรณีนี้โดยตรง

nn

แก้ปัญหา WooCommerce — WP Doctor Thailand
ตรวจสอบและแก้ปัญหาระบบร้านค้า WooCommerce

nn

วิธีแก้ไขปัญหา Webhook ทีละขั้นตอน

n

1. Flush Permalink

n

ไป WordPress Admin > Settings > Permalinks > กดปุ่ม “Save Changes” โดยไม่ต้องเปลี่ยนค่าอะไร วิธีนี้บังคับให้ WordPress สร้าง Rewrite Rules ใหม่ ซึ่งแก้ปัญหา 404 บน WC-API ได้บ่อยมาก

nn

2. ตรวจสอบและอัปเดต Callback URL ใน Gateway

n

เปิด Plugin Settings ของ Payment Gateway ใน WooCommerce (WooCommerce > Settings > Payments) แล้วคัดลอก Webhook URL หรือ Callback URL ที่ระบุไว้ จากนั้นเข้า Portal ของ Gateway แล้วตรวจสอบว่า URL ที่บันทึกไว้ตรงกันทุกตัวอักษร

nn

3. Whitelist IP ของ Gateway ใน Firewall

n

ถ้าใช้ Wordfence หรือ Cloudflare ให้ค้นหา IP Range ของ Gateway (มักระบุไว้ใน Documentation ของ Gateway) แล้ว Whitelist ไว้ใน Firewall Rules เพื่อป้องกันไม่ให้ Webhook ถูกบล็อก

nn

4. ทดสอบด้วย Webhook.site

n

ไปที่ webhook.site แล้วคัดลอก URL ชั่วคราวที่สร้างให้ นำไปใส่เป็น Callback URL ในระบบ Gateway แทน จากนั้นลองทำ Test Transaction ดู ถ้า Webhook มาถึง Webhook.site แปลว่า Gateway ส่งได้ปกติ แต่ปัญหาอยู่ที่เว็บของคุณ

nn

5. ตรวจสอบ PHP Error Log

n

ให้เปิด Debug Log โดยเพิ่มบรรทัดนี้ใน wp-config.php:
ndefine('WP_DEBUG', true); define('WP_DEBUG_LOG', true);
nแล้วดูไฟล์ wp-content/debug.log เพื่อหา PHP Fatal Error ที่เกิดขึ้นเมื่อ Webhook เข้ามา

nn

ปัญหา Webhook มักส่งผลต่อ WooCommerce Order ไม่เข้า และ WooCommerce Email ไม่ส่ง ไปพร้อมกัน เพราะทั้งสองอย่างนี้ถูก Trigger จากเหตุการณ์เดียวกันคือการเปลี่ยนสถานะ Order

nn

การป้องกันปัญหา Webhook ในระยะยาว

n

    n

  • ต่ออายุ SSL Certificate ก่อนหมด และทดสอบว่า HTTPS ทำงานถูกต้องเสมอ
  • n

  • หลังอัปเดต WordPress, WooCommerce หรือ Plugin ชำระเงิน ให้ทำ Test Transaction จริงทุกครั้ง
  • n

  • ตั้ง Monitoring เว็บ (เช่น UptimeRobot) เพื่อให้รู้ทันทีเมื่อเว็บล่ม ซึ่งจะทำให้ Webhook Miss
  • n

  • เปิด Log ของ Plugin ชำระเงินไว้ตลอด แล้วเข้าไปตรวจสอบสัปดาห์ละครั้ง
  • n

  • ถ้ามีปัญหาเรื่อง Performance ให้แก้ไขด้วย เพราะ Cart และ Checkout ที่โหลดช้า อาจทำให้ Webhook Timeout ได้เช่นกัน
  • n

nn

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

n

ถ้าคุณทำตามขั้นตอนข้างต้นครบแล้วแต่ปัญหายังไม่หาย หรือถ้า Gateway Log แสดงว่าส่ง Webhook สำเร็จ (Status 200) แต่ Order ยังไม่อัปเดต อาจมีปัญหาเชิงลึกในระดับ PHP หรือ Database Transaction ที่ต้องการการตรวจสอบโดยตรง ทีม บริการแก้ปัญหา WooCommerce ของเราพร้อมช่วยตรวจสอบ Webhook Log, Config และ Server Environment ให้ครบถ้วนภายในวันเดียว

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

Webhook กับ Return URL ต่างกันอย่างไร?

Return URL คือหน้าที่ลูกค้าถูก Redirect กลับมาหลังจ่ายเงิน ส่วน Webhook (หรือ Callback URL) คือ URL ที่ Gateway ส่งข้อมูลผลธุรกรรมมาให้เว็บโดยตรงแบบเบื้องหลัง ไม่เกี่ยวกับการกระทำของลูกค้า ดังนั้นแม้ลูกค้าปิดเบราว์เซอร์ก่อนถูก Redirect Webhook ก็ยังทำงานได้ตามปกติ

Order ค้าง Pending หมายความว่า Webhook ล้มเหลวเสมอไปหรือเปล่า?

ไม่เสมอไป Order ค้าง Pending อาจเกิดจากลูกค้ากดยกเลิกการชำระ, การเชื่อมต่อหลุดกลางคัน, หรือการตั้งค่า Payment Method ให้ใช้ Manual Payment อยู่แล้ว แต่ถ้าลูกค้าจ่ายเงินสำเร็จและตัดเงินออกไปแล้ว Order ยังค้าง Pending นั่นมักเป็นสัญญาณชัดว่า Webhook มีปัญหา

ทดสอบ Webhook ได้อย่างไรโดยไม่ต้องจ่ายเงินจริง?

Payment Gateway ส่วนใหญ่มี Sandbox หรือ Test Mode ให้ใช้งาน เพียงสลับปลั๊กอินไปโหมด Test แล้วใช้ Test Card หรือ Test QR ที่ Gateway กำหนด จากนั้นดูผลใน WooCommerce Order Notes และ Gateway Dashboard เพื่อยืนยันว่า Webhook ส่งและรับสำเร็จ

Cloudflare ทำให้ Webhook พัง ได้จริงหรือ?

ได้จริง Cloudflare มี Bot Fight Mode และ WAF Rules ที่อาจบล็อก Request จาก IP ของ Payment Gateway ได้ วิธีแก้คือไป Cloudflare Dashboard แล้วเพิ่ม Firewall Rule ให้ Bypass การตรวจสอบสำหรับ URL ของ Webhook เช่น URI Path contains wc-api

อ่านบทความหลักของหมวดนี้ WooCommerce Checkout ไม่ได้ เกิดจากอะไร

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

LINE ส่งปัญหา