My stripe checkout session on my localhost is working fine, but when I try to redirect from my deployed website's checkout page, there is an error 500 
My code where I think the error is coming from:
import Header from "../components/Header";
import Image from "next/image";
import { selectItems, selectTotal } from "../slices/basketSlice";
import { useSelector } from "react-redux";
import Currency from "react-currency-formatter";
import CheckoutProduct from "../components/CheckoutProduct";
import { loadStripe } from "@stripe/stripe-js";
import axios from "axios";
import { useSession } from "next-auth/client";
const stripePromise = loadStripe(process.env.stripe_public_key);
function Checkout() {
const items = useSelector(selectItems);
const total = useSelector(selectTotal);
const [session] = useSession();
const createCheckoutSession = async () => {
// Get Stripe.js instance
const stripe = await stripePromise;
// Call your backend to create the Checkout Session
const checkoutSession = await axios.post(
"/api/create-checkout-session",
{
items,
email: session.user.email,
}
);
// Redirect Customer to Checkout
const result = await stripe.redirectToCheckout({
sessionId: checkoutSession.data.id,
});
if (result.error) {
alert(result.error.message);
}
};
return (
<div className="bg-gray-100">
<Header />
<main className="lg:flex max-w-screen-2xl mx-auto">
{/* Left */}
<div className="flex-grow m-5 shadow-sm">
<Image
src="https://links.papareact.com/ikj"
width={1020}
height={250}
objectFit="contain"
/>
<div className="flex flex-col p-5 space-y-10 bg-white">
<h1 className="text-3xl border-b pb-4">
{items.length === 0
? "Your Amazon Basket is empty."
: "Shopping Basket"}
</h1>
{items.map((item, i) => (
<CheckoutProduct
key={i}
id={item.id}
title={item.title}
rating={item.rating}
price={item.price}
description={item.description}
category={item.category}
image={item.image}
hasPrime={item.hasPrime}
/>
))}
</div>
</div>
{/* Right */}
<div className="flex flex-col bg-white shadow-sm p-10">
{items.length > 0 && (
<>
<h2 className="whitespace-nowrap">
Subtotal ({items.length} items):{" "}
<span className="font-bold">
<Currency quantity={total} currency="GBP" />
</span>
</h2>
<button
disabled={!session}
onClick={createCheckoutSession}
role="link"
s
className={`button mt-2 ${
!session &&
"from-gray-300 to-gray-500 border-gray-200 text-gray-300 cursor-not-allowed"
}`}
>
{!session ? "Sign In to Checkout" : "Proceed to Checkout"}
</button>
</>
)}
</div>
</main>
</div>
);
}
export default Checkout;
App is hosted on Vercel. Created with Next.js / React / Redux. Connected to Firebase / Stripe and I use axios.
Is this snippet of code where the error is coming from? The hardest part about understanding this error is my app works perfectly fine in the localhost with zero issues on all pages in the console, but on the deployed website this error comes up. I think it's possible the issue is on Stripe's end, but that seems unlikely now. Or is this an axios issue?
What part of my code is wrong? I want to be able to click the button and be taken to the Stripe checkout page.
Any help is greatly appreciated
More code:
const stripe = require("stripe")(process.env.STRIPE_SECRET_KEY);
export default async (req, res) => {
const { items, email } = req.body;
const transformedItems = items.map((item) => ({
price_data: {
currency: "gbp",
product_data: {
images: [item.image],
name: item.title,
},
unit_amount: item.price * 100,
},
description: item.description,
quantity: 1,
}));
const session = await stripe.checkout.sessions.create({
payment_method_types: ["card"],
shipping_address_collection: {
allowed_countries: ["GB", "US", "CA"],
},
line_items: transformedItems,
mode: "payment",
success_url: `${process.env.HOST}/success`,
cancel_url: `${process.env.HOST}/checkout`,
metadata: {
email,
images: JSON.stringify(items.map((item) => item.image)),
},
});
res.status(200).json({ id: session.id });
};