【问题标题】:Stripe, how to include multiple products in a Checkout session?Stripe,如何在结帐会话中包含多个产品?
【发布时间】:2021-02-21 10:30:38
【问题描述】:

我是 Stripe API 的新手,我正在尝试为我的电子商务网站实现 prebuilt Checkout page。我希望客户最多可以购买 6 件商品,并且我希望这 6 件商品出现在结帐页面上。

documentation 提到 line_items 是“客户正在购买的商品列表”,因此我在 line_items 数组中为每个产品有 6 个对象;但是,stripe.sessions.create() 不会执行并且 Checkout 页面不会加载。如果我删除了 line_items 中除 1 个之外的所有对象,则会话正常工作并加载页面。

以下来自我的后端,它处理创建结帐会话的请求。任何帮助表示赞赏!

app.post('/create-session', async (req, res) => {

    const YOUR_DOMAIN = 'http://localhost:3000/Home';

    const session = await stripe.checkout.sessions.create({
      payment_method_types: ['card'],
      line_items: [
        {
          price_data: {
            currency: 'usd',
            product_data: {
              name: 'Product1',
              images: ['https://i.imgur.com/EHyR2nP.png'],
            },
            unit_amount: 1899,
          },
          quantity: 1,
        },
        {
            price_data: {
                currency: 'usd',
                product_data: {
                name: 'Product2',
                images: ['https://i.imgur.com/EHyR2nP.png'],
                },
                unit_amount: 1899,
            },
            quantity: 1,
        },
        {
            price_data: {
                currency: 'usd',
                product_data: {
                name: 'Product3',
                images: ['https://i.imgur.com/EHyR2nP.png'],
                },
                unit_amount: 1899,
            },
            quantity: 1,
        },
        {
            price_data: {
                currency: 'usd',
                product_data: {
                name: 'Product4',
                images: ['https://i.imgur.com/EHyR2nP.png'],
                },
                unit_amount: 1899,
            },
            quantity: 1,
        },
        {
            price_data: {
                currency: 'usd',
                product_data: {
                name: 'Product5',
                images: ['https://i.imgur.com/EHyR2nP.png'],
                },
                unit_amount: 1899,
            },
            quantity: 1,
        },
        {
            price_data: {
                currency: 'usd',
                product_data: {
                name: 'Product6',
                images: ['https://i.imgur.com/EHyR2nP.png'],
                },
                unit_amount: 1899,
            },
            quantity: 1,
        },
      ],
      mode: 'payment',
      success_url: `${YOUR_DOMAIN}?success=true`,
      cancel_url: `${YOUR_DOMAIN}?canceled=true`,
    });
    res.json({ id: session.id });
  });

编辑: 我正在使用条带节点 8.119.0。

在 Stripe 开发人员日志中,我收到 POST /v1/checkout/sessions 的 400 错误。这是响应正文:

    {
  "error": {
    "code": "parameter_invalid_integer",
    "doc_url": "https://stripe.com/docs/error-codes/parameter-invalid-integer",
    "message": "This value must be greater than or equal to 1.",
    "param": "line_items[1][quantity]",
    "type": "invalid_request_error"
  }
}

在前端,我在控制台中得到以下信息: error message

【问题讨论】:

  • "stripe.sessions.create() 不执行,结帐页面不加载" 您的控制台或 Stripe 开发者日志中是否有错误消息?
  • 正如@ceejayoz 所说:你能提供更多细节吗?这看起来正确/有效,因此我们需要任何错误来帮助您调试。您能分享一下您使用的stripe-node 的哪个版本以及您的默认API 版本是什么?
  • 我的条带节点版本是 8.119.0。我的后端没有任何问题,但我的 Stripe 开发者控制台显示 POST /v1/checkout/sessions 存在 400 错误:{“error”:{“code”:“parameter_invalid_integer”,“doc_url”:“ stripe.com/docs/error-codes/parameter-invalid-integer", "message": "这个值必须大于等于1。", "param": "line_items[1][quantity]", "type": "invalid_request_error" } }
  • 您的数量是否来自某个变量或数据库?还是它们总是硬编码为quantity: 1,如上例所示? Stripe 开发者控制台应该显示您发送的内容以及他们回复的内容;匹配吗?
  • @creejayoz 是的,我的数量暂时是硬编码的。但是在以前的版本中,我让它们依赖于从值 0 开始的状态,看起来我还没有完全更新我的后端。现在每个数量都被硬编码为 1,所以它似乎是设置为 0 的数量导致了这个问题。如果您不介意我再问一个问题,这是否意味着我不能始终在结帐会话中定义所有 6 种产品?我的方法是在每个会话中定义所有 6 个,但数量会有所不同(从 0 开始),具体取决于在前端选择了多少产品。

标签: node.js express stripe-payments


【解决方案1】:

这就是我在 PHP 中的工作:

$checkout_session = \Stripe\Checkout\Session::create([
      'payment_method_types' => ['card'],
      'line_items' => [ 
      [
        'price_data' => [
          'currency' => 'usd',
          'unit_amount' => 2000,
          'product_data' => [
            'name' => 'test',
          ],
        ],
        'quantity' => 1,
      ],
      [
        'price_data' => [
          'currency' => 'usd',
          'unit_amount' => 1000,
          'product_data' => [
            'name' => 'test1',
          ],
        ],
        'quantity' => 1,
      ],
      ],
      'mode' => 'payment',
      'success_url' => $return_url,
      'cancel_url' => $return_url,
    ]);

您的 unit_amount 似乎嵌套不正确?

【讨论】:

  • 在节点 js 中相同:const items = [ { 'price_data': { currency: 'usd', unit_amount: 2000, product_data: { name: 'test', }, }, quantity: 1, }, { price_data: { currency: 'usd', unit_amount: 1000, product_data: { name: 'test1', }, }, quantity: 1, }, ];
猜你喜欢
  • 2022-01-01
  • 1970-01-01
  • 2021-09-23
  • 2021-06-24
  • 1970-01-01
  • 2021-12-24
  • 2020-07-18
  • 1970-01-01
相关资源
最近更新 更多