返回

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;
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(1)
按点赞数排序
用户头像