Woocommerce W C API обратного вызова для пользовательских шлюзов оплаты не работает для меня - PullRequest
1 голос
/ 08 января 2020

На самом деле я пишу собственный плагин для подключения платежного шлюза к Woocommerce, и я застрял в проблеме на несколько часов:

Я не могу получить обратный вызов обработки платежа.

Я много гуглил, чтобы найти проблему, но пока безуспешно.

Среда выглядит следующим образом:

  • Сайт на выделенном сервере - Ubuntu 12.04;

  • PHP 7.1;

  • WordPress 5.3.2;

  • Woocommerce 3.8.1 ;

  • Также загружено много плагинов;

Мой класс выглядит так:

    add_filter('woocommerce_payment_gateways', 'woogatewaypro_add_gateway_class');
    function woogatewaypro_add_gateway_class($gateways){
        $gateways[] = 'WC_Gateway_Pro';
        return $gateways;
    }

    add_action('plugins_loaded', 'woogatewaypro_init_gateway_class');

    function woogatewaypro_init_gateway_class(){

        class WC_Gateway_Pro extends WC_Payment_Gateway{

            public function __construct(){

                global $wpdb;

                global $woocommerce;

                $this->id                   = 'woogatewaypro';
                $this->icon                 = '';
                $this->has_fields           = true;
                $this->method_title         = 'Gateway Pro payment gateway';
                $this->method_description   = __('Allow payment from Gateway Pro gateway.','woogatewaypro');

                $this->supports = array(
            'products',
                    'subscriptions',
                    'subscription_cancellation',
                    'subscription_suspension',
                    'subscription_reactivation',
                    'subscription_amount_changes',
                    'subscription_date_changes',
                    'subscription_payment_method_change',
                    'subscription_payment_method_change_customer',
                    'subscription_payment_method_change_admin',
                    'multiple_subscriptions'
                );

                $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->testmode         = 'yes' === $this->get_option('testmode');
                $this->private_key      = $this->testmode ? $this->get_option('test_private_key') : $this->get_option('private_key');
                $this->publishable_key  = $this->testmode ? $this->get_option('test_publishable_key') : $this->get_option('publishable_key');

                /* some code... */

                add_action('woocommerce_api_'.strtolower(get_class($this)), 'woogatewaypro_payment_callback');

                add_action('woocommerce_api_woogatewaypro_cancel_payment', array($this, 'woogatewaypro_cancel_payment'));

                add_action('woocommerce_api_woogatewaypro_payment_ko', array($this, 'woogatewaypro_payment_ko'));

                add_action('woocommerce_api_woogatewaypro_payment_ok', array($this, 'woogatewaypro_payment_ok'));

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

                add_action('wp_enqueue_scripts', array($this, 'payment_scripts'));

                /* some code... */

            }

            public function init_form_fields(){

                /* some code... */

            }

            public function payment_scripts(){

                /* some code... */


            }

            public function process_payment($order_id){

                /* some code... */

            }

            public function woogatewaypro_cancel_payment(){

                wp_redirect(get_permalink(get_option('woocommerce_checkout_page_id')).'?woogatewaypro=cancelled-payment');

            }

            public function woogatewaypro_payment_ko(){

                wp_redirect(get_permalink(get_option('woocommerce_checkout_page_id')).'?woogatewaypro=payment-ko');

            }

            public function woogatewaypro_payment_ok(){

                /* some code... */

                wp_redirect(get_permalink(get_option('woocommerce_checkout_page_id')).'?woogatewaypro=payment-ok');

            }

        }

    }

    function add_wc_gateway_pro_gateway($methods){

        $methods[] = 'WC_Gateway_Pro';

        return $methods;

    }

    add_filter('woocommerce_payment_gateways', 'add_wc_gateway_pro_gateway');

    function woogatewaypro_payment_callback(){

        mail('user@mydomain.tld','Check callback','Enter func');

        // wp_die();
        exit;

    }

Что я я делаю что-то не так?

Я пытался поместить мою функцию woogatewaypro_payment_callback в свой класс, но она не работает.

Мой URL для обратного вызова выглядит так:

    if('' == get_option('permalink_structure')){
        $callback = site_url().'/?wc-api=WC_Gateway_Pro';
    }else{
        $callback = site_url().'/wc-api/WC_Gateway_Pro/';
    }

Я просматриваю журналы на моем сервере, и кажется, что данные опубликованы: я получаю 200 статус с POST.

Когда я пытаюсь получить доступ к функции с помощью GET, у меня все еще есть 1 на пустой странице .

Могут ли некоторые плагины создать проблему?

Заранее спасибо за помощь;).

Ответы [ 2 ]

0 голосов
/ 09 января 2020

После прочтения моего cde я обнаружил, что что-то пропустил, чтобы правильно объявить мою add_action () в функции обратного вызова. Вот так это выглядит сейчас:

    add_action('woocommerce_api_'.strtolower(get_class($this)), array($this,'woogatewaypro_payment_callback'));

Но это еще не работает.

Я попробую установить новый WordPress для тестирования в среде fre sh, потому что я действительно не понимаю, почему это не работает.

Я надеюсь, что "Woo'pro" пройдет здесь, чтобы помочь мне немного:).

0 голосов
/ 09 января 2020

Я все еще в своей проблеме (я схожу с ума ...).

Я использую WP Cerber Security для защиты своего сайта, и никаких проблем с ним: WP Cerber Security позволяет отправлять сообщения на w c -api / WC_Gateway_Pro /, и запрос находится в состоянии 200.

Дело в том, что функция обратного вызова не выполняется: я не получаю никакой почты. Я попытался сохранить строку в файле debug.log WordPress (для отладки установлено значение true), и журнал не был сохранен.

Я прочитал и перечитал все темы, чтобы создать собственный платежный шлюз для Woocommerce, и я не понимаю, в чем проблема с моим кодом: все кажется хорошим в построении кода, но нет возможности выполнить обратный вызов.

WC_API правильно выполняет функции cancel, ko и ok моего класс, но не функция обратного вызова (почему?).

Должен ли я активировать какую-либо настройку в Woocommerce?

Если у кого-то возникла такая же проблема или есть идея решить эту проблему, я буду Буду очень признателен:)

Большое спасибо за ваши ответы;)

...