Я создаю приложениеact-redux с firetore в качестве базы данных.
Теперь я хотел использовать облачные функции Firebase для обработки чередующихся платежей.
Вот настройка:
Ниже приведен метод действия для проверки после получения токена и суммы со стороны реакции.
export const checkoutFunc = (token, amount) => {
return (dispatch, getState, { getFirebase, getFirestore }) => {
const uid = getState().firebase.auth.uid;
const ref = database.ref();
ref.child(`payments/${uid}`).push({
token: token,
amount: amount
});
};
};
Эта функция создает платеж и сохраняет токен и сумму.
Теперь вот облачная функция, которая должна «взимать» плату после создания вышеуказанного платежа.
exports.stripeCharge = functions.database
.ref("/payments/{userId}/{paymentId}")
.onWrite((change, context) => {
const payment = change.after.val();
const userId = context.params.userId;
const paymentId = context.params.paymentId;
if (!payment || payment.charge) return;
return admin
.database()
.ref(`/teachers/${userId}`)
.once("value")
.then(snap => {
return snap.val();
})
.then(customer => {
const amount = payment.amount;
const idempotency_key = paymentId;
const source = payment.token.id;
const currency = "usd";
const charge = { amount, currency, source };
return stripe.charges.create(charge, { idempotency_key });
})
.then(charge => {
admin
.database()
.ref(`/payments/${userId}/${paymentId}/charge`)
.set(charge)
.then(charge => {
return true;
});
});
});
Создание платежа работает, а токен и сумма сохраняются в таблице платежей. Но облачная функция не выполняет функцию зарядки токена.
Ожидаемый результат:
https://i.ibb.co/Fq9Zfhq/image.png
Фактический результат:
https://i.ibb.co/Krk7cGL/image.png