Как создать платежный шлюз WooCommerce

Опубликовано: 2021-04-26

Создать платежный шлюз WooCommerce Вы хотите создать платежный шлюз WooCommerce, который принимает ваш собственный способ оплаты? В этом руководстве я хочу кратко показать вам, как создать платежный шлюз в WooCommerce, чтобы ваши клиенты могли платить через этот пользовательский платежный шлюз WooCommerce.

Можно создать свой собственный платежный шлюз. Есть 2 способа добиться этого. Вы можете использовать либо плагин, либо пользовательский код.

Однако важно отметить, что плагины будут раздувать ваш сайт. Вот почему мы будем использовать собственный фрагмент кода.

Мы подробно обсудим каждый шаг, чтобы новички могли использовать этот метод.

Как создать платежный шлюз 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. Создайте свой дочерний класс

Для этого нам сначала нужно обернуть это в функцию инициализации и подключить к 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->has_fields = true или false (логическое значение)
  • $this->method_title
  • $this->метод_описание

После установки переменных конструктору потребуются еще несколько функций.

Поля формы будут установлены в функции 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