昨天晚上完成了建立信用卡付款訂單的主要邏輯,在操作購物車,進到結帳頁面後,填寫完收件人資料,按下結帳按紐後,即會轉頁到永豐金流收款平台的信用卡刷卡頁面。
但刷完卡後,收款平台會 POST 兩個值回到我們的商店網站,ShopNo
和 PayToken
。這兩個值我們要使用 PHP 的全域變數 $_POST
去接。因此需要定義一個入口點收這兩個值。
圖 24-1: SinoPac_Payment controller
回到一開始載入付款閘道類別的 controller,SinoPac_Payment,我們定義了兩個入口來收資料。
第 8 行 是這次刷卡使用的 return_url。完成付款即會轉到這個頁面。
第 15 行 先定義好接下來要接收虛擬付款方式的結果的頁面網址。在過幾天分享虛擬帳號付款時會再提到詳細的作法。
第 26 行 實作接收訊息的邏輯,在這個階段,會接收 PayToken,並使用它來查詢付款結果。 如果付款成功,就把 WooCommerce 訂單的狀態從等待付款中,變成為處理中。
我們使用 template_redirect
這個 Hook 來載入刷卡後接收資料的函式。為什麼使用 template_redirect 呢?因為 WordPress Hook 的生命週期中,這個 Hook 開始可以使用 $wp
全域變數,而 $wp->request
等於 PHP 的全域變數值 $_SERVER['REQUEST_URI']
可以讓我們抓到目前的網址路徑。
圖 24-2: SinoPac_Payment controller
第 7 行 引入全域變數 $wp
。
第 9 行 比對網址路徑,符合規則繼續處理。
第 13 行 取得 ShopNo
,接下來會比對和我們的資料是否符合。
第 14 行 取得 PayToken
,準備用它來查詢信用卡訂單狀態。
第 30 行 查詢到狀態為成功,這個付款就完美地完成了。
第 31-36 行 查詢到的交易資訊詳細資料。
第 58 行 把付款成功的交易訊息加註到訂單備註,讓負責處理訂單的人員知道此訂單已收款,可以即刻安排出貨。
第 59 行 訂單狀態變更為「處理中」,讓顧客知道其訂單正在被處理,以即負則處理訂單的同事可以在後台篩選此狀態取得出貨清單進行出貨。
第 51-55 行 製定訂單備註的內容。
第 60 行 交易的資料記錄到 meta 中,以便以後可以查詢。
第 66 行 失敗的話,記錄本次回傳的資料以供查看問題。
第 72 行 成功的話,轉址到感謝頁面。
圖 24-3: 啟用信用卡付款
接下來啟用信用卡付款,這整個步驟就正式啟用讓顧客進行信用卡消費。
圖 24-4: 使用信用卡付款
進到結帳頁面已可以看到有這個選項囉。
今天完成了程式碼邏輯,接下來要來驗收整個信用卡付款的流程是否符合預期喔。
相關範例程式碼可以在這裡 參考。