Интегрировать платежную платформу Cash n’ Go Bahamas в WordPress как метод оплаты в WooCommerce [закрыто].

Вопрос или проблема

Извините, это будет длинным.

Привет, я новичок в 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-вызовов. Основные задачи, которые необходимо учитывать при интеграции:

  1. Аутентификация и авторизация: Защита данных API с помощью надёжного механизма API-ключей и авторизации.

  2. Обработка платежей: Реализация логики отправки транзакций, обработки ответов от платёжного шлюза и управления статусом заказов в WooCommerce.

  3. Обработка ошибок и исключительных ситуаций: Продуманный механизм обработки ошибок, чтобы пользовательский интерфейс и серверная часть могли корректно реагировать на различные исключения и сбои.

Пример интеграции на основе предоставленного кода

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

  1. Аутентификация и подключение к API:

    • Убедитесь, что вы правильно устанавливаете AUTH_ID и API_KEY в настройках вашего шлюза. Конструкция add_query_arg хорошо подходит для построения строки запроса, однако рекомендуется проверить правильность значений.
  2. Перенаправление и обработка статуса заказа:

    • Убедитесь, что функция process_payment корректно обновляет статус заказа. На данный момент заказ помечается как "в ожидании", что подходит для ожидания завершения транзакции.
  3. Логирование и диагностика:

    • Вы добавили логирование ошибок, что является правильным шагом для диагностики, однако убедитесь, что применяется правильный логгер. Записи в error_log могут не всегда быть доступными на хостинге. Рассмотрите возможность использования WooCommerce Logs для хранения журнала событий.
  4. Проблемы с бесконечной загрузкой:

    • Вас беспокоит бесконечная иконка загрузки на странице оформления заказа. Это обычно сигнализирует о недостатке ответа от платежного шлюза или Javascript.
    • Проверьте, что ваш Javascript не блокирует выполнение других скриптов на странице. Также проверьте, использует ли ваше JavaScript-событие submit правильную форму и не нарушает ли это поток выполнения сценария.

Применение теории к реализации

  1. Усовершенствуйте конструкцию API запросов:

    • Убедитесь в правильности формируемого URL. Вы можете использовать wp_remote_post для отправки безопасного POST-запроса, учитывая, что возможно потребуется передавать заголовки аутентификации отдельно.
  2. Обработка ответов от API:

    • Обработайте ответы от Cash n’ Go. Возможно, API требует, чтобы вы обрабатывали конкретные коды ответа и были готовы к перенаправлению клиента обратно на страницу успешного завершения или ошибки.
  3. Дополнительная оптимизация:

    • Добавьте дополнительные проверки в ваш JS файл (cng-payment.js) для логирования более подробной информации на этапе отладки.
  4. Тестирование:

    • Проведите тестирование в различных средах (тестовом и продакшн) с разными сценариями, чтобы убедиться, что ваша интеграция работает стабильно.

Интеграция платёжной платформы может быть непростой задачей, особенно с ограниченной документацией, но следуя вышеизложенному плану, можно значительно повысить вероятность успешной реализации. Убедитесь, что все компоненты системы взаимодействуют между собой без сбоев, и примените дополнительные меры безопасности для защиты чувствительной информации.

Оцените материал
Добавить комментарий

Капча загружается...