WooCommerce 检查订单是否已付款/处理或完成

问题描述 投票:0回答:1

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

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

现在我发现有些付款方式很慢?当我用 Klarna 结账时,我的方法有效,并且插入paid = 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");
    }
}
php wordpress woocommerce
1个回答
3
投票

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

<?php
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
}
© www.soinside.com 2019 - 2024. All rights reserved.