0

ユーザーが製品を購入してストライプで支払う際の自動化されたワークフローの統合に少し苦労しています。私はFirestoreとクラウド機能を使用しています。ストライプCheckout.js経由Firestoreを使用してクラウド機能のドキュメントを取得/追加する

ワークフロー

  1. ユーザーの購入製品は
  2. お支払いは '支払い' コレクション

    { product:<uid of the product> '...', user:<uid of the user> '..', method: 'stripe', token:< Stripe token> {..} } 
    
  3. トリガクラウド機能(代金回収のためonWrite)に保存されています

  4. TODO:製品の入手DocRef 「製品」(製品の価格を取得)から
  5. TODO:コレクションのドキュメント内に「購入」コレクションにドキュメントを追加します。「ユーザー」

  6. 私が実装しました

料金支払いこのワークフローは、Cloudデータベース内のFirestoreからDocRefを取得して追加する方法がわからないため、手順4と5を除きます(Firebase Docsが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

答えて

1

へのアクセスで動作するようになっているかについては考えていますAdmin SDKのFirestoreは、Admin SDKの他のFirebase製品にアクセスするのと非常に似ています。 admin.firestore()...https://firebase.google.com/docs/reference/admin/node/admin.firestoreを参照してください。

ドキュメントにアクセスしようとしているときは、get()コールが欠落している:あなたが前に、JavaScriptからFirestoreを使用していない場合は

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

を、クラウド機能を使い始めるための最も簡単な方法ではありませんそれ。私はdocs for JavaScript/web usersを読んで、​​とすることをお勧めします。

+0

素晴らしい、ありがとう! だから、 'firestore'を' admin.firestore() 'に置き換え、' get() 'メソッドを追加するだけです –

関連する問題