⚠️ PLEASE NOTE: This library is currently in beta and should be used in production with caution!
yarn add @nurodev/next-stripe
Create a [...nextstripe].js
catch-all route in your project's pages/api/stripe
directory.
⚠️ PLEASE NOTE: It is recommended you use a restricted key with limited API access with this library. These keys can be created and configured with the required access in the Stripe Dashboard.
import NextStripe from '@nurodev/next-stripe';
export default NextStripe({
stripe_key: process.env.STRIPE_RESTRICTED_KEY,
options: {
// Optionally specify Stripe instance options
// See: https://stripe.com/docs/js/initializing#init_stripe_js-options
},
});
@nurodev/next-stripe/client
exports helper functions to call the Next.js API routes.
import { createCheckoutSession } from '@nurodev/next-stripe/client';
const session = await createCheckoutSession({
success_url: window.location.href,
cancel_url: window.location.href,
line_items: [{ price: 'price_id', quantity: 1 }],
payment_method_types: ['card'],
mode: 'payment',
});
import { createPaymentIntent } from '@nurodev/next-stripe/client';
const paymentIntent = await createPaymentIntent({
amount: 1000,
currency: 'usd',
});
import { confirmPaymentIntent } from '@nurodev/next-stripe/client';
const paymentIntent = await confirmPaymentIntent('pi_id', {
payment_method: 'pm_id',
});
import { retrievePaymentIntent } from '@nurodev/next-stripe/client';
const paymentIntent = await retrievePaymentIntent('pi_id');
import { updatePaymentIntent } from '@nurodev/next-stripe/client';
const paymentIntent = await updatePaymentIntent('pi_id', {
amount: 1000,
currency: 'usd',
});
import { createBillingPortalSession } from '@nurodev/next-stripe/client';
const session = await createBillingPortalSession({
customer: 'cus_id',
return_url: window.location.href,
});
- A lot of the patterns in this library were inspired by NextAuth.
- Thanks to Jamie Barton for the initial idea.