nextjs-subscription-payments
nextjs-subscription-payments copied to clipboard
[Stripe Webhook] Not update latest status of the subscription object
In the customer.subscription.updated event the "current_period_start" and "current_period_end" not update to the latest of subscription object in database(supabase).
const manageSubscriptionStatusChange = async (
subscriptionId: string,
customerId: string,
createAction = false
) => {
// Get customer's UUID from mapping table.
const { data: customerData, error: noCustomerError } = await supabaseAdmin
.from('customers')
.select('id')
.eq('stripe_customer_id', customerId)
.single()
if (noCustomerError)
throw new Error(`Customer lookup failed: ${noCustomerError}`)
const { id: uuid } = customerData!
const subscription = await stripe.subscriptions.retrieve(subscriptionId, {
expand: ['default_payment_method'],
})
// Upsert the latest status of the subscription object.
const subscriptionData: TablesInsert<'subscriptions'> = {
id: subscription.id,
user_id: uuid,
metadata: subscription.metadata,
status: subscription.status,
price_id: subscription.items.data[0].price.id,
//TODO check quantity on subscription
// @ts-ignore
quantity: subscription.quantity,
cancel_at_period_end: subscription.cancel_at_period_end,
cancel_at: subscription.cancel_at
? toDateTime(subscription.cancel_at).toISOString()
: null,
canceled_at: subscription.canceled_at
? toDateTime(subscription.canceled_at).toISOString()
: null,
// ISSUE: "current_period_start" and "current_period_end" not update to latest of subscription object
current_period_start: toDateTime(
subscription.current_period_start
).toISOString(),
current_period_end: toDateTime(
subscription.current_period_end
).toISOString(),
created: toDateTime(subscription.created).toISOString(),
ended_at: subscription.ended_at
? toDateTime(subscription.ended_at).toISOString()
: null,
trial_start: subscription.trial_start
? toDateTime(subscription.trial_start).toISOString()
: null,
trial_end: subscription.trial_end
? toDateTime(subscription.trial_end).toISOString()
: null,
}
Hi, did you find a solution to this? I am having the same problem.
i am having same problem here with NeonDB and Prisma. I am listening to invoice.paid, webhook is successful, yet subscription end does not update.