首页 > 解决方案 > 在 Woocommerce 中从 Paypal 成功付款的订单状态处理问题

问题描述

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

在这张图片中,收到了 IPIN 通知,但订单仍在处理阶段,可能是什么导致了这个问题。我试图复制这个问题,但它最终没有复制,它有时会发生。

在此处输入图像描述

以下是产品信息:

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

在此处输入图像描述

标签: phpwordpresswoocommercepaypalpayment-gateway

解决方案


如果您只销售虚拟产品,您可以在支付完成功能上强制 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 支付网关(用于虚拟产品)这个钩子位于WC_Order payment_complete()方法上。
所有支付网关都使用payment_complete()成功支付的方法,而贝宝在WC_Gateway_Paypal_ResponseClass 上使用它。


推荐阅读