我试图在我的node.js应用程序中使用Stripe Payments,该应用程序通过whatsapp向用户销售产品。
我安装了条带扩展:stripe/firestore-stripe-payments@0.3.3并按照文档所说的做了:
const docRef = await db
.collection('customers')
.doc(currentUser.uid)
.collection('checkout_sessions')
.add({
price: 'price_1GqIC8HYgolSxxxxxxxxx',
success_url: window.location.origin,
cancel_url: window.location.origin,
});
// Wait for the CheckoutSession to get attached by the extension
docRef.onSnapshot((snap) => {
const { error, url } = snap.data();
if (error) {
// Show an error to your customer and
// inspect your Cloud Function logs in the Firebase console.
alert(`An error occured: ${error.message}`);
}
if (url) {
// We have a Stripe Checkout URL, let's redirect.
window.location.assign(url);
}
});
我在云控制台得到以下错误:
❗️[Error]: Checkout session creation failed for doc [maxxxxxxxxxA]: There is no user record corresponding to the provided identifier.
我发现我需要使用firebase Authentication中的userId,但是由于我在函数(后端服务器)中运行我的服务,因此在auth中没有客户端/用户。
是否有另一种方法来创建一个(单独的)stripe checkout链接?有没有一种方法可以在没有客户端的情况下使用firebase身份验证?
提前谢谢你。
我尝试使用auth,
import { getAuth } from "firebase/auth";
const auth = getAuth();
const user = auth.currentUser;
,但我得到以下错误:FirebaseError: Firebase: Need to provide options, when not being deployed to hosting via source. (app/no-options)
我试过了:https://stackoverflow.com/a/74732162/21612440
得到TypeError: Cannot read properties of undefined (reading 'getProvider')
Cloud Functions运行(原则上)不需要当前经过身份验证的用户的上下文。所以auth.currentUser
在云函数中没有什么意义,因为每个请求可能来自不同的用户。
但是你可以传递任何你想要的UID到Firestore数据库.doc(currentUser.uid)
。因此,如果您可以以其他(安全)方式确定相关的UID,则可以传递该值,并且Stripe扩展将为该用户处理该值。