【问题标题】:Order status processing issue on successful payment from Paypal in Woocommerce在 Woocommerce 中从 Paypal 成功付款的订单状态处理问题
【发布时间】:2019-05-06 22:15:47
【问题描述】:

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

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

这是产品信息:

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

【问题讨论】:

    标签: php wordpress woocommerce paypal payment-gateway


    【解决方案1】:

    如果您只销售虚拟产品,您可以在 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() 方法成功支付,Paypal 使用WC_Gateway_Paypal_Response 类。

    【讨论】:

    • 它是否有效,因为您检查了 order_status 的 get_payment_method insted,在我的情况下,订单状态从待处理变为正在处理,但没有变为已完成。可以这样: $order = new WC_Order( $order_id ); if ( '处理' == $order_status ) { return '完成'; }
    • @HemantKumar 是的,因为这个钩子仅在成功付款时触发,并且最初有 2 个可能的订单状态值“处理中或已完成”。所以我只是强制 Paypal 付款为“已完成”状态。我希望您更了解。因此,如果您只有虚拟产品,这是 Paypal 的正确选择。
    猜你喜欢
    • 2019-02-21
    • 2019-07-30
    • 2014-01-23
    • 2014-07-04
    • 2017-12-25
    • 2016-02-22
    • 2020-11-03
    • 2021-06-13
    • 2012-11-10
    相关资源
    最近更新 更多