当前位置: 首页 > 知识库问答 >
问题:

使用Firestore在云函数中获取/添加文档

徐鑫鹏
2023-03-14

当用户购买产品并按条支付时,我在自动化工作流程的集成方面有点困难。我正在使用火力还原和云功能。

工作流程

>

  • 用户通过条纹Checkout.js购买产品
  • 付款存储在付款集合中

    { product:<uid of the product> '...', user:<uid of the user> '..', method: 'stripe', token:< Stripe token> {..} }
    

    触发云功能(付款收款的onWrite)

    TODO:将文档添加到集合“用户”文档中的“采购”集合

    费用支付

    除了第4步和第5步之外,我已经实现了这个工作流,因为我不知道如何在云函数中从Firestore检索和添加DocRef(Firebase文档提供了很多关于如何使用RT数据库的示例)

    功能/索引。js

    exports.stripeCharge = functions.firestore
      .document('/payments/{payment}')
      .onWrite(event => {
        const paymentId = event.params.payment;
        const payment = event.data.data();
        if (!payment || payment.method !== 'stripe' || payment.charge) return;
        // 4. Get Product's Price
        firestore.collection('products').doc(payment.product).then(product => {
          const idempotency_key = paymentId;
          const charge = {
            amount: product.price,
            currency: 'chf',
            source: payment.token.id
          };
          stripe.charges.create(charge, {idempotency_key}).then(charge => {
            // 5. Update User Purchases
            firestore.collection('users').doc(payment.user).collection('purchases').add({
              product: payment.product,
              payment: paymentId,
              date: new Date()
            });
            // Updated Charge
            event.data.ref.update({charge});
          });
        });
    

    AdminSDK我想我必须使用AdminSDK来实现这一点,但我不知道Firestore应该如何使用它

  • 共有1个答案

    羊舌墨一
    2023-03-14

    从Admin SDK访问Firestore与从Admin SDK访问任何其他Firebase产品非常相似:例如Admin。firestore() 参见https://firebase.google.com/docs/reference/admin/node/firebase-admin.firestore.md#firebase-adminfirestore\u模块。

    尝试访问文档时,缺少get()调用:

    firestore.collection('products').doc(payment.product).get().then(product => {
        if (!product.exists) {
            console.log('No such product!');
        } else {
            console.log('Document data:', product.data());
        }
    

    如果您以前没有使用过JavaScript中的Firestore,那么开始使用云函数并不是最简单的方法。我建议阅读JavaScript/web用户的文档,并为web开发人员学习Firestore codelab。

     类似资料:
    • 云功能文档说 //使用Firebase管理SDK访问Firebase实时数据库。const admin=require('firebase-admin');管理初始化EAPP(); 我使用的是Cloud Firesta,而不是实时数据库。我如何访问它?

    • 我试图在云函数中获得通过firebase web sdk验证的用户的UID。cloud函数由cloud FireStore的事件触发。 当登录用户正在创建/更新CAFE中的项目时,会触发此功能。身份验证由处理。安全规则仅对登录的用户启用写操作。因此该事件可以绑定到用户。 文档中有处理的示例,但在所有这些情况下,userId都是文档路径的一部分。但是在这个模型中,用户不是路径的一部分,因为一个咖啡馆

    • 在我们仔细处理之后。我仍然无法获取自动生成的文档ID。没有“then”选项。我的代码: 创建后如何获取ID?

    • 我的目标是用子集合test2下的[0]th+[1]th+[2]the document的值更新数据更新的test1ID文档。 但是使用下面的代码,我得到了未定义的test2文档列表(currentTest2DocumentList)。 (错误消息=>TypeError:无法读取未定义的属性“0”) 我怎样才能获得有效的子托收文件列表?

    • 我尝试在云函数中使用Firestore,但遇到了错误 数据库。集合(…)。文档(…)。集合(…)。文档(…)。add不是promise的功能 我先读了这些主题,然后又读了其他主题。但我没有帮我。包裹。json外观 云功能之一 此代码来自函数 我怎样才能修复它?

    • 我想创建一个函数,将在身份验证触发器上添加数据到FIREST。 但它给出了错误 错误:无法在函数处将类型([object Undefined])编码为Firestore值。函数处的encodeValue(/user\u code/node\u modules/firebase admin/node\u modules/@google cloud/firestore/src/document.js: