当付款成功/客户被重定向到感谢页面时,我试图在我的自定义表中设置一个值“已付款”。
我不确定当买家到达感谢页面时插入“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");
}
}
“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
}