首页  >  问答  >  正文

在Firestore中实现Stripe支付的方法,无需使用firebase.auth

<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>
P粉731861241P粉731861241433 天前484

全部回复(1)我来回复

  • P粉821274260

    P粉8212742602023-09-02 12:36:02

    云函数(原则上)在没有当前经过身份验证的用户上下文的情况下运行。因此,在云函数中,auth.currentUser几乎没有意义,因为每个请求可能来自不同的用户。

    但是,您可以将任何您想要的UID传递到这里的Firestore数据库.doc(currentUser.uid)。因此,如果您可以以某种其他(安全)方式确定相关的UID,您可以传递该值,Stripe扩展将为用户处理它。

    回复
    0
  • 取消回复