Stripe firebase 扩展,收听收款组中的发票收款 1.调整扩展代码以创建您自己的云函数2.创建一个从子集合复制/粘贴发票的云函数

问题描述

关于 firebase 的条纹​​扩展:https://firebase.google.com/products/extensions/firestore-stripe-invoices 我还没有在文档中找到任何相关内容,源代码也没有向我透露太多信息(至少我的理解是这样)。

在扩展的配置中,它要求一个集合来监听发票。是否可以使用集合组代替?因此,与其在 beforeAll() 收听发票,不如让它在 invoices

收听

解决方法

来自extension code

let invoicesInFirestore = await admin
  .firestore()
  .collection(config.invoicesCollectionPath)
  .where('stripeInvoiceId','==',invoice.id)
  .get();

在撰写本文时,似乎无法处理多个子集合。

我可以看到两种解决方案:

1.调整扩展代码以创建您自己的云函数

您复制扩展代码并对其进行修改,以便处理多个子集合,以创建您自己的云函数。

请注意,扩展代码使用 export const sendInvoice = functions.handler.firestore.document.onCreate(...) 声明了 Cloud Function。如 doc 中所述,“HandlerBuilder 类有助于开发人员构建 Firebase 扩展”编写函数...编写普通函数时不要使用 HandlerBuilder通过 Firebase CLI 进行部署。”

所以你应该按如下方式调整它:

export const sendInvoice = functions.firestore
    .document('users/{uid}/invoices')
    .onCreate((snap,context) => {...}

但是,请注意,通过编写自己的 Cloud Functions 函数,您将失去对扩展的潜在未来改进。

2.创建一个从子集合复制/粘贴发票的云函数

这个想法是让一个云函数监听所有 users/{uid}/invoices 子集合(见上文),复制新文档并在“中央”扩展集合中创建一个副本。没有什么可以阻止您在复制的文档中添加一些额外的字段,例如用户的 uid。

请注意,如果您想从 Stripe 获得反馈,您可能需要另一个 Cloud Function(它监听“中央”扩展集合)将 Stripe webhook 调用的结果复制/粘贴到原始文档中users/{uid}/invoices 子集合。

我个人会选择第二种方法。