如何創建 WooCommerce 支付網關

已發表: 2021-04-26

創建 WooCommerce 支付網關 您想創建接受您的自定義付款選項的 WooCommerce 付款網關嗎? 在本教程中,我想簡要地向您展示如何在 WooCommerce 中創建支付網關,以允許您的客戶通過這個自定義的 WooCommerce 支付網關進行支付。

可以創建自己的自定義支付網關。 有兩種方法可以實現這一點。 您可以使用插件或自定義代碼。

但是,重要的是要注意插件會使您的網站膨脹。 這就是我們將使用自定義代碼片段的原因。

我們將詳細討論每個步驟,以允許新手使用此方法。

如何創建 WooCommerce 支付網關

在這篇文章中,我們將創建一個插件來添加一個新的支付網關。 這意味著您需要具備編程技能才能做到這一點。

我們將擴展一個 WooCommerce 類。 WooCommerce 為我們提供了幾個核心類,例如支付網關或電子郵件類。

可以擴展這些類以添加您自己的功能,從而節省開發時間。 它還確保您的插件以標準方式工作。

WC_Payment_Gateway 類

WC_Payment_Gateway 類對此進行了擴展,為我們提供了特定於支付方式的結構和功能,例如獲取訂單總額或感謝頁面 URL 的能力。

如果我們擴展這個類,我們可以從結構中受益。 這將為我們處理一些功能,包括獲取標題和描述並將其顯示在結帳頁面上。

需要注意的是,WooCommerce 中的所有支付網關都將從擴展 WC_Payment_Gateway 類開始。

以下是您需要遵循的步驟:

1. 檢查 WooCommerce 是否處於活動狀態

由於我們將擴展 WooCommerce 類,因此我們需要檢查它是否處於活動狀態:

// Make sure WooCommerce is active

if ( ! in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) return;

2. 建立你的孩子班

為此,我們首先需要將其包裝在一個 init 函數中,並將其掛接到 plugins_loaded 中,而不是默認優先級。

在我們檢查 WooCommerce 是否處於活動狀態後,我們在 WooCommerce 核心之後加載我們的類。 這使其成為針對致命錯誤的輔助檢查。

它還確保 WC_Payment_Gateway 類可用。 o 擴展一個類,您將遵循以下格式:

My_Child_Class 類擴展 The_Parent_Class { }

這是我們插件中的樣子:

/**

* Offline Payment Gateway

* @class       WC_Gateway_Offline

* @extends     WC_Payment_Gateway

* @version     1.0.0

* @package     WooCommerce/Classes/Payment

* @author      Njengah

*/

add_action( 'plugins_loaded', 'wc_offline_gateway_init', 11 );

function wc_offline_gateway_init() {

class WC_Gateway_Offline extends WC_Payment_Gateway {

// You plugin code starts here

} // end \WC_Gateway_Offline class

}

3. 構建網關

由於我們有類,我們需要構建我們的 __construct() 函數。 這確保了我們需要包含在我們的類中的變量。

以下是所需的變量:

  • $this->id
  • $這個->圖標
  • $this->has_fields = true or false (bool)
  • $this->method_title
  • $this->method_description

設置變量後,構造函數將需要一些其他函數。

表單字段將在 init_form_fields() 函數中設置。 此功能添加所有設置字段,例如啟用網關和添加標題。

$this->init_form_fields();
$this->init_settings();

4. 初始化表單域

在本節中,我們將創建一個 init_form_fields() 函數來為我們的支付網關設置表單字段。

該函數在父類中什麼都不做,但如果你不重寫它,它可以確保沒有致命錯誤。

但是,我們將在我們的子類中賦予它一些功能。

我們應該包括的基本字段是啟用的標題和描述。

/**

* Initialize Gateway Settings Form Fields

*/

public function init_form_fields() {

$this->form_fields = apply_filters( 'wc_offline_form_fields', array(

'enabled' => array(

'title'   => __( 'Enable/Disable', 'wc-gateway-offline' ),

'type'    => 'checkbox',

'label'   => __( 'Enable Offline Payment', 'wc-gateway-offline' ),

'default' => 'yes'

),

'title' => array(

'title'       => __( 'Title', 'wc-gateway-offline' ),

'type'        => 'text',

'description' => __( 'This controls the title for the payment method the customer sees during checkout.', 'wc-gateway-offline' ),

'default'     => __( 'Offline Payment', 'wc-gateway-offline' ),

'desc_tip'    => true,

),

'description' => array(

'title'       => __( 'Description', 'wc-gateway-offline' ),

'type'        => 'textarea',

'description' => __( 'Payment method description that the customer will see on your checkout.', 'wc-gateway-offline' ),

'default'     => __( 'Please remit payment to Store Name upon pickup or delivery.', 'wc-gateway-offline' ),

'desc_tip'    => true,

),

'instructions' => array(

'title'       => __( 'Instructions', 'wc-gateway-offline' ),

'type'        => 'textarea',

'description' => __( 'Instructions that will be added to the thank you page and emails.', 'wc-gateway-offline' ),

'default'     => '',

'desc_tip'    => true,

),

) );

}

5. 處理付款

這是創建支付網關時最重要的部分。 我們需要添加一個函數來處理訂單,告訴 WooCommerce 應該有什麼狀態以及客戶在使用後去哪裡:

public function process_payment( $order_id ) {

$order = wc_get_order( $order_id );

// Mark as on-hold (we're awaiting the payment)

$order->update_status( 'on-hold', __( 'Awaiting offline payment', 'wc-gateway-offline' ) );

// Reduce stock levels

$order->reduce_order_stock();

// Remove cart

WC()->cart->empty_cart();

// Return thankyou redirect

return array(

'result'    => 'success',

'redirect'  => $this->get_return_url( $order )

);

}

6. 將支付網關信息添加到收到的訂單和電子郵件中

我們添加的網關需要進一步說明才能完成付款。 我們需要使用thankyou_page() 和email_instructions() 存根方法確保這些說明顯示在感謝頁面和訂單電子郵件中。

/**

* Output for the order received page.

*/

public function thankyou_page() {

if ( $this->instructions ) {

echo wpautop( wptexturize( $this->instructions ) );

}

}

/**

* Add content to the WC emails.

*

* @access public

* @param WC_Order $order

* @param bool $sent_to_admin

* @param bool $plain_text

*/

public function email_instructions( $order, $sent_to_admin, $plain_text = false ) {

if ( $this->instructions && ! $sent_to_admin && 'offline' === $order->payment_method && $order->has_status( 'on-hold' ) ) {

echo wpautop( wptexturize( $this->instructions ) ) . PHP_EOL;

}

}

7. 添加到 WooCommerce 支付網關

最後一步是確保支付網關在WooCommerce > Settings > Checkout下可用。

我們將使用 woocommerce_payment_gateways 過濾器,它為我們提供所有可用網關的數組。 這意味著我們將把網關添加到這個數組中,然後返回添加了網關的數組。

function wc_offline_add_to_gateways( $gateways ) {

$gateways[] = 'WC_Gateway_Offline';

return $gateways;

}

add_filter( 'woocommerce_payment_gateways', 'wc_offline_add_to_gateways' );

結論

您需要做的就是添加自定義支付網關。 我們只是克隆了“支票”網關的功能。

如果您正在與支付處理器集成,請務必注意您需要合併來自支付處理器的發布和接收信息。

如果此過程過於復雜,您可以聘請合格的開發人員。 這將確保您不會破壞您的網站。

類似文章

  1. 註銷後 WooCommerce 重定向 [終極指南]
  2. 如何自定義 WooCommerce 產品頁面
  3. 如何更改結帳端點 WooCommerce