Stripe React Firebase:stripe checkoutSession 的 sessionId 错误。我收不到这个sessionId

问题描述 投票:0回答:2

我正在尝试使用 Stripe Firebase 扩展创建订阅。 我正在使用 JS 编写指南

这是指南中的代码 指南页面

After creating the Checkout session, the Stripe Firebase extension will populate the sessionId on the document, which allows you to redirect to the Checkout.
lib/db.js
import firebase from './firebase';
import getStripe from './stripe';

const firestore = firebase.firestore();

export async function createCheckoutSession(uid) {
  const checkoutSessionRef = await firestore
    .collection('users')
    .doc(uid)
    .collection('checkout_sessions')
    .add({
      price: 'price_HLxRKYrVN3CVzy',
      // This can be removed if you don't want promo codes
      allow_promotion_codes: true,
      success_url: window.location.origin,
      cancel_url: window.location.origin
    });

  checkoutSessionRef.onSnapshot(async (snap) => {
    const { sessionId } = snap.data();

    if (sessionId) {
      const stripe = await getStripe();

      stripe.redirectToCheckout({ sessionId });
    }
  });
}

我已经很好奇,因为代码看起来像节点或下一个...... 我的代码版本

createCheckoutSession.js

import { addDoc, doc, onSnapshot, collection } from "firebase/firestore"; 
import { firestore } from "../../firebase";
import { getStripe } from "./initializeStripe";

export async function createCheckoutSession(uid) {

  const stripe = await getStripe();

  const docRef = await addDoc(collection(firestore, "users", `${uid}`, "checkout_sessions"), {
    price: "PRICE_ID",
    success_url: window.location.origin,
    cancel_url: window.location.origin,
  })

  // Wait for the CheckoutSession to get attached by the extension
  onSnapshot(doc(firestore, "users", `${uid}`, "checkout_sessions", docRef.id), (doc) => {
    console.log("Current data: ", doc.data());
    const { sessionId } = doc.data();
    
    console.log("doc data: ", doc.data());
    stripe.redirectToCheckout({sessionId: "123"});
  });
}

尽管发生了这些变化,我无法理解,为什么我应该这样做(如果需要,你可以解释),直到

const { sessionId } = doc.data();

正在工作,按照指南,我正在尝试从我的文档数据中获取 sessionId,但没有这样的属性...所以我无法创建 checkoutSession。

我很乐意提供任何帮助:)

马克西姆

javascript firebase google-cloud-firestore stripe-payments
2个回答
0
投票

你应该小心,当你设置Stripe Extension时,我从users -> customers更改了路径。这就是原因,Firebase 没有添加条纹额外信息。

因此,进入 Firebase Extensions -> Stripe Extension 并检查所有路径。


0
投票

我有完全相同的问题。当用户在我的应用程序中注册时,会在 Stripe 仪表板中创建 stripeID 和 stripe customerID 以及元数据 firebase ID。但是,当用户稍后通过我的 stripe 产品订阅时,会使用新的 customerID 创建一个全新的客户,并且没有 firebaseUID,并且我的 Firestore 不会更新订阅者集合。我无法在任何地方找到帮助。我认为我的 heckout 集成与 Firestore 没有连接。但是客户 cus_Phmg0DMe36adb6 是在开始时通过 API 与 Firestore 集成创建的,这太令人困惑了...

© www.soinside.com 2019 - 2024. All rights reserved.