如何创建 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