【问题标题】:How can I identify specific products from Stripe charge.succeeded events?如何从 Stripe charge.succeeded 事件中识别特定产品?
【发布时间】:2022-09-26 16:34:05
【问题描述】:

我已经设置了一个 Pipedream 工作流,它使用 webhook 监听 Stripe 事件,然后将购买者添加到 mailerlite 组。

我想销售多种产品,但根据他们购买的产品将用户添加到不同的 mailerlite 组。

我想我可以通过将目标 mailerlite 组 id 添加到产品元数据来做到这一点,但是当我测试这个时,元数据对象进入 pipedream 时是空的。

如何从条纹charge.succeeded 事件中识别产品?

    标签: stripe-payments pipedream mailerlite


    【解决方案1】:

    通过标准的 Checkout 集成,您可以创建 Checkout Session,并且您知道将购买哪些产品,因为您将它们传递到您传入的 line_items (api ref)。您可以添加逻辑,而不是在产品上设置 metadata在您创建结帐会话之前知道哪个“目标 mailerlite 组 id”,然后将该信息传递给metadata(请参阅apiref)。您将从checkout.session.completed 事件中获得所有这些信息。

    如果您正在做交叉销售之类的事情,这将不起作用,但它可能是一个不错的选择,并且可以省去在您想要检查元数据时必须从条带中重新检索产品的麻烦。

    【讨论】:

    • 虽然这可能会起作用,但我绝不会在代码中管理结帐会话。我实际上是在收听基于使用 Stripe 支付链接并填写默认条带结帐页面的人从条带生成的事件。
    【解决方案2】:

    没有任何操作可以从 charge.succeeded 中检索产品,charge.succeeded 事件中也没有任何数据可以引导您返回源产品。

    在这种情况下,元数据不是与产品关联的元数据,而是与 charge.succeeded 事件关联的元数据。

    2022 年 6 月更新

    我已经在 Pipedream 中贡献了 Stripe 操作来执行这两个调用,因此无需编写自定义 API 调用。

    2022 年 6 月前

    为了做我想做的事,我必须:

    1. 更改触发器以查找 checkout.session.completed,它在结帐完成时发生。
    2. 获取结帐会话 ID 并使用它来调用条带 API 并获取行项目:
      import { axios } from "@pipedream/platform"
      
      export default defineComponent({
        props: {
          stripe: {
            type: "app",
            app: "stripe",
          }
        },
        async run({steps, $}) {
          return await axios($, {
            url: `https://api.stripe.com/v1/checkout/sessions/${steps.trigger.event.data.object.id}/line_items?limit=5`,
            auth: {
              username: `${this.stripe.$auth.api_key}`,
              password: ``,
            },
          })
        },
      })
      
      
      1. 订单项包含价格,该价格又引用产品,因此使用结帐会话订单项请求的输出来获取产品 ID:
      import { axios } from "@pipedream/platform"
      export default defineComponent({
        props: {
          stripe: {
            type: "app",
            app: "stripe",
          }
        },
        async run({steps, $}) {
          return await axios($, {
            url: `https://api.stripe.com/v1/products/${steps.stripe.$return_value.data[0].price.product}`,
            auth: {
              username: `${this.stripe.$auth.api_key}`,
              password: ``,
            },
          })
        },
      })
      
      1. 使用的输出获取元数据并在 mailerlite _subscribe_to_group 操作中使用它。

    【讨论】:

      猜你喜欢
      • 2018-11-09
      • 2013-08-11
      • 2021-11-07
      • 2016-08-12
      • 2019-01-19
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 2021-11-09
      相关资源
      最近更新 更多