我是 JavaScript 新手,我在各种资源的帮助下编写了以下 JS Google Cloud 函数。
此函数处理 Stripe invoice. payment_succeeded
事件,而不是写入整个 数据
我试图仅保存发送的 period_start
和 period_end
值返回到我的 Firebase 数据库中的正确位置(请参阅下面的结构)。
如何在同一个函数调用中写入这两个值?
exports.reocurringPaymentWebhook = functions.https.onRequest((req, res) => {
const hook = req.body.type;
const data = req.body.data.object;
const status = req.body.data.object.status;
const customer = req.body.data.object.customer;
const period_start = req.body.data.object.period_start;
const period_end = req.body.data.object.period_end;
console.log('customer', customer);
console.log('hook:', hook);
console.log('status', status);
console.log('data:', data);
console.log('period_start:', period_start);
console.log('period_end:', period_end);
return admin.database().ref(`/stripe_ids/${customer}`).once('value').then(snapshot => snapshot.val()).then((userId) => {
const ref = admin.database().ref(`/stripe_customers/${userId}/subscription/response`)
return ref.set(data);
})
.then(() => res.status(200).send(`(200 OK) - successfully handled ${hook}`))
.catch((error) => {
// We want to capture errors and render them in a user-friendly way, while
// still logging an exception with StackDriver
return snap.ref.child('error').set(userFacingMessage(error));
})
.then((error) => {
return reportError(error, {user: context.params.userId});
});
});//End
最佳答案
HTTP 类型函数在发送响应后立即终止。在您的代码中,您将发送响应,然后尝试在此之后执行更多工作。您必须在发送响应之前完成所有工作,否则响应可能会被中断。
关于JavaScript谷歌云函数: write Stripe values to Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56845415/