ユーザーが製品を購入してストライプで支払う際の自動化されたワークフローの統合に少し苦労しています。私はFirestoreとクラウド機能を使用しています。ストライプCheckout.js経由Firestoreを使用してクラウド機能のドキュメントを取得/追加する
ワークフロー
- ユーザーの購入製品は
お支払いは '支払い' コレクション
{ product:<uid of the product> '...', user:<uid of the user> '..', method: 'stripe', token:< Stripe token> {..} }
トリガクラウド機能(代金回収のためonWrite)に保存されています
- TODO:製品の入手DocRef 「製品」(製品の価格を取得)から
TODO:コレクションのドキュメント内に「購入」コレクションにドキュメントを追加します。「ユーザー」
私が実装しました
料金支払いこのワークフローは、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
素晴らしい、ありがとう! だから、 'firestore'を' admin.firestore() 'に置き換え、' get() 'メソッドを追加するだけです –