结帐时出错- Wordpress


Error on checkout - Wordpress

我有一个非常奇怪的错误,只有当人们试图订购时才会发生。客人来到我们的网站,把东西加到他们的购物车里。然后他们走向收银台。在结账时,当他们点击proceed to paypal,他们得到以下错误:"我们无法处理您的订单,请再试一次。"。但是,在重新加载页面时,当他们试图重新结帐时,错误就消失了。没有插件或主题冲突,因为我检查了所有这些。

我做了一些调试,我注意到抛出错误的原因是因为函数:wp_verify_nonce()我做了一些进一步的调试,发现在用户第一次尝试签出时,调用了上面的函数。并返回false,因为nonce与当前散列的内容不同。然而,在第二次检出时,上述函数返回true,因为nonce是正确的。这意味着由于某种原因,我的nonce第一次是错误的。有人知道为什么吗?

我在以下函数上得到这个问题:process_checkout()执行以下命令时:

if ( empty( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], 'woocommerce-process_checkout' )) {
    WC()->session->set( 'refresh_totals', true );
    throw new Exception( __( 'We were unable to process your order, please try again.', 'woocommerce' ) );
}

我尽了最大的努力来解释我的问题,但是有没有人知道为什么我的nonce在第一次结账时是错误的?

问题不是真的与wp_verify_nonce()或您发布的代码。

wp_nonce的工作方式就像一个队列编号,就像你在DMV的处理编号。

我对正在发生的事情的最好猜测是,当人们签出并且wp_verify_nonce()收到与预期不同的wp_nonce时,创建了一个额外的wp_nonce。如果不查看代码库,我就无法真正确定它发生在哪里。

如果这些部分没有自定义代码,那么这真的意味着与WooCommerce存在微妙的插件冲突。它甚至可能与主题冲突。