【发布时间】: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.Stripe和stripe.redirectToCheckout。并不是说 Stripe.js 和redirectToCheckout应该在客户端上运行并触发客户端重定向。不过,也许我误读了 firebase 代码。 -
@NolanH 我已经更新了我的问题,以便更容易地展示它......我明白你在说什么,但即便如此,有时会导致它失败吗?
-
您使用什么来确定重定向到成功页面后的操作?这似乎在您的应用程序的控制之下。我担心您正在检查什么,以及您是否会不小心让您的客户支付两次。除非创建订阅成功,否则您不应看到客户被重定向到成功页面。你怎么知道这是否有效?
-
这不应该发生。如果您看到
mode=subscription的 Checkout 会话在没有创建订阅的情况下成功,我建议您联系支持人员并提供确切的 checkout session ID 示例,让他们帮助您进行调查。
标签: javascript node.js firebase google-cloud-firestore stripe-payments