php-通过 webhook 等待付款状态时,订单付款状态检查失败
发布时间:2022-05-18 17:39:56 226
相关标签: # 后端
我正在构建一个支付插件。它的工作方式是点击结帐页面上的支付选项,用户在他们的手机上获得一个链接,他们可以在其中完成支付,然后触发到 WooCommerce 网站的 webhook,状态根据支付/失败更新为已支付/失败在 webhook 中接收到的数据。
要求是在单击支付选项后显示的微调器保持打开状态,直到收到 webhook 数据或 2 分钟后超时。现在 webhook 正在做它的工作,但是微调器背后的逻辑失败了。不知道出了什么问题
这是在将带有链接的 SMS 发送给用户后触发的代码。循环内的逻辑do...while不起作用
WC()->cart->empty_cart();
$order->update_status('wc-pending', __('Awaiting payment.', 'txtdomain'));
$loop = 8;
$loopOrder = wc_get_order($order_id);
do {
sleep(15);
$loopOrder = wc_get_order($order_id);
$loop--;
} while ($loopOrder->get_status() == "pending" && $loop >= 0);
if ($loopOrder->get_status() == "pending" || $loopOrder->get_status() == "failed") {
$_SESSION["order_id"] = $order_id;
$_SESSION["timeout"] = (time() + ($GLOBALS['retry_delay_in_minutes'] * 60));
$error_message = 'Timed out. Please wait ' . ($_SESSION["timeout"] - time()) . ' seconds before retrying';
if($loopOrder->get_status() == "failed"){
$error_message = 'Payment failed. Please wait ' . ($_SESSION["timeout"] - time()) . ' seconds before retrying';
}
wc_add_notice($error_message, 'error');
return array(
'result' => 'failed',
);
} else {
return array(
'result' => 'success',
'redirect' => $order->get_checkout_order_received_url()
);
}
下面是接收webhook时触发的代码
$order = wc_get_order($request["OrderNumber"]);
if ($request["StatusID"] == 0) {
$order->update_status('wc-failed');
} else {
update_post_meta($request["OrderNumber"], 'invoiceid', $request["TransactionID"]);
$shipping = false;
foreach ($order->get_items() as $order_item) {
$item = wc_get_product($order_item->get_product_id());
if (!$item->is_virtual()) {
$shipping = true;
}
}
if ($shipping) {
$order->update_status('wc-processing');
} else {
$order->update_status('wc-completed');
}
}
return true;
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报