【问题标题】:How to fulfill orders after Stripe's checkout.session.completed event?如何在 Stripe 的 checkout.session.completed 事件后完成订单?
【发布时间】:2022-12-13 06:39:46
【问题描述】:

我的问题是 Stripe 的元数据对象有 500 个字符的限制。我有一个有效的结帐流程,但我唯一的限制是我的购物车的字符数限制。我的 cartItems 对象有我想为每个购物车项目包含的附加信息和客户注释。话虽如此,元数据限制很快达到 500 个字符。我读过另一篇文章 here,在我的应用程序中实现了 websockets,这样我就可以在监听 stripes 事件后创建订单。我该怎么做?还有其他解决方法吗?

let endpointSecret;
endpointSecret =
  "whsec_bd73383ed0fcf9cfb27bd4929af341605ad32577dfd8825e1143425b846bb3c3";

router.post("/webhook", (request, response) => {
  const sig = request.headers["stripe-signature"];

  let data;
  let eventType;

  if (endpointSecret) {
    let event;

    try {
      event = stripe.webhooks.constructEvent(
        request.rawBody,
        sig,
        endpointSecret
      ); //@JA - Had to modify this to take the rawBody since this is what was needed.
    } catch (err) {
      response.status(400).send(`Webhook Error: ${err.message}`);
      return;
    }

    data = event.data.object;
    eventType = event.type;
  } else {
    data = request.body.data.object;
    eventType = request.body.type;
  }

  // Handle the event
  if (eventType === "checkout.session.completed") {
    stripe.customers
      .retrieve(data.customer)
      .then((customer) => {
        console.log("customer:", customer);
        console.log("data:", data);
        createOrder(customer, data);
      })
      .catch((err) => console.log(err.message));
  }

【问题讨论】:

    标签: javascript node.js stripe-payments mern


    【解决方案1】:

    您通常不会在元数据中传递所有购物车信息,您通常会将该信息存储在您自己的数据库中,然后根据与该数据对应的 UUID 和您通过元数据在结账会话中设置的订单 ID 检索必要的信息然后通过 Webhook 返回。

    举个我上面推荐的例子——

    在您的数据库中,您将拥有类似以下内容的内容:

    Order ID Cart Item1 Cart Item1 Description Cart Item2...
    123456 hat red scarf
    123457 sock blue

    然后,当您创建结帐会话时,您只需将订单 ID 作为元数据传递。当您收到 checkout.session.completed Webhook 时,该元数据将指示订单 ID,因此现在您拥有履行和对帐所需的所有数据(并且您可以相应地更新数据库)。

    另外,为了澄清一个误解,Stripe's metadata 可以有 50 个键,每个键的值最多 500 个字符。

    【讨论】:

    • 非常感谢你的回复!绝对为我清理了一切。那么您是否建议先创建订单,然后在 webhook 中传递订单 ID 后相应地更新它?比如付费状态?
    • 是的,在创建结帐会话时订单应该已经创建,然后在收到完成的 Webhook 时更新。
    【解决方案2】:

    抱歉打扰了,但我遇到了同样的问题。这个网站不允许我直接给你发私信,所以我必须通过一个答案来问这个问题:我读了 bismark 的答案,它似乎经过深思熟虑,但我是新手,不能完全理解它。您介意与我分享您是如何具体解决这个问题的吗?我假设我们都根据您提供的代码遵循相同的教程,并且我已经在这个元数据问题上停留了好几天,但无法弄清楚。

    如果有任何帮助,我将不胜感激。谢谢!

    【讨论】:

      猜你喜欢
      • 2021-08-25
      • 2021-02-24
      • 2014-05-01
      • 2021-12-09
      • 2019-02-24
      • 2020-10-23
      • 2022-12-19
      • 2020-06-21
      • 2021-10-17
      相关资源
      最近更新 更多