WooCommerce跳转Stripe结账页报错,寻求代码修复方案
修复Stripe Checkout Session创建时的API参数错误
问题根源是你使用的Stripe API版本(2022-08-01及以后)已废弃line_items中的直接字段(如name/amount/currency),必须改用price_data嵌套结构定义商品定价信息。以下是修复后的完整代码:
// 替换原line_items定义部分 $session_data['line_items'] = array( [ 'quantity' => 1, 'price_data' => [ 'currency' => strtolower(get_woocommerce_currency()), 'unit_amount' => $total, // 确保$total是货币最小单位(如美元传分、人民币传分) 'product_data' => [ 'name' => esc_html(__('Total', 'payment-gateway-stripe-and-woocommerce-integration')), 'images' => array($images), ], ], ] ); if (empty($customer_id)) { $customer = $this->create_stripe_customer( $order, $user); $customer_id = $customer->id; // 保存Stripe客户ID用于后续扣款 update_user_meta($logged_in_userid, "_stripe_ch_customer_id", $customer_id); } $session_data['customer'] = $customer_id; $session_data['payment_intent_data']['setup_future_usage'] = 'off_session'; $session_data['locale'] = $this->stripe_checkout_page_locale; $session_data = apply_filters('wt_stripe_alter_checkout_request_params', $session_data, $order); $session = \Stripe\Checkout\Session::create($session_data); return array( 'result' => 'success', 'redirect' => $this->get_payment_session_checkout_url( $session->id, $order ), );
关键修改点:
- 原
line_items下的name/images字段移至price_data.product_data层级 - 原
amount字段改为price_data.unit_amount,需保证$total为货币最小单位数值(例如订单总额100元需传10000) - 原
currency字段移至price_data层级 - 保留
quantity字段不变
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

