My stripe customer ID is no longer querying the corresponding subscription ID from stripe and the results come back undefined so my customers can't cancel subscriptions.
I'd like to follow the stripe docs but I can't get the subscription ID to return and I've found a couple examples on stack that recommend the format as customer.subscriptions.data[0] but it's not working as intended (github autopilot also recommends this format).
I'm able to create new customers via the webhook so my connection and stripeSecret are working correctly but how do I fix my code to cancel a subscription using the customer ID:
Controller function
module.exports.cancelSubscription = async (req, res) => {
const user = await User.findById(req.user.id);
if (!user) {
req.flash('error', 'Cannot find that user');
return res.redirect('/users');
}
const customer = await stripe.customers.retrieve(user.stripeId);
// use customer id to get subscription id
const subscriptionId = customer.subscriptions.data[0];
// cancel subscription
stripe.subscriptions.del(subscriptionId, { at_period_end: false });
// update user subscription status in my database
user.subscription.active = "cancelled";
await user.save();
req.flash('success', 'Subscription cancelled');
res.redirect(`/users/${user._id}`);
}
Thank you!
CodePudding user response:
subscriptions parameter in Customer object is not included by default and it's expandable by including it in expand parameter. For example,
const customer = await stripe.customers.retrieve(cus_xxx, {
expand: ['subscriptions'],
});
const subscriptions = customer.subscriptions.data;
Alternatively, you can also use List Subscriptions API with customer set to retrieve customer's subscriptions.
After the subscriptions are retrieved, you can then delete the subscription individually with Cancel Subscription API.
