在Firestore中实现Stripe支付的方法,无需使用firebase.auth
P粉731861241
2023-09-01 22:10:29
<p>我正在尝试在我的node.js应用中使用Stripe支付,在whatsapp上向用户销售产品。</p>
<p>我安装了stripe扩展:stripe/firestore-stripe-payments@0.3.3,并按照文档中的说明进行了操作:</p>
<pre class="brush:php;toolbar:false;">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,
});
// 等待扩展附加CheckoutSession
docRef.onSnapshot((snap) => {
const { error, url } = snap.data();
if (error) {
// 向客户显示错误,并在Firebase控制台中检查云函数日志。
alert(`发生错误:${error.message}`);
}
if (url) {
// 我们有一个Stripe Checkout URL,让我们重定向。
window.location.assign(url);
}
});</pre>
<p>我在云控制台中收到以下错误:</p>
<p><code>❗️[错误]:为文档[maxxxxxxxxxA]创建Checkout会话失败:提供的标识符没有对应的用户记录。</code></p>
<p>我发现我需要使用来自Firebase身份验证的userId,但由于我在函数(后端服务器)中运行我的服务,所以在auth中没有客户端/用户。</p>
<p>是否有另一种方法来创建(个别的)stripe结账链接?是否有一种在没有客户端的情况下使用Firebase身份验证的方法?</p>
<p>提前感谢。</p>
<p>我尝试使用auth,</p>
<pre class="brush:php;toolbar:false;">import { getAuth } from "firebase/auth";
const auth = getAuth();
const user = auth.currentUser;</pre>
<p>但我收到以下错误:<code>FirebaseError: Firebase: 需要提供选项,当不通过源部署到托管时。 (app/no-options)</code></p>
<p>我尝试了这个:https://stackoverflow.com/a/74732162/21612440</p>
<p>并得到<code>TypeError: 无法读取未定义的属性'getProvider'(读取'getProvider')</code></p>
云函数(原则上)在没有当前经过身份验证的用户上下文的情况下运行。因此,在云函数中,
auth.currentUser
几乎没有意义,因为每个请求可能来自不同的用户。但是,您可以将任何您想要的UID传递到这里的Firestore数据库
.doc(currentUser.uid)
。因此,如果您可以以某种其他(安全)方式确定相关的UID,您可以传递该值,Stripe扩展将为该用户处理它。