這週遇到一個狀況時我需要在訂單成立的時候取得第三方金流回傳的資料,我之前的處理方式是使用 woocommerce_order_status_changed
來做,但如果是剛成立的訂單且訂單狀態還停留在等待付款中時,這個勾點就不會觸發到。
我首先嘗試使用 woocommerce_new_order
這個勾點可以在訂單建立時觸發,但我卡在客戶的網站有使用第三方金流,我需要在訂單建立時就能取得第三方金流所回傳的付款資訊,像是 ATM 虛擬帳號或是付款結果。
爬了 WooCommerce 的程式碼之後發現到類別 WC_Order_Data_Store_CPT
裡面有幾個訂單資料寫入的方法,像是 create()
、update()
,後者裡面有一個 woocommerce_update_order
勾點,看起來是會在訂單寫入相關資料後進行觸發。
因為我需要當金流外掛將回傳資料寫入後進行觸發,因此覺得 woocommerce_update_order
就是我所需要的,嘗試之後果然沒錯,有成功拿到我需要的資料並且是在訂單建立時就會觸發。但,這個勾點會在每更新一次訂單資料的時候觸發,也就是說如果你的訂單有 100 筆資料要更新,那麼勾點就會觸發 100 次,我在測試的時候差點把 API 打到掛掉 > <
於是我繼續搜尋還有沒有跟訂單狀態有關的勾點,也思考著是不是要尋找 PHP 的非同步解決方案,等待金流回傳資料寫入完成後再做事情,但光想就覺得燒腦,後來念頭一轉,要能夠在訂單資料建立且拿到回傳資料,這不就是前台結帳會發生的流程?
想通之後就不再拘泥於訂單的勾點,而是改用 woocommerce_thankyou
勾點來進行觸發,這樣就能實現在訂單狀態不改變的情況下,拿到第三方的回傳資料。