如何将Stripe,AWS Cognito和我的RDS Postgres数据库连接在一起?

问题描述

目标是拥有一个用户表,其中包括他们的Stripe客户ID,用于验证的电子邮件以及他们选择从我的Web应用程序购买的计划。

一旦用户记录通过Cognito注册到我的Web应用程序中,就很容易插入。在前端,我检查身份验证状态何时变为“ signUp”,然后调用后端Express API,该API会使用其电子邮件用户名创建一个新用户

最困难的部分是客户通过Stripe购买商品。我使用了预先构建的Checkout页面,该页面为我创建了UI和逻辑。我在后端设置了事件Webhooks,以便每当有客户购买商品时,我都可以在那里做我的逻辑。问题在于,触发此Webhook时,我没有有关他们的电子邮件的信息,因此我不知道如何在数据库中找到他们的记录并使用客户ID信息对其进行更新。

这是我的webhook代码


router.post("/webhooks",(req,res) => {
  const event = req.body;

  switch (event.type) {
    case "charge.succeeded": {
      console.log("CHARGE SUCCEEDED",event);
    }
    case "payment_intent.succeeded": {
      console.log(event);
      const paymentIntent = event.data.object;
      const customer_id = event.data.object.customer;

      console.log("PaymentIntent was successful!");

      // Cognito_User.update(
      //   {stripe_id : "test_stripe4_id"},//   {returning: true,where: {email: ???} }
      // )
      break;
    }
    case "payment_method.attached": {
      const paymentMethod = event.data.object;
      console.log("PaymentMethod was attached to a Customer!");
      break;
    }
    // ... handle other event types
    default: {
      // Unexpected event type
      return res.status(400).end();
    }
  }

从技术上讲,我可以在Stripe Checkout中使用客户提交的用于支付计划费用的电子邮件,但这可能并不总是与他们登录时使用的电子邮件相同。

我想知道是否可以将其他用户信息(用于登录到Cognito的电子邮件)附加到webhook触发器,还是我需要放弃预构建结帐并通过代码创建Stripe付款结帐流程?

解决方法

创建结帐会话ID或重定向之前,您可以保存它,也可以在创建会话时从系统中提供一个已经存在的Client Reference ID

任何一种方法都可以。