firebase Stripe API 首次付款流程失败

firebase Stripe API failing on first payment process

我已经成功集成了 stripe 和 firebase,使用 Run Subscription Payments with Stripe

流程如下:

当我点击注册时,它会把我带到条纹页面,使用这个功能:

  export async function createCheckoutSession(activtyStatus){
  let user = firebase.auth().currentUser;
  
      const checkoutSessionRef =  firestore
      .collection('customers')
      .doc(userID)
      .collection('checkout_sessions')
      .add({
        price: price,
        success_url: "https://xxx/successPage",
        cancel_url: "https://xxx/signin",
    });
      // Wait for the CheckoutSession to get attached by the extension
            (await checkoutSessionRef).onSnapshot(function (snap) {
              const { error, sessionId } = snap.data();
              if (error) {
              console.log(`An error occured: ${error.message}`);
            }
            if (sessionId) {

            //live key
            const stripe = window.Stripe('pk_livekeyxxxx');
            stripe.redirectToCheckout({sessionId})
            console.log("logged stripe")
          }
      });
    }

如果成功,它会转到我的 SuccessPage,它只检查订阅集合是否是在 firebase 中创建的。

所以会发生什么,如果支付成功,它只会渲染 /clients 路由,如果不成功,它会重定向到 createCheckoutSession 函数,返回到 allow客户再次付款。因此,当我在 Stripe 上输入付款详细信息时,有时,它会转到客户并添加订阅,有时,它会重定向到 Stripe 页面,让我再次输入 ti,然后它就可以工作了。

这是我代码中的错误,还是 firebase 和 stripe 只是挑剔?

听起来您可能会在客户到达成功页面时丢失您对客户的引用,这样您就无法检查他们的新订阅。

除了加载用户配置文件的身份验证会话等选项之外,您还可以考虑将成功页面设置为 receive the Session ID,并可选择包含您自己的客户 ID。在显示任何个人信息之前,您当然仍应确保您的客户已通过身份验证,但这可能有助于您加载数据。

更新:会话成功后,您可以从 API 检索它(或检查您的 webhook 数据)以查看 subscription 属性 (API ref) 来查找创建的订阅 ID。