1

Woocommerce 订单失败并显示错误消息,使用 razorpay 支付网关。

抱歉,此订单无效,无法付款。

下单时,pay_url 生成如下

https://dev-xyz.pantheonsite.io/checkout/order-pay/6339/?key=wc_order_5b421123a4g1r

但是在“WC_Shortcode_Checkout”中的“order_pay”函数上抛出如下错误

抱歉,此订单无效,无法付款。

从异常

throw new Exception( __( 'Sorry, this order is invalid and cannot be paid for.', 'woocommerce' ) );

深入研究这个问题,woocommerce 期待来自$_GET的订单密钥

$order_key = $_GET['key'];

任何解决方案,可能是什么问题?

4

1 回答 1

1

作为一种解决方法:

      if($order_key === ''){
                    $order_key = get_post_meta( $order_id, '_order_key', true);
        }

如果无法从下面的附加代码中的 $_GET 获取值,该代码是D:\MAMP\htdocs\webiste\wp-content\plugins\woocommerce\includes\shortcodes\class-wc-shortcode- 中 WC_Shortcode_Checkout 类一部分checkout.php将解决这个问题。

        } catch ( Exception $e ) {
            wc_add_notice( $e->getMessage(), 'error' );
        }
    } elseif ( $order_id ) {

        // Pay for order after checkout step
        $order_key            = isset( $_GET['key'] ) ? wc_clean( $_GET['key'] ) : '';
        $order                = wc_get_order( $order_id );
      if($order_key === ''){
                    $order_key = get_post_meta( $order_id, '_order_key', true);
        }
        if ( $order && $order->get_id() === $order_id && $order->get_order_key() === $order_key ) {

还有一个可能的根本原因,问题可能出在 Nginx 配置上。默认情况下,NGINX 配置中可能会丢失查询字符串,这也可能导致在 $_GET 中发送值时出现问题

location / {
try_files $uri $uri/ /index.php?$query_string;
}
于 2017-12-01T19:41:30.327 回答