首页 > 解决方案 > firebase Stripe API 在第一次付款过程中失败

问题描述

我已经使用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")
          }
      });
    }

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

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

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

标签: javascriptnode.jsfirebasegoogle-cloud-firestorestripe-payments

解决方案


听起来您可能会在客户到达成功页面时失去对客户的参考,从而使您无法检查他们的新订阅。

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

更新:一旦你有一个成功的会话,你可以从 API 中检索它(或检查你的 webhook 数据)来查看subscription属性(API ref)来找到创建的订阅 id。


推荐阅读