前面一篇部落格介紹了支付寶開放平臺上如何建立應用,以及相應的 SDK 中提供的介面。

這篇部落格介紹一下 WooCommerce 中如何新增新的支付方式。


建立一個簡單的支付閘道器

WooCommerce 中的支付閘道器是基於類的,可以透過外掛的方式新增。在外掛裡面,需要在外掛載入後建立一個類,比如:

並且您的類需要繼承自 WooCommerce 閘道器基類,然後您才可以使用設定 API 以及其他一些 WooCommerce 提供的方法:

除了定義自己的類,還需要告訴 WooCommerce 這個類的存在。這是透過新增過濾器實現的:

類中需要實現的方法

大多數的方法繼承自 WC_Payment_Gateway 類,但是在自己的閘道器中要求實現一些方法。

__construct()

在構造方法中,應該定義以下的變數:

  • $this->id:自己的閘道器的唯一 ID,比如’your_gateway’
  • $this->icon:如果您想在前端閘道器名稱的旁邊顯示一張圖片,輸入圖片的 URL
  • $this->has_fields:布林值,如果您想要支付域在結算頁面顯示的話,設定成 true
  • $this->method_title:在 admin 頁面顯示的支付方法的標題
  • $this->method_description:在 admin 頁面顯示的支付方法的描述

構造方法中應該定義並載入設定域:

在呼叫了 init_settings()之後,可以獲取設定並且儲存在變數中,比如:

最後,需要為您的設定新增一個儲存鉤子:

init_form_fields()
這個方法用於設定 $this->form_fields,這是您在自己的閘道器設定頁面中顯示的選項,這個方法中需要使用 WC Settings API([2]) 。

自己閘道器的基本設定應該包含 enabled,title 和 description:

process_payment( $order_id )

這是閘道器最重要的部分——處理支付以及訂單。這個方法也告訴 WC 重定向使用者到哪,這是透過返回的 array 實現的。

下面以 Cheque 閘道器的 process_function 方法為例:

這個方法實現了:

  • 獲取並更新處理中的訂單
  • 減少庫存並清空購物車
  • 返回 success 和重定向 URL(這個例子中是感謝頁面)

Cheque 給訂單一個 On-Hold 狀態,因為支付不能被自動驗證。如果您在構建一個 direct 閘道器,那麼您應該在這裡完成訂單。在訂單被支付之後,應該使用 payment_complete 而不是 update_status:

這可以確保庫存確實減少並且狀態是正確的值。

如果支付失敗,您應該丟擲一個錯誤並且返回 null:

WooCommerce 會捕獲這個錯誤並在結算頁面中顯示。

更新訂單狀態

更新訂單狀態可以透過使用訂單類中的方法實現。更新到一個定製狀態的例子如下:

上面的例子把訂單狀態更新為 On-Hold,並且新增一個注意訊息通知顧客正在等待一個 Cheque 。您也可以不再更新訂單狀態的時候新增註意訊息:

訂單狀態實踐建議

  • 如果訂單完成但是 admin 需要人工驗證支付,使用 On-Hold
  • 如果訂單失敗並且已經建立,設定為 Failed
  • 如果訂單完成,讓 WooCommerce 處理狀態並且使用 $order->payment_complete(). WooCommerce 會使用 Completed 或者 Processing 狀態並處理庫存。

參考

[1] Payment Gateway API
[2] Settings API

 
原文來自:victoriawy.com  感謝作者提供又一個支付寶解決方案。