如何创建 WooCommerce 支付网关
已发表: 2021-04-26您想创建接受您的自定义付款选项的 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' );
结论
您需要做的就是添加自定义支付网关。 我们只是克隆了“支票”网关的功能。
如果您正在与支付处理器集成,请务必注意您需要合并来自支付处理器的发布和接收信息。
如果此过程过于复杂,您可以聘请合格的开发人员。 这将确保您不会破坏您的网站。
类似文章
- WooCommerce 结帐后重定向:重定向到自定义感谢页面
- 注销后 WooCommerce 重定向 [终极指南]
- 如何自定义 WooCommerce 产品页面
- 如何在 WooCommerce 中以最低消费设置免费送货
- 如何更改 WooCommerce 支付网关图标
- 如何设置 WooCommerce 比特币结账
- 如何添加 WooCommerce 发票结帐页面
- 如何添加基于 URL 的活动导航类
- 如何将 Stripe 与 WooCommerce 集成
- 如何删除结帐按钮 WooCommerce
- 如何免费发送到 Mpesa WooCommerce 付款
- 如何在 WooCommerce 结帐页面上隐藏 PayPal 图标
- 如何在页脚 [HTML] 中添加 WooCommerce 支付图标
- 如何在 WooCommerce 结帐页面上更改 PayPal 图标
- 如何在 WooCommerce 中将搜索添加到商店页面
- 如何在 WooCommerce 中添加愿望清单
- 如何检查用户是否登录WordPress
- 如何从结帐中删除 WooCommerce 付款选项
- 如何在 WooCommerce 中注销时清除购物车
- 如何更改结帐端点 WooCommerce