
สรุปคำตอบ
ปัญหา Omise ไม่อัปเดตสถานะ Order คือกรณีที่ลูกค้าจ่ายเงินผ่าน Omise (ปัจจุบันคือ Opn Payments) สำเร็จแล้ว แต่ Order ใน WooCommerce ยังค้างเป็น Pending Payment หรือ On Hold สาเหตุที่พบบ่อยที่สุดคือ Webhook ไม่ทำงาน เช่น Endpoint URL ผิด หรือถูก Firewall, Cloudflare หรือ Security Plugin บล็อก รองลงมาคือ Plugin เวอร์ชันเก่า และ API Key ผิดหรือสลับโหมด Test กับ Live วิธีแก้คือตั้ง Webhook ใน Dashboard ใหม่เป็น https://yourdomain.com/?wc-api=omise เลือก event charge.complete และ charge.failed ตรวจ Key แล้วอัปเดต Plugin
ปัญหา Omise (เคยใช้ชื่อ Opn Payments ช่วงหนึ่ง แต่ปลั๊กอินรุ่น 6.1.0 เปลี่ยนชื่อกลับมาเป็น Omiseแล้ว) ไม่อัปเดตสถานะ Order ถือเป็นหนึ่งในปัญหาที่พบบ่อยที่สุดในร้านค้า WooCommerce ที่ใช้ระบบชำระเงินของไทย ลูกค้าโอนเงินหรือสแกน QR แล้วหน้าร้านยังแสดงสถานะ “รอดำเนินการ” ไม่เปลี่ยนเป็น “ชำระเงินแล้ว” ทำให้ทั้งเจ้าของร้านและลูกค้าสับสน และอาจสูญเสียยอดขายได้ บทความนี้รวบรวมสาเหตุที่แท้จริงและวิธีแก้ไขแบบทีละขั้นตอน
อาการที่พบและสาเหตุหลัก
อาการที่ชัดเจนคือลูกค้าจ่ายเงินสำเร็จ (เห็นยอดตัดในแอปธนาคาร) แต่หน้าร้านยังคงแสดง Order Status เป็น Pending Payment หรือ On Hold อีเมลยืนยันออร์เดอร์ไม่ถูกส่ง และสินค้าไม่ถูกตัดสต็อก สาเหตุหลักแบ่งได้ 3 กลุ่ม
- Webhook ไม่ทำงาน: Omise/Opn ส่ง event กลับมาที่ WordPress แต่เซิร์ฟเวอร์ไม่ได้รับ หรือรับแล้วตอบ error (Omise ระบุว่าการตอบที่ไม่ใช่ 2xx อาจถูกนับเป็นการส่งไม่สำเร็จ) — นี่คือสาเหตุที่พบมากที่สุด ดูรายละเอียดเพิ่มเติมได้ที่บทความ Webhook และ Callback ในระบบชำระเงินคืออะไร
- Plugin เวอร์ชันเก่าหรือ conflict: ปลั๊กอิน Omise เวอร์ชันเก่าอาจไม่รองรับ API เวอร์ชันใหม่ (รุ่น 6.2.0 อัปเดตไลบรารีให้รองรับ API 2019-05-29 ตามchangelog ของปลั๊กอิน) หรืออาจ conflict กับ plugin อื่น
- ตั้งค่า API Key ผิดหรือ mode สลับกัน: ใช้ Test Key ใน Production หรือใส่ Secret Key กับ Public Key สลับกัน และอย่าลืมว่าOmise ตั้ง webhook แยกกันระหว่างโหมด Test และ Live ต้องเพิ่ม endpoint ของโหมด Live ด้วย

วิธีตรวจสอบก่อนแก้ไข
ก่อนลงมือแก้ ให้ตรวจสอบจุดต่อไปนี้ตามลำดับ เพื่อระบุสาเหตุให้ชัดเจน
- ดู Omise/Opn Dashboard: เข้า dashboard.omise.co แล้วเปิดหน้า Webhooks (ปลั๊กอินชี้ไปที่ dashboard.omise.co/v2/settings/webhooks ตามซอร์สโค้ดหน้าตั้งค่า) หรือไปที่เมนู Developers > Webhooks ตรวจว่ามี Endpoint URL ของเว็บไซต์ถูกต้องหรือไม่ และดูรายการ Event ล่าสุดในหน้า Events ว่าถูกส่งสำเร็จหรือไม่ (เอกสาร Webhooks ของ Omise)
- ทดสอบ Webhook URL: URL ของ webhook ที่ปลั๊กอิน Omise ใช้คือ
https://yourdomain.com/wp-json/omise/webhooks(ดูได้ในช่อง Webhook endpoint ของหน้า Settings ของปลั๊กอิน ตามซอร์สโค้ด) ส่วน?wc-api=...เป็นของ callback ตอนลูกค้าถูกพากลับมาหน้าเว็บ endpoint นี้รับคำขอแบบ POST ไม่ได้ออกแบบให้เปิดดูด้วยเบราว์เซอร์ ให้ดูผลการส่ง Event ใน Dashboard แทน และตรวจว่าไม่มีปลั๊กอินปิดหรือบล็อก REST API - ดู WooCommerce System Status: ไปที่ WooCommerce > Status > Logs เลือก log ชื่อ
woocommerce-omise-YYYY-MM-DDหรือomiseซึ่งคู่มือ Logging ของ WooCommerceระบุว่าไฟล์ Log แยกตามแหล่งที่มาและวันที่ จะเห็น error message ที่เกิดขึ้นจริง - เช็ค Plugin Version: ไปที่ Plugins ตรวจว่า WooCommerce Omise / Opn Payments plugin เป็นเวอร์ชันล่าสุดหรือไม่
วิธีแก้ไขทีละขั้นตอน
1. ตั้งค่า Webhook ใน Omise/Opn Dashboard ใหม่
- เข้า Omise/Opn Dashboard > Developers > Webhooks
- ลบ Endpoint เก่าออก แล้วเพิ่มใหม่ด้วย URL ที่ปลั๊กอินแสดงในช่อง Webhook endpoint (รูปแบบ
https://yourdomain.com/wp-json/omise/webhooksและต้องเป็น HTTPS เท่านั้น ตามซอร์สโค้ดหน้าตั้งค่า) - ไม่ต้องเลือก Event เพราะ Omise ส่งทุกประเภทมาที่ endpoint แบบคงที่และไม่มีตัวเลือกกรอง (เอกสาร Webhooks) สำหรับการจ่ายด้วย PromptPay Event ที่ต้องมาถึงคือ
charge.complete(เอกสาร PromptPay ของ Omise) - กด Save แล้วกด Test ถ้ามีปุ่ม
2. ตรวจสอบและแก้ไข API Key ใน WooCommerce
- ไปที่ WooCommerce > Settings > Payments > Omise (หรือ Opn Payments) > Manage
- ตรวจว่า Live Secret Key ขึ้นต้นด้วย
skey_live_และ Live Public Key ขึ้นต้นด้วยpkey_live_ - ตรวจว่า mode เป็น Live ไม่ใช่ Test (ถ้าร้านเปิดจริงแล้ว) ตามเอกสารปลั๊กอิน Omise คีย์ตั้งที่เมนู Omise ในหน้า Settings โดยปิด Test mode และใส่ Public key กับ Secret key ของโหมด live
3. อัปเดต Plugin และแก้ Conflict
- อัปเดต WooCommerce Omise / Opn Payments plugin เป็นเวอร์ชันล่าสุด
- ถ้ายังไม่หาย ลอง deactivate plugin อื่นทีละตัว โดยเฉพาะ security plugin เช่น Wordfence หรือ firewall ที่อาจบล็อก POST request จากภายนอก — ดูเพิ่มเติมที่ วิธีแก้ Plugin Conflict ใน WooCommerce
4. ตรวจสอบ Firewall และ Hosting
- Hosting บางเจ้าบล็อก POST request จาก IP ต่างประเทศ ให้ whitelist IP ของเซิร์ฟเวอร์ webhook ของ Omise ที่ระบุไว้ในเอกสาร Webhooks (54.169.118.227, 52.74.199.175 และ 18.139.13.19 ณ วันที่สืบค้น)
- ถ้าใช้ Cloudflare ตรวจว่าไม่มีกฎ WAF บล็อก
/wp-json/omise/webhooksและถ้าเปิด Bot Fight Mode อยู่ Cloudflare ระบุว่าข้ามด้วยกฎ WAF ไม่ได้ ต้องใช้ Super Bot Fight Mode ที่รองรับกฎแบบ Skip - ถ้าเว็บมี WordPress Security Plugin ให้ตรวจ Log ว่าบล็อก request ไปหรือไม่

วิธีอัปเดตสถานะ Order ที่ค้างอยู่ด้วยตนเอง
ระหว่างที่ยังแก้ไขอยู่ ถ้ามี Order ที่ลูกค้าจ่ายแล้วแต่สถานะยังค้าง ให้แก้ไขชั่วคราวดังนี้
- ไปที่ WooCommerce > Orders > เปิด Order ที่ต้องการ
- คลิก dropdown Order Status แล้วเปลี่ยนเป็น Processing หรือ Completed ตามความเหมาะสม
- กด Update เพื่อบันทึก — ระบบจะส่งอีเมลยืนยันให้ลูกค้าโดยอัตโนมัติ
สำหรับปัญหา Order ไม่เข้าระบบในแง่อื่น สามารถอ่านเพิ่มเติมได้ที่ WooCommerce Order ไม่เข้า แก้ยังไง และถ้าพบว่าอีเมลยืนยันไม่ถูกส่งควบคู่กันให้อ่านที่ WooCommerce Email ไม่ส่ง
วิธีป้องกันปัญหาในอนาคต
- ทดสอบ Webhook ทุกครั้งหลังอัปเดต WooCommerce หรือ Omise plugin
- เปิดใช้ WooCommerce Logging เพื่อจับ error ไว้ตรวจสอบ (WooCommerce > Settings > Advanced > Logging)
- ตรวจรายการ Event ใน Omise Dashboard เป็นระยะ เพราะOmise ไม่รับประกันการส่ง webhook ซ้ำอัตโนมัติ ถ้า endpoint ล่มช่วงนั้น Event จะหาย ต้องเทียบสถานะจาก Dashboard หรือ Events API เอง
- ทดสอบการชำระเงินในโหมด Test ก่อน Go Live ทุกครั้งที่มีการเปลี่ยนแปลง
เมื่อไหร่ควรเรียกผู้เชี่ยวชาญ
ถ้าทำตามขั้นตอนข้างต้นครบแล้วแต่ยังไม่หาย หรือพบว่า Webhook Log แสดง error แปลก เช่น 500 Internal Server Error, 403 Forbidden, หรือ database error ควรให้ผู้เชี่ยวชาญเข้ามาดู เพราะอาจมีปัญหาระดับ server configuration หรือ code conflict ที่ต้องแก้โดยตรง ติดต่อได้ผ่าน บริการแก้ปัญหา WooCommerce ของเรา นอกจากนี้ถ้าปัญหาเกิดที่ขั้นตอน checkout ทั้งหมดไม่ใช่แค่ Omise ให้ดูที่ WooCommerce Checkout ไม่ได้ กดสั่งซื้อไม่ทำงาน แก้ยังไง เป็นบทความหลักของหมวดนี้
คำถามที่พบบ่อย
ลูกค้าจ่ายเงินผ่าน Omise แล้วแต่ Order ยังเป็น Pending ต้องรอนานแค่ไหน?
ปกติ Omise จะส่ง Webhook กลับมาภายใน 1-2 นาที ถ้าเกิน 5 นาทีแล้วสถานะยังไม่เปลี่ยน มักหมายความว่า Webhook ไม่ทำงาน ให้ตรวจสอบ Webhook URL และ Log ทันที
Webhook URL ของ WooCommerce Omise คืออะไร?
URL มาตรฐานคือ https://yourdomain.com/?wc-api=omise ต้องใส่ URL นี้ใน Omise/Opn Dashboard ภายใต้ Developers > Webhooks และเลือก Event ที่ต้องการด้วย
ใช้ Test Mode อยู่แต่สถานะไม่อัปเดต แก้ยังไง?
ในโหมด Test ต้องใช้ Test Secret Key (skey_test_) และ Test Public Key (pkey_test_) คู่กัน และต้องตั้ง Webhook ใน Test Environment ของ Dashboard แยกต่างหากจาก Live Environment
Cloudflare ทำให้ Omise Webhook ไม่ทำงานได้ไหม?
ได้ครับ กฎ WAF หรือ Bot Fight Mode ของ Cloudflare อาจบล็อก POST request จาก Omise ให้ลอง create Page Rule หรือ WAF Rule เพื่อ bypass /?wc-api=omise หรือ whitelist IP ของ Omise
Webhook ของ Omise คืออะไร เกี่ยวกับสถานะ Order อย่างไร?
Webhook คือการที่ Omise/Opn ส่งข้อมูลเหตุการณ์ เช่น charge.complete กลับมาที่เว็บโดยอัตโนมัติเมื่อมีการชำระเงิน WooCommerce ใช้ข้อมูลนี้เปลี่ยนสถานะ Order ถ้า Webhook ส่งมาไม่ถึงเว็บหรือเว็บตอบกลับเป็น Error สถานะ Order จะค้างอยู่ที่เดิม
ลูกค้าจ่ายแล้วแต่ Order ยังค้าง เปลี่ยนสถานะเองได้ไหม?
ได้เป็นการชั่วคราว ให้ตรวจใน Omise/Opn Dashboard ก่อนว่ารายการชำระเงินสำเร็จจริง แล้วเข้า WooCommerce > Orders เปลี่ยน Order Status เป็น Processing หรือ Completed และกด Update ระบบจะส่งอีเมลยืนยันให้ลูกค้าอัตโนมัติ แต่ควรแก้ Webhook ให้ทำงานควบคู่กันไป
แหล่งอ้างอิง
- WordPress.org. (ม.ป.ป.). Omise Payments (ปลั๊กอิน WordPress พร้อม changelog). สืบค้นเมื่อ 3 พฤศจิกายน 2026, จาก https://wordpress.org/plugins/omise/
- Omise. (ม.ป.ป.). Webhooks. สืบค้นเมื่อ 3 พฤศจิกายน 2026, จาก https://docs.omise.co/api-webhooks
- Omise. (ม.ป.ป.). PromptPay. สืบค้นเมื่อ 3 พฤศจิกายน 2026, จาก https://docs.omise.co/promptpay
- Omise. (ม.ป.ป.). WooCommerce (เอกสารปลั๊กอิน). สืบค้นเมื่อ 3 พฤศจิกายน 2026, จาก https://docs.omise.co/woocommerce
- Omise. (ม.ป.ป.). class-omise-rest-webhooks-controller.php (ซอร์สโค้ดปลั๊กอิน Omise for WooCommerce). สืบค้นเมื่อ 3 พฤศจิกายน 2026, จาก https://github.com/omise/omise-woocommerce/blob/master/includes/class-omise-rest-webhooks-controller.php
- Omise. (ม.ป.ป.). omise-page-settings.php (ซอร์สโค้ดปลั๊กอิน Omise for WooCommerce). สืบค้นเมื่อ 3 พฤศจิกายน 2026, จาก https://github.com/omise/omise-woocommerce/blob/master/includes/admin/views/omise-page-settings.php
- WooCommerce. (ม.ป.ป.). Logging. สืบค้นเมื่อ 3 พฤศจิกายน 2026, จาก https://developer.woocommerce.com/docs/best-practices/data-management/logging/
- Cloudflare. (ม.ป.ป.). Get started with Bot Fight Mode. สืบค้นเมื่อ 3 พฤศจิกายน 2026, จาก https://developers.cloudflare.com/bots/get-started/bot-fight-mode/
- Cloudflare. (ม.ป.ป.). Configure a custom rule with the Skip action. สืบค้นเมื่อ 3 พฤศจิกายน 2026, จาก https://developers.cloudflare.com/waf/custom-rules/skip/
