问题描述
目标是拥有一个用户表,其中包括他们的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。
任何一种方法都可以。