【发布时间】:2018-10-25 21:45:12
【问题描述】:
我已使用本教程 https://angularfirebase.com/lessons/angular-stripe-payments-part-2-firebase-cloud-functions-backend/ 将我的 Stripe 结帐连接到 Firebase 实时数据库
成功了。但是,我需要使用 Firestore 进行结帐流程,因为我们已将数据库迁移到那里。不幸的是,它不起作用!该功能有效,但数据仍保存在实时数据库中,而不是 Firestore。这是我的代码:
const functions = require('firebase-functions');
const admin = require('firebase-admin')
admin.initializeApp(functions.config().firebase);
const firebaseConfig = JSON.parse(process.env.FIREBASE_CONFIG);
const db = admin.firestore(); // Firebase
const stripe = require('stripe')(functions.config().stripe.testkey) // Stripe
exports.stripeCharge = functions.firestore
.document('/payments/{userId}')
.onWrite(event => {
const payment = event.data.val();
const userId = event.params.userId;
const paymentId = event.params.paymentId;
// checks if payment exists or if it has already been charged
if (!payment || payment.charge) return;
return admin.firestore()
.collection('payments')
.doc('{userId}')
.once('value')
.then(snapshot => {
return snapshot.val();
})
.then(customer => {
const amount = payment.amount;
const idempotency_key = paymentId; // prevent duplicate charges
const source = payment.testkey.id;
const currency = 'php';
const charge = {amount, currency, source};
return stripe.charges.create(charge, { idempotency_key });
})
.then(charge => {
db
.collection('payments')
.doc('{userId}')
.collection('{paymentId}')
.field('charge')
.set(charge)
})
});
从教程的第 1 部分开始,数据库结构是这样的:
payments
$userId
$paymentId
amount: number
token: object
charge: object
【问题讨论】:
标签: firebase firebase-realtime-database stripe-payments google-cloud-firestore