Как соединить Stripe, AWS Cognito и мою базу данных RDS Postgres вместе?

#postgresql #amazon-cognito #stripe-payments

#postgresql #amazon-cognito #stripe-платежи

Вопрос:

Цель состоит в том, чтобы иметь таблицу пользователей, которая включает их идентификатор клиента Stripe, их адрес электронной почты, который они использовали для аутентификации, и план, который они выбрали для покупки в моем веб-приложении.

Было достаточно просто вставить записи пользователей, как только они зарегистрировались в моем веб-приложении через Cognito. Во внешнем интерфейсе я проверяю, когда состояние авторизации изменяется на «Регистрация», и вызываю свой серверный экспресс-API, который создает нового пользователя с его электронной почтой и именем пользователя.

Самое сложное — это когда клиент совершил покупку через Stripe. Я использовал предварительно созданную страницу оформления заказа, которая создает пользовательский интерфейс и логику для меня. Я настроил веб-ссылки событий в своем бэкэнде, чтобы всякий раз, когда клиент покупал товар, я мог выполнять там свою логику. Проблема в том, что когда запускается этот веб-хук, у меня нет информации об их электронной почте, поэтому я не знаю, как найти их запись в базе данных и обновить ее с помощью идентификационной информации клиента.

Вот мой код 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, но это не всегда может быть тот же адрес электронной почты, который они использовали для входа в систему.

Мне интересно, могу ли я прикрепить дополнительную информацию о пользователе (их адрес электронной почты, используемый для входа в cognito) к триггеру webhook, ИЛИ мне нужно отказаться от предварительной проверки и создать поток проверки оплаты Stripe с помощью кода?

Ответ №1:

Вы можете либо сохранить идентификатор сеанса проверки после его создания и перед перенаправлением, либо предоставить уже существующий идентификатор ссылки клиента из вашей системы при создании сеанса.

Любой способ будет работать.