在Woocommerce中从Paypal成功付款后的订单状态处理问题

时间:2018-12-05 10:57:38

标签: php wordpress woocommerce paypal payment-gateway

我遇到一个奇怪的问题,有时会发生这种情况,当用户通过贝宝(paypal)支付课程费用时,订单状态从待处理变为处理中,而不是完成。

在此图像中收到了IPIN通知,但仍在处理阶段,可能导致此问题的原因。我试图复制此问题,但最终没有复制,有时会发生。

enter image description here

这是产品信息:

  1. 产品是虚拟产品
  2. 库存已禁用

enter image description here

1 个答案:

答案 0 :(得分:0)

如果您只销售虚拟产品,则可以通过以下方式将Paypal的订单状态强制为“已完成”:

add_filter('woocommerce_payment_complete_order_status', 'paypal_payment_complete_order_status', 10, 2 );
function paypal_payment_complete_order_status( $status, $order_id, $order ){
    if( $order->get_payment_method() === 'paypal' )
        $status = 'completed';

    return $status;
}

代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试和工作。

  

此挂钩仅在成功付款后触发,并且最初具有2个可能的订单状态值“处理中”或“完成”(取决于是否需要“处理”)。因此,此答案代码仅将针对Paypal支付网关(对于虚拟产品)的订单状态强制为“已完成”。 This hook位于WC_Order payment_complete()方法上。
  所有付款网关在成功付款时都使用payment_complete()方法,而贝宝在WC_Gateway_Paypal_Response类中使用它。