我已将支付系统集成到我的 Firebase 应用程序中,并且他们的系统向我的后端发送 POST 请求。我按如下方式处理该请求:
app.post("/subscription", (req, res) => {
const {data, signature} = req.body;
const decodedJson = JSON.parse(Buffer.from(data, "base64"));
return admin
.firestore()
.collection("subscriptions")
.doc(decodedJson.order_id)
.set({
subscriptionDate: admin.firestore.FieldValue.serverTimestamp()})
.then(() => {
return res.status(200).send("Subscription created");
})
.catch((error) => {
throw new Error(error);
});
});
然后我有另一个函数,每当在“订阅”集合下创建新文档时就会触发该函数:
exports.checkPaymentStatus = functions.firestore
.document("subscriptions/{subscriptionId}")
.onCreate((snap, context) => {
return axios.post("https://paymentsystem.com/api/1/get-status", {
data: dataParam,
signature: signature,
})
.then((response) => {
if (response.data.status === "success") {
const batch = admin.firestore().batch();
batch.update(admin.firestore().collection("subscriptions")
.doc(snap.id), {subscriberId: context.auth.uid});
batch.update(admin.firestore().collection("users")
.doc(context.auth.uid), {
isPro: true,
subscribedDate: admin.firestore.FieldValue.serverTimestamp(),
});
}
})
.catch((error) => {
console.error("Error occurred:", error);
});
});
但是,它给出错误“发生错误:TypeError:无法读取未定义的属性(读取'uid')”。这是由于 context.auth.uid 变量造成的。我该如何解决这个问题?
我尝试更新用户文档的字段值。但是,我需要访问用户文档。
如果我很好地理解了您的情况,上下文是 Firestore 文档实例,而不是 Firebase 身份验证用户。因此,要访问文档的 id,您必须执行
context.id
而不是 context.auth.uid
。