J'ai un produit défini dans Stripe que je souhaite configurer comme essai gratuit de 7 jours, puis facturer le client (sauf s'il annule au préalable)
Utilisation d'une fonction Nodejs personnalisée via Firebase - J'obtiens l'erreur suivante :
Missing value for stripe.confirmCardPayment intent secret: value should be a client_secret string
Ma fonctionnalité frontend :
const createSubscription = async () => { setProcessing(true); setWait('PLEASE WAIT'); try { // create a payment method const paymentMethod = await stripe?.createPaymentMethod({ type: "card", card: elements?.getElement(CardElement), billing_details: { name, email, }, }); // call the backend to create subscription const response = await fetch("https://XXX.cloudfunctions.net/tplannersubscription", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ paymentMethod: paymentMethod?.paymentMethod?.id, name, lname, email, priceId }), }).then((res) => res.json()); const confirmPayment = await stripe?.confirmCardPayment( response.clientSecret ); };
et ma fonction nœud :
cors(request, response, async () => { // create a stripe customer try { if (request.method != "POST") return response.status(400); const { name, email, paymentMethod } = request.body; // Create a customer const customer = await stripe.customers.create({ email, name, payment_method: paymentMethod, invoice_settings: { default_payment_method: paymentMethod }, }); // const priceId = request.priceId; // Create a subscription const subscription = await stripe.subscriptions.create({ customer: customer.id, items: [{ price: "price_1KZ3nTGxUje7SlyIDUfIXkr3" }], payment_settings: { payment_method_options: { card: { request_three_d_secure: "any", }, }, payment_method_types: ["card"], save_default_payment_method: "on_subscription", }, payment_behavior: "default_incomplete", trial_period_days: 7, expand: ["latest_invoice.payment_intent"], }); // Send back the client secret for payment response.json({ message: "Subscription successfully initiated", clientSecret: subscription.latest_invoice.payment_intent.client_secret, subID:subscription.id }); } catch (err) { console.error(err); response.status(500).json({ message: "Internal server error" }); } });
Si je supprime Trial_period_days, cela fonctionne bien, mais si je l'inclus, il renvoie l'erreur mentionnée ci-dessus.
Lorsque vous créez un abonnement d'essai, aucun PaymentIntent n'est créé car aucun paiement n'est actuellement requis.
Au lieu de cela, SetupIntent peut être utilisé pour collecter les détails du mode de paiement. Vous pouvez prolonger
pending_setup_intent
[0] lors de la création d'un abonnement et transmettre confirmCardSetup一个>.[0] https://stripe.com/docs/api/subscription/object#subscription_object-ending_setup_intent