使用Firestore在Cloud功能中获取/添加文档

问题描述:

当用户购买产品并通过分条付款时,我正在努力融合自动化工作流程。我正在使用Firestore和云端函数。使用Firestore在Cloud功能中获取/添加文档

工作流程

  1. 通过条纹Checkout.js
  2. 付款用户购买产品存储在 '支付' 收集

    { product:<uid of the product> '...', user:<uid of the user> '..', method: 'stripe', token:< Stripe token> {..} } 
    
  3. 触发器云功能(onWrite对于代收货款)

  4. TODO:Get product DocRef从“产品”(获取产品的价格)
  5. TODO:为“购买”集合添加文档集合的文档内的“用户”

  6. 报酬支付

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

个功能/ index.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}); 
     }); 
    }); 

联系SDK 我想,我必须使用Admin SDK来实现这一点,但我对这个应该如何与公司的FireStore

工作

访问不知道来自Admin SDK的Firestore与从Admin SDK访问任何其他Firebase产品非常相似:例如, admin.firestore()...https://firebase.google.com/docs/reference/admin/node/admin.firestore

你错过了,当你试图访问该文档的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云的功能是不是开始使用的最简单方法它。我建议您阅读docs for JavaScript/web users,并以​​。

+0

很好,谢谢! 所以我只需要用'admin.firestore()'替换'firestore'并添加'get()'方法 –