【问题标题】:WooCommerce Check if order is paid/processing or completedWooCommerce 检查订单是否已付款/处理或完成
【发布时间】:2018-11-27 00:11:36
【问题描述】:

当支付成功/客户被重定向到感谢页面时,我试图在我的自定义表中设置一个值“已支付”。

我不确定它是否足够安全,可以在买家到达感谢页面时插入“paid => 1”。这就是为什么我想检查订单是否真的已付款、已完成或正在处理。

现在我发现有些付款方式很慢?当我使用 Klarna 结帐时,我的方法有效,它插入已付款 = 1,但是当我选择 Paypal 时,我的方法将失效并返回:“WASNT PAID”。但是当我在 30 秒后刷新感谢页面时,它就可以工作了。所以我得出的结论是 order_status 设置得不够快?有比我更干净的方法吗?

add_action('woocommerce_thankyou', 'ceb_order_complete', 10, 1);
function ceb_order_complete( $order_id ) {

    if ( ! $order_id )
        return;

    // Getting an instance of the order object
    $order = wc_get_order( $order_id );

    if($order->is_paid() || $order->has_status('processing') || $order->has_status('completed')) {
        global $wpdb;
        $payID = WC()->session->get( 'payID' );
        if(!empty($payID)) {
            if(!$wpdb->update($wpdb->prefix."ceb_registrations", array("paid"=>1), array("payID"=>$payID))) {
                die("ERROR IN PAYMENT COMPLETE");
            }
        }
    } else {
        die("WASNT PAID");
    }
}

【问题讨论】:

  • 如果你问人们必须猜测你的代码是如何工作的事情,你永远不会得到有用的答案。 'payID' 会话变量何时设置,它来自哪里?
  • 对不起,也许我应该指定我的问题。 payID 在用户在我的自定义插件中进行预订时设置。 (顺便说一句,现在有效,我为此回答了我的最后一个问题)。我认为某些付款方式不会与“payment_complete”挂钩,因此我尝试使用thankyou 挂钩。它工作正常,但在某些情况下,即使客户在付款后被重定向,这种方法也会死“WASNT PAID”。它发生在贝宝上。所以我的问题是:有没有办法在感谢页面上检查付款是否成功?
  • 这无法真正回答,因为我们无法测试您的代码(或理解它)......因此,如果您想要真正有效和有用的答案而不是基于意见的答案,您需要提出不同的问题。请记住,“寻求调试帮助的问题必须包括所需的行为、特定问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题 对其他读者没有用。” StackOverFlow 是一个社区,线程供个人在此社区使用之前使用。
  • 现在就用这个​​。但我肯定会问。这是偶然发生的,因为我过去没有经常使用这个平台。
  • 漂亮的小图标...好多了:) ...请注意if ( $order->is_paid() ) {if ( $order->has_status('processing') || $order->has_status('completed') ) {完全相同

标签: php wordpress woocommerce


【解决方案1】:

“woocommerce_thankyou”挂钩将在您每次看到/刷新感谢页面时运行。 最合适的方式是在收到付款后处理数据。为此,您可以使用“woocommerce_payment_complete”。

add_action('woocommerce_payment_complete', 'payment_complete_callback');
function payment_complete_callback($order_id)
    {
      $order = wc_get_order($order_id);
      $user = $order->get_user();
      // do what ever you want to do using $order object of the WC_Order class providing many functions
    }

【讨论】:

    猜你喜欢
    • 2016-06-11
    • 2021-01-07
    • 2014-02-21
    • 2014-01-18
    • 2020-03-15
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 2019-05-18
    相关资源
    最近更新 更多