【问题标题】:firebase Stripe API failing on first payment processfirebase Stripe API 在第一次付款过程中失败
【发布时间】:2021-07-14 22:25:48
【问题描述】:

我已经使用Run Subscription Payments with Stripe成功集成了条带和firebase。

流程如下:

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

  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 函数,该函数返回允许客户再次支付。因此,当我在 Stripe 上输入付款详细信息时,有时它会转到客户并添加订阅,有时它会重定向到 Stripe 页面,并让我再次输入 ti,然后它就可以在其中工作了。

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

【问题讨论】:

  • 这里有很多难以阅读的嵌套层级的 firestore 调用。你能提供一个你期望发生的事情和实际发生的事情的清晰顺序吗?我建议您尝试将代码修剪为您试图实现的快乐路径,以了解事情可能会出错的地方。您需要缩小代码中意外行为发生的位置,然后具体询问该部分,而不是整个用户流程。
  • 另外,我看到你在看起来像服务器端代码的地方指的是window.Stripestripe.redirectToCheckout。并不是说 Stripe.js 和 redirectToCheckout 应该在客户端上运行并触发客户端重定向。不过,也许我误读了 firebase 代码。
  • @NolanH 我已经更新了我的问题,以便更容易地展示它......我明白你在说什么,但即便如此,有时会导致它失败吗?
  • 您使用什么来确定重定向到成功页面后的操作?这似乎在您的应用程序的控制之下。我担心您正在检查什么,以及您是否会不小心让您的客户支付两次。除非创建订阅成功,否则您不应看到客户被重定向到成功页面。你怎么知道这是否有效?
  • 这不应该发生。如果您看到 mode=subscription 的 Checkout 会话在没有创建订阅的情况下成功,我建议您联系支持人员并提供确切的 checkout session ID 示例,让他们帮助您进行调查。

标签: javascript node.js firebase google-cloud-firestore stripe-payments


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-06-28
    • 2022-01-19
    • 2017-10-19
    • 2020-07-04
    • 2021-03-11
    • 2014-04-28
    • 2014-12-03
    • 2021-10-26
    • 2019-04-15
    相关资源
    最近更新 更多