WooCommerce Paypal标准网关 - IPN已收到,但订单状态仍停留在处理'

时间:2016-10-04 11:20:34

标签: php wordpress paypal woocommerce woocommerce-bookings

我使用标准的Paypal网关与WooCommerce进行了Wordpress设置。付款正在收到并且正在进行中。该网站正在接收Paypal IPN并标记为"已完成"对于订单,但订单状态在WooCommerce中保持不变,仍然显示为" Processing"。

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 order status

进入Pay​​pal网关设置的其他内容:

  • Paypal API详细信息
  • Paypal Identity Token
  • 客户Paypal登录电子邮件作为收件人电子邮件和PayPal电子邮件
  • 付款设置为捕获

Paypal返回网址:

Paypal通知网址

安装了其他相关的Woo插件:

我有点难以接受尝试,因为IPN显然正在收到,但无论出于何种原因,WooCommerce都没有使用此信息更新订单状态。有一些关于其他模板中不相关点的PHP通知,但没有任何干扰WooCommerce的内容。任何帮助或想法尝试将非常感谢!

2 个答案:

答案 0 :(得分: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下>设置>额外选项

答案 1 :(得分:0)

感谢您的回复,我确实看到了自动完成插件,但客户端手头要求这是一个手动方法。我设法找出一种适用于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');

        }
    }


}