结帐时出错 - Wordpress

时间:2016-06-29 04:25:02

标签: php wordpress woocommerce

我有这个非常奇怪的错误,只有在人们尝试订购时才会发生。客人来到我们的网站并添加东西到他们的购物车。然后他们继续去结账。在结账时,当他们点击进入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在第一次结账时出错了吗?

1 个答案:

答案 0 :(得分:0)

问题不在于wp_verify_nonce()或您发布的代码。

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

我最好的猜测是,当人们结账并wp_verify_nonce()收到与预期不同的内容时,会创建一个额外的wp_nonce。如果不查看代码库,我就无法真正确定它发生的位置。

如果没有为这些部分做过自定义代码,那么这实际上意味着与WooCommerce有一个微妙的插件冲突。它甚至可能与主题发生冲突。