Nano Hash - криптовалюты, майнинг, программирование

Моя функция обратного вызова плагина WooCommerce перестает работать после обновления wc

TL; DR URL-адрес обратного вызова WooCommerce, который запускает класс с тем же именем, сломался. Как будто я мог получить доступ к своему классу valitorcallback, перейдя в http://mywebsite.com/wc-api/valitorcallback, есть ли способ включить этот URL или каким-то образом получить доступ к этому классу?

Я разработал плагин платежного шлюза WooCommerce для подключения к исландской системе PayPal, такой как компания Valitor.

Процесс оплаты прост:

  1. Покупатели добавляют товары в свою корзину и переходят к оформлению заказа.
  2. Перенаправить покупателя интернет-магазина на Valitor с указанием информации о заказе в параметрах запроса.
  3. Клиент производит оплату своей кредитной или дебетовой картой.
  4. Клиент перенаправляется на предоставленную страницу с благодарностью, и Valitor вызывает другой URL-адрес (обратный вызов), чтобы уведомить о завершении платежа и указать информацию о заказе и коды / метод проверки.

Единственное, что делает плагин, - это шаги 2 и 4. На шаге 4, если заказ действителен, плагин снижает запас и изменяет состояние заказа, чтобы сказать, что платеж был завершен.

Проблема в том, что после обновления WooCommerce около 2 месяцев назад URL-адрес обратного вызова сломался, вероятно, из соображений безопасности. Мне не удалось найти код, чтобы снова включить этот URL-адрес или решить эту проблему. Думаю, это можно сделать с помощью метода add_action или некоторых хуков, но мне не удалось заставить это работать.

Вот руководство, которое я считаю ключевым, но я делаю что-то не так: http://docs.woothemes.com/document/payment-gateway-api/#section-4

Структура плагина кода выглядит так:

<?php

function initWooCommerceValitorGatewayPlugin()
{
    class WooCommerceValitorGateway extends WC_Payment_Gateway
    {
        public function __construct()
        {
            // ...Varible code...

            // Actions
            add_action('woocommerce_update_options_payment_gateways_'.$this->id, array($this, 'process_admin_options'));
        }

        public function init_form_fields()
        {
            // ...Define settings code...
        }

        public function process_payment($orderId)
        {
            // ...Magic code...

            // Redirect to Valitor with all necessary data 
            return array(
                'result' => 'success',
                'redirect' => add_query_arg($valitorData, $gatewayUrl)
            );
        }

        // ...Helper functions code (like sending an email)...
    }
}

class valitorcallback
{
    public function __construct()
    {
        $this->verifyPayment();
    }

    public function verifyPayment()
    {
        // ...Verification code...
    }

    // ...Helper functions code (like sending an email)...

}

// Add plugin to wordpress/woocommerce
add_action('plugins_loaded', 'initWooCommerceValitorGatewayPlugin');

function addValitorGateway($methods)
{
    $methods[] = 'WooCommerceValitorGateway'; 
    return $methods;
}
// Add gateway method to woocommerce
add_filter('woocommerce_payment_gateways', 'addValitorGateway');

?>

Теперь вы видите имя функции и, возможно, можете сказать мне, где следует разместить add_action.

Я знаю о mywebsite.com/wc-api/v3 / ... REST API, но я надеялся, что смогу снова включить URL-адрес, чтобы мне не пришлось снова кодировать эту часть, и я не уверен, как получить настройки этого плагина из другого файла.

Спасибо, Сигурдур

РЕДАКТИРОВАТЬ: добавлен раздел TL; DR вверху и жирным шрифтом, когда я излагаю проблему.


  • У меня нет ответа, но я бы начал с очень внимательного изучения того, как WooCommerce обрабатывает IPN PayPal. 24.09.2015
  • Спасибо за ссылку @helgatheviking. Хотя я не видел этого кода add_action, но я нашел несколько полезных вещей и подходящие слова для поиска. Так что большое спасибо за отзыв. 13.10.2015

Ответы:


1

Я нашел это, не знаю, почему я не нашел его, кроме того, что я не использовал правильные поисковые слова в Google.

Но вот он: Пользовательский платежный шлюз WooCommerce

Я не знаю, почему это не упоминается в документации, но вам понадобится этот хук действия:

// Payment listener/API hook
add_action('woocommerce_api_wc_valitor_gateway', array($this, 'valitorcallback'));

Мне нужно было переместить суммирующие функции из второго класса в первый, а затем получить правильное имя действия, чтобы оно работало. Он по-прежнему возвращает -1, но правильный код выполняется со всеми переменными GET из URL-адреса.

Также я меняю имя класса на WC_Valitor_Gateway, а структура плагина выглядит так:

<?php

function initWooCommerceValitorGatewayPlugin()
{
    class WC_Valitor_Gateway extends WC_Payment_Gateway
    {
        public function __construct()
        {
            // ...Varible code...

            // Actions
            add_action('woocommerce_update_options_payment_gateways_'.$this->id, array($this, 'process_admin_options'));

            // Payment listener/API hook
            add_action('woocommerce_api_wc_valitor_gateway', array($this, 'valitorcallback'));
        }

        public function init_form_fields()
        {
            // ...Define settings code...
        }

        public function process_payment($orderId)
        {
            // ...Magic code...
        }

        public function valitorcallback()
        {
            // ...Verification code...
        }

        // ...Helper functions code (like sending an email)...
    }
}

// Add plugin to wordpress/woocommerce
add_action('plugins_loaded', 'initWooCommerceValitorGatewayPlugin', 0);

function addValitorGateway($methods)
{
    $methods[] = 'WC_Valitor_Gateway'; 
    return $methods;
}
// Add gateway method to woocommerce
add_filter('woocommerce_payment_gateways', 'addValitorGateway');

?>
13.10.2015
  • Как нам получить доступ к данным, которые были переданы / отправлены на URL-адрес обратного вызова, поскольку функция valitorcallback () не имеет переданных параметров? 21.04.2016
  • Мужик, прошли годы. И до сих пор нет ответов на вопрос, как получить доступ к параметрам POST. 25.10.2018
  • @frostshoxx параметры будут зависеть от того, как другой веб-сайт / служба вызывает URL-адрес обратного вызова. Если он выполняет запрос POST, у вас будет доступ через поля POST. 22.02.2019
  • @IvRRimUm, который будет полностью зависеть от того, как другой сервер обращается к вашему методу обратного вызова. Если они отправят вам $_POST запрос, вы можете получить значения из $_POST['some_value'] как обычно. Если они отправляют более сложные данные, вам может потребоваться использовать file_get_contents вместо этого, чтобы получить входные данные и проанализировать их в соответствии с вашими потребностями. 22.02.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

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

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..