Maison  >  Questions et réponses  >  le corps du texte

React/Node : erreur d'intégration rencontrée lors de l'abonnement à l'aide de Trial_period_days

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粉378264633P粉378264633219 Il y a quelques jours420

répondre à tous(1)je répondrai

  • P粉497463473

    P粉4974634732024-04-05 13:16:23

    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

    répondre
    0
  • Annulerrépondre