You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法访问Stripe结账页面,Railway部署后问题求助

部署Railway后Stripe Checkout会话创建失败排查方案

问题背景

基于Node.js后端+React前端的电商项目,实现了Stripe Checkout会话创建功能,本地测试完全正常,但将后端部署到Railway后出现报错。尝试在请求头中添加Stripe公钥、私钥后问题仍未解决。

后端代码(Node.js/Express)

router.get(
  '/checkout-session/:productId',
  catchAsync(async (req, res, next) => {
    // 1) 获取当前要订购的商品
    const product = await Product.findById(req.params.productId);

    // 2) 创建Checkout会话
    const session = await stripe.checkout.sessions.create({
      expand: ['line_items'],
      payment_method_types: ['card'],
      success_url: `https://nasim67reja.github.io/CareoCIty-ecommerce/`,
      cancel_url: `https://nasim67reja.github.io/CareoCIty-ecommerce/#/${product.categories}`,
      customer_email: req.user.email,
      client_reference_id: req.params.productId,
      line_items: [
        {
          price_data: {
            currency: 'usd',
            unit_amount: product.price * 100,
            product_data: {
              name: `${product.name} `,
              description: product.summary,
              images: [
                `https://e-commerceapi.up.railway.app/Products/${product.categories}/${product.images[0]}`,
              ],
            },
          },
          quantity: 1,
        },
      ],
      mode: 'payment',
    });

    // 3) 返回会话数据
    res.status(200).json({
      status: 'success',
      session,
    });
  })
);

前端代码(React)

const buyProduct = async () => {
    try {
      const session = await axios.get(
        `${URL}/api/v1/orders//checkout-session/${product}`
      );
      window.location.replace(session.data.session.url);
    } catch (error) {
      console.log(`error: `, error.response);
    }
  };

排查与解决方向

  • Stripe密钥配置错误:Railway环境变量需正确配置Stripe私钥,后端应通过环境变量读取密钥(如const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY)),而非在请求头传递。注意区分测试/生产环境密钥,确保Railway中设置的是对应环境的有效私钥。
  • 路径错误:前端请求路径存在双斜杠/orders//checkout-session,会导致路径解析异常,需修正为/orders/checkout-session/${product}。
  • 跨域配置缺失:后端需配置CORS允许前端域名(https://nasim67reja.github.io)发起跨域请求,可通过Express的cors中间件设置指定origin,或在Railway控制台配置CORS规则。
  • 数据库连接失败:检查Railway上的数据库连接字符串是否正确配置,确认后端能正常获取Product数据。若数据库连接异常,会导致后续Stripe会话创建参数缺失。
  • 依赖版本不一致:确保本地与Railway上的stripe包版本一致,不同版本的Stripe API可能存在参数或方法差异,可在package.json中锁定版本后重新部署。
  • 查看应用日志:登录Railway控制台查看后端应用的错误日志,Stripe会返回具体的错误码(如authentication_error、invalid_request_error),根据日志信息定位问题根源。

内容的提问来源于stack exchange,提问作者Nasim_Reja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:30:52