php - WooCommerce 检查订单是否已支付/处理或完成

标签 php wordpress woocommerce

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

我不确定它是否足够安全以在买家到达谢谢页面时插入“已付款 => 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");
    }
}

最佳答案

每次您看到/刷新感谢页面时,“woocommerce_thankyou” Hook 都会运行。
最合适的方式是在收到付款后处理数据。为此,您可以使用“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
    }

关于php - WooCommerce 检查订单是否已支付/处理或完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53490957/

相关文章:

phpmailer 发送没有主题和换行符的邮件

wordpress - 创建重复的 WordPress 安装以进行测试

php - 如何获取图像作为我的 Woocommerce 商店页面标题背景?

wordpress - Woocommerce 仅小计数字

wordpress - 在 woocommerce 结帐页面中验证电话号码

php - PHP 中的回发

php - 处理大图像

php - SQL 语句 where 如果下一个值与当前值相同则跳过该值

php - 更新mysql记录

css - 在 Wordpress 中设置事件链接样式