React/Node : erreur d'intégration rencontrée lors de l'abonnement à l'aide de Trial_period_days
P粉378264633
P粉378264633 2024-04-04 20:30:57
0
1
499

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.

P粉378264633
P粉378264633

répondre à tous(1)
P粉497463473

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal