У меня есть настройка WordPress с WooCommerce с использованием стандартного шлюза Paypal. Платежи принимаются и проходят через штраф. Paypal IPN принимается сайтом и помечается как «Завершено» для заказа, но статус заказа остается неизменным в 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
В настройки шлюза Paypal вошли другие вещи:
Обратный URL Paypal:
URL уведомления Paypal:
Установлены другие связанные плагины Woo:
Я немного озадачен тем, что еще можно попробовать, поскольку IPN, очевидно, принимается, но по какой-то причине WooCommerce не обновляет статус заказа с помощью этой информации. Есть несколько уведомлений PHP о несвязанных точках в других шаблонах, но нет ничего, что должно мешать WooCommerce. Любая помощь или идеи, которые можно попробовать, будет высоко ценится!
У меня возникла та же проблема, и я обнаружил, что это, вероятно, нормально для WooCommerce, поскольку продукт должен быть отправлен, а затем установлен на Завершено. Вы можете использовать плагин для автозаполнения заказов.
WooCommerce Автозаполнение заказов
https://wordpress.org/plugins/woocommerce-autocomplete-order/
Как автоматически устанавливать заказы WooCommerce PayPal как выполненные
http://biostall.com/how-to-automatically-set-woocommerce-paypal-orders-as-completed/
Примечание: вы должны убедиться, что ваш продукт является виртуальным и установить режим «Оплаченные заказы только для виртуальных продуктов» в разделе WooCommerce> Настройки> Дополнительные параметры
Спасибо за ответ, я видел плагин автозаполнения, но клиент в руке требовал, чтобы это был ручной метод. Мне удалось выяснить метод, который работает для стандартного платежа 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'] ) && !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');
}
}}