I'm trying to get a google cloud function to work to open a stripe checkout, currently it isn't working however.
This is the function:
const functions = require('firebase-functions');
const express = require('express');
const app = express();
const cors = require('cors')({origin: true});
app.use(cors);
app.use(express.json())
app.use(express.static('public'))
app.use(
express.urlencoded({
extended: false,
})
)
const stripe = require('stripe')(functions.config().stripe.secret_key);
exports.createStripeCheckout2 = functions.region('europe-west2').https.onCall(async(req, res) => {
const cust = req.body.customerId
const price = req.body.priceId
const quantity = req.body.students
const quantityA = Number(quantity)
const session = await stripe.checkout.sessions.create({
payment_method_types: ["card"],
mode: 'subscription',
allow_promotion_codes: true,
customer: 'cus_MQrpENhbL84RFD',
line_items: [
{
price: 'price_1LaJC1CKMdmWgnyspBbFet9v',
// For metered billing, do not pass quantity
quantity: 1,
},
],
success_url: `https://learning-platform-835f9.web.app/`,
cancel_url: `https://learning-platform-835f9.web.app/`,
});
res.redirect(session.url);
});
Returns the following:
{"error":{"message":"Bad Request","status":"INVALID_ARGUMENT"}}
With this in the console: Failed to load resource: the server responded with a status of 400 ()
CodePudding user response:
The onCall()
is different than onRequest()
and the parameters in the function are not Request
and Response
from Express. It seems you are trying to call this function like a REST API using fetch
or equivalent. If so, you must sent the request with the details mentioned in the documentation like the Content-Type
header must be present and the body must have a data
property.
In this case, using onRequest
function should work keeping rest of the code as it is.