Стандартный шлюз WooCommerce Paypal — получен IPN, но статус заказа застрял на ‘processing’

#php #wordpress #paypal #woocommerce #woocommerce-bookings

#php #wordpress #paypal #woocommerce #woocommerce-заказы

Вопрос:

У меня есть настройка WordPress с WooCommerce с использованием стандартного шлюза Paypal. Платежи принимаются и проходят нормально. IPN Paypal принимается сайтом и помечается как «Завершено» для заказа, но статус заказа остается неизменным в WooCommerce и по-прежнему читается как «Обработка».

 10-04-2016 @ 11:04:18 - Received valid response from PayPal
10-04-2016 @ 11:04:18 - Found order #1303
10-04-2016 @ 11:04:18 - Payment status: completed
  

статус заказа woocommerce

Другие параметры, введенные в настройки шлюза Paypal:

  • Детали API Paypal
  • Идентификационный токен Paypal
  • Клиенты Paypal регистрируют электронную почту в качестве электронной почты получателя и электронной почты paypal
  • Платеж установлен для захвата

Paypal возвращает URL:

URL-адрес уведомления Paypal:

Установлены другие связанные плагины Woo:


Я немного озадачен тем, что еще можно попробовать, поскольку IPN, очевидно, получен, но по какой-то причине WooCommerce не обновляет статус заказа с помощью этой информации. Есть некоторые уведомления PHP, касающиеся несвязанных точек в других шаблонах, но не все, что должно мешать работе WooCommerce. Любая помощь или идеи, которые можно попробовать, будут высоко оценены!

Ответ №1:

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

Заказы автозаполнения WooCommerce
https://wordpress.org/plugins/woocommerce-autocomplete-order/

Как автоматически устанавливать заказы WooCommerce PayPal как завершенные
http://biostall.com/how-to-automatically-set-woocommerce-paypal-orders-as-completed/

Примечание: вы должны убедиться, что ваш продукт виртуальный, и установить режим «Оплаченные заказы только виртуальных продуктов» в разделе WooCommerce> Настройки> Дополнительные параметры

Ответ №2:

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

http://codecharismatic.com/run-your-own-damn-code-after-paypal-calls-woocommerce-back/

 <?php
/**
* Auto Complete Woocommerce 'processing' orders
*/

add_action( 'valid-paypal-standard-ipn-request', 'handle_paypal_ipn_response', 50, 1 );

function handle_paypal_ipn_response( $formdata ) {

    if ( !empty( $formdata['invoice'] ) amp;amp; !empty( $formdata['custom'] ) ) {

        if( $formdata['payment_status'] == 'Completed' ) {

            // decode data
            $order_data = json_decode($formdata['custom'], true);

            // get order
            $order_id = ($order_data) ? $order_data['order_id'] : '';
            $order = new WC_Order( $order_id );

            // got something to work with?
            if ( $order ) {

                if ($order->post->post_status == 'wc-processing'){

                    // Status success
                        WC_Gateway_Paypal::log( 'Changing order #' . $order->id . ' status from processing to completed');
                      $order->update_status( 'completed' );

                } else {

                    // Status fail
                        WC_Gateway_Paypal::log( 'Status fail, order #' . $order->id . ' status is set to ' . $order->post->post_status . ', not processing');

                }

            } else {

                // Order fail
                    WC_Gateway_Paypal::log( 'Fail, no order found');

            }

        } else {

            // Payment fail
                WC_Gateway_Paypal::log( 'Payment status fail, not completed');

        }
    }


}