cari

Rumah  >  Soal Jawab  >  teks badan

React/Nod: Ralat integrasi ditemui semasa melanggan menggunakan Trial_period_days

Saya mempunyai produk yang ditakrifkan dalam Stripe yang saya ingin sediakan sebagai percubaan percuma selama 7 hari dan kemudian mengenakan bayaran kepada pelanggan (melainkan mereka membatalkan terlebih dahulu)

Menggunakan fungsi Nodejs tersuai melalui Firebase - Saya mendapat ralat berikut:

Missing value for stripe.confirmCardPayment intent secret: value should be a client_secret string

Fungsi bahagian hadapan saya:

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
      );
};

dan fungsi nod saya:

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" });
          }
   });

Jika saya mengeluarkan Trial_period_days maka ia berfungsi dengan baik, tetapi jika saya memasukkannya ia mengembalikan ralat seperti yang dinyatakan di atas.

P粉378264633P粉378264633234 hari yang lalu456

membalas semua(1)saya akan balas

  • P粉497463473

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

    Apabila anda membuat langganan percubaan, PaymentIntent tidak dibuat kerana tiada pembayaran diperlukan pada masa ini.

    Sebaliknya, SetupIntent boleh digunakan untuk mengumpul butiran kaedah pembayaran. Anda boleh melanjutkan pending_setup_intent[0] apabila membuat langganan dan lulus confirmCardSetup.

    [0] https://stripe.com/docs/api/subscription/object#subscription_object-pending_setup_intent

    balas
    0
  • Batalbalas