Вопрос или проблема
Извините, это будет длинным.
Привет, я новичок в API и разработке плагинов. Я пытаюсь интегрировать Cash n go Bahamas как платформу для платежей в WordPress в качестве платформы для платежей WooCommerce. У CnG довольно сжатая документация, суммированная в одном pdf-файле. Скриншоты документации прилагаются здесь:
[1] (https://i.sstatic.net/9Qm9WMQK.png)
2
3
Плагин, который я сделал до сих пор, интегрируется с WooCommerce и отображается на вкладке WooCommerce > настройки > платежи. Однако на странице оформления заказа платеж не инициируется. У меня просто бесконечный значок загрузки в разделе платежей.
Вот код в моем плагине:
<?php
/*
Название плагина: WooCommerce CNG Payment Gateway
Описание: Добавляет CNG (Cash N' Go) в качестве метода оплаты в WooCommerce.
Версия: 1.0
Автор: BITe Agency
Авторский URI: https://www.biteagency.pro
*/
if (!defined('ABSPATH')) {
exit; // Выход при прямом доступе
}
// Добавить платежный шлюз CNG в WooCommerce
add_filter('woocommerce_payment_gateways', 'add_cng_payment_gateway');
function add_cng_payment_gateway($gateways) {
$gateways[] = 'WC_CNG_Payment_Gateway';
return $gateways;
}
// Инициализировать платежный шлюз CNG
add_action('plugins_loaded', 'init_cng_payment_gateway');
function init_cng_payment_gateway() {
if (!class_exists('WC_Payment_Gateway')) {
return; // WooCommerce не установлен
}
class WC_CNG_Payment_Gateway extends WC_Payment_Gateway {
public function __construct() {
$this->id = 'cng_payment';
$this->icon = ''; // значок оплаты
$this->has_fields = false;
$this->method_title="CNG Payment";
$this->method_description = 'Pay using CNG (Cash N\' Go).';
// Загрузить настройки
$this->init_form_fields();
$this->init_settings();
// Определить настройки для пользователя
$this->title = $this->get_option('title');
$this->description = $this->get_option('description');
$this->enabled = $this->get_option('enabled');
$this->api_key = $this->get_option('api_key');
$this->auth_id = $this->get_option('auth_id');
// Сохранить настройки
add_action('woocommerce_update_options_payment_gateways_' . $this->id, array($this, 'process_admin_options'));
}
// Инициализировать поля настроек
public function init_form_fields() {
$this->form_fields = array(
'enabled' => array(
'title' => 'Включить/Отключить',
'type' => 'checkbox',
'label' => 'Включить CNG Payment',
'default' => 'yes'
),
'title' => array(
'title' => 'Заголовок',
'type' => 'text',
'description' => 'Этот параметр управляет заголовком, который пользователь видит при оформлении заказа.',
'default' => 'CNG Payment',
'desc_tip' => true
),
'description' => array(
'title' => 'Описание',
'type' => 'textarea',
'description' => 'Этот параметр управляет описанием, которое пользователь видит при оформлении заказа.',
'default' => 'Оплата с помощью CNG (Cash N\' Go).'
),
'api_key' => array(
'title' => 'API Key',
'type' => 'text',
'description' => 'Введите ваш API Key CNG.',
'default' => '',
'desc_tip' => true
),
'auth_id' => array(
'title' => 'AUTH ID',
'type' => 'text',
'description' => 'Введите ваш AUTH ID CNG.',
'default' => '',
'desc_tip' => true
)
);
}
// Процесс оплаты
public function process_payment($order_id) {
$order = wc_get_order($order_id);
// Получить общую сумму заказа
$amount = $order->get_total();
$amount = number_format($amount, 2, '.', '');
// Получить номер заказа
$order_number = $order->get_order_number();
// Определить URL успешной оплаты и отмены
$url_success = $this->get_return_url($order); // URL успеха по умолчанию WooCommerce
$url_cancel = $order->get_cancel_order_url(); // URL отмены по умолчанию WooCommerce
// Построить URL конечной точки API
$endpoint="https://paylanes-qa.sprocket.solutions/merchant/web-payment/auth";
$url = add_query_arg(array(
'AUTH_ID' => $this->auth_id,
'API_KEY' => $this->api_key,
'AMOUNT' => $amount,
'URL_SUCCESS' => $url_success,
'URL_CANCEL' => $url_cancel,
'ORDER_NUMBER' => $order_number
), $endpoint);
// Отметить заказ как ожидающий (оплата еще не завершена)
$order->update_status('pending', __('Ожидание оплаты CNG.', 'woocommerce'));
// Логировать URL перенаправления для отладки
error_log('CNG Payment Redirect URL: ' . $url);
// Вернуть URL перенаправления WooCommerce
return array(
'result' => 'success',
'redirect' => $url // Перенаправить клиента на страницу оплаты CNG
);
}
}
}
function enqueue_cng_payment_scripts() {
if (is_checkout()) {
wp_enqueue_script('cng-payment-script', plugin_dir_url(__FILE__) . 'cng-payment.js', array('jquery'), null, true);
}
}
add_action('wp_enqueue_scripts', 'enqueue_cng_payment_scripts');
error_log('CNG Payment URL: ' . $url);
Я добавил этот JavaScript в другой файл для логирования ошибок в консоль, но получаю только: [Violation] “setTimeout” обработчик занял 290мс, залогировано в консоль.
jQuery(document).ready(function($) {
console.log('CNG Payment JS загружен');
// Отладка: логировать процесс оформления заказа
$(document).on('updated_checkout', function() {
console.log('Оформление заказа обновлено');
});
$(document).on('checkout_error', function() {
console.log('Произошла ошибка оформления заказа');
});
});
Ответ или решение
Интеграция платёжной платформы Cash n’ Go в WordPress через WooCommerce требует тщательного подхода к разработке и конфигурированию вашего плагина, учитывая ограниченность документации и некоторые возникшие проблемы. Давайте рассмотрим весь процесс, разобрав теоретические аспекты, применимые примеры, а затем переходя к непосредственной реализации.
Теория интеграции платёжных шлюзов
Интеграция платёжных систем в WooCommerce традиционно осуществляется через набор API-вызовов. Основные задачи, которые необходимо учитывать при интеграции:
-
Аутентификация и авторизация: Защита данных API с помощью надёжного механизма API-ключей и авторизации.
-
Обработка платежей: Реализация логики отправки транзакций, обработки ответов от платёжного шлюза и управления статусом заказов в WooCommerce.
-
Обработка ошибок и исключительных ситуаций: Продуманный механизм обработки ошибок, чтобы пользовательский интерфейс и серверная часть могли корректно реагировать на различные исключения и сбои.
Пример интеграции на основе предоставленного кода
Ваша текущая реализация плагина уже составляет хороший базис, однако проблемы, с которыми вы столкнулись, требуют незначительных исправлений и доработок.
-
Аутентификация и подключение к API:
- Убедитесь, что вы правильно устанавливаете
AUTH_ID
иAPI_KEY
в настройках вашего шлюза. Конструкцияadd_query_arg
хорошо подходит для построения строки запроса, однако рекомендуется проверить правильность значений.
- Убедитесь, что вы правильно устанавливаете
-
Перенаправление и обработка статуса заказа:
- Убедитесь, что функция
process_payment
корректно обновляет статус заказа. На данный момент заказ помечается как "в ожидании", что подходит для ожидания завершения транзакции.
- Убедитесь, что функция
-
Логирование и диагностика:
- Вы добавили логирование ошибок, что является правильным шагом для диагностики, однако убедитесь, что применяется правильный логгер. Записи в
error_log
могут не всегда быть доступными на хостинге. Рассмотрите возможность использования WooCommerce Logs для хранения журнала событий.
- Вы добавили логирование ошибок, что является правильным шагом для диагностики, однако убедитесь, что применяется правильный логгер. Записи в
-
Проблемы с бесконечной загрузкой:
- Вас беспокоит бесконечная иконка загрузки на странице оформления заказа. Это обычно сигнализирует о недостатке ответа от платежного шлюза или Javascript.
- Проверьте, что ваш Javascript не блокирует выполнение других скриптов на странице. Также проверьте, использует ли ваше JavaScript-событие
submit
правильную форму и не нарушает ли это поток выполнения сценария.
Применение теории к реализации
-
Усовершенствуйте конструкцию API запросов:
- Убедитесь в правильности формируемого URL. Вы можете использовать
wp_remote_post
для отправки безопасного POST-запроса, учитывая, что возможно потребуется передавать заголовки аутентификации отдельно.
- Убедитесь в правильности формируемого URL. Вы можете использовать
-
Обработка ответов от API:
- Обработайте ответы от Cash n’ Go. Возможно, API требует, чтобы вы обрабатывали конкретные коды ответа и были готовы к перенаправлению клиента обратно на страницу успешного завершения или ошибки.
-
Дополнительная оптимизация:
- Добавьте дополнительные проверки в ваш JS файл (
cng-payment.js
) для логирования более подробной информации на этапе отладки.
- Добавьте дополнительные проверки в ваш JS файл (
-
Тестирование:
- Проведите тестирование в различных средах (тестовом и продакшн) с разными сценариями, чтобы убедиться, что ваша интеграция работает стабильно.
Интеграция платёжной платформы может быть непростой задачей, особенно с ограниченной документацией, но следуя вышеизложенному плану, можно значительно повысить вероятность успешной реализации. Убедитесь, что все компоненты системы взаимодействуют между собой без сбоев, и примените дополнительные меры безопасности для защиты чувствительной информации.