【发布时间】: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