-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
update stripe sdk and webhooks to match #427
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
@@ -24,7 +24,7 @@ | |||
"react-hot-toast": "^2.4.1", | |||
"react-icons": "4.11.0", | |||
"react-router-dom": "^6.26.2", | |||
"stripe": "11.15.0", | |||
"stripe": "^18.1.0", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
according to new stripe update policy, this will avoid breaking changes.
// We do this so that we can capture priceId in the payment_intent.succeeded webhook | ||
// and easily confirm the user's payment based on the price id. For subscriptions, we can get the price id | ||
// in the customer.subscription.updated webhook via the line_items field. | ||
payment_intent_data: paymentIntentData, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we're no longer dealing with payment intents to handle one-time payment products. these are now just getting handled directly in checkout.session.completed.
@@ -32,8 +32,8 @@ export const stripeWebhook: PaymentsWebhook = async (request, response, context) | |||
case 'invoice.paid': | |||
await handleInvoicePaid(data, prismaUserDelegate); | |||
break; | |||
case 'payment_intent.succeeded': | |||
await handlePaymentIntentSucceeded(data, prismaUserDelegate); | |||
case 'customer.subscription.created': |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
subscription created events used to be sent in customer.subscription.updated events, but they stopped that , so to handle new subscriptions we need this event.
export async function handleInvoicePaid(invoice: InvoicePaidData, prismaUserDelegate: PrismaClient['user']) { | ||
const userStripeId = invoice.customer; | ||
const datePaid = new Date(invoice.period_start * 1000); | ||
return updateUserStripePaymentDetails({ userStripeId, datePaid }, prismaUserDelegate); | ||
const lineItems = await invoiceLineItemsSchema.parseAsync(invoice.lines); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure if this is needed, because we can be certain that stripe is going to send us the correct format, right?
I'll take a look tomorrow. |
Description
fixes #229 #198 #293 #412
Contributor Checklist