如何通过Stripe Webhook触发Firebase云函数更新用户订阅角色?
方案选择与实现代码
最佳方案
利用Firebase云函数的Firestore触发器,监听Stripe扩展自动生成的订阅文档变化。当用户成功订阅后,Stripe扩展会在stripe_customers/{customerId}/subscriptions/{subscriptionId}路径下创建订阅记录,我们通过监听该文档的创建事件,提取关联的用户UID,进而修改user/{uid}文档中的role字段。
云函数代码示例
const functions = require("firebase-functions"); const admin = require("firebase-admin"); admin.initializeApp(); // 监听Stripe订阅文档创建事件,触发用户角色更新 exports.updateUserRoleOnSubscription = functions.firestore .document("stripe_customers/{customerId}/subscriptions/{subscriptionId}") .onCreate(async (snap, context) => { try { const subscriptionData = snap.data(); const userId = subscriptionData.userId; if (!userId) { functions.logger.error("未找到关联的用户UID"); return null; } // 更新user集合对应文档的role字段 await admin.firestore() .collection("user") .doc(userId) .update({ role: "premium" // 替换为你需要的角色值,比如不同套餐对应不同角色 }); functions.logger.info(`用户 ${userId} 的角色已更新`); return null; } catch (error) { functions.logger.error("更新用户角色失败:", error); throw new functions.https.HttpsError("internal", "更新角色时发生错误", error); } });
补充说明
- 若需处理订阅状态变更(如续订、重新激活),可将触发器改为
onUpdate,并在代码中判断subscriptionData.status是否为active后再执行更新。 - 确保云函数拥有Firestore的读写权限,可通过Firebase控制台的IAM配置或
firebase.json权限规则设置。 - 可根据不同订阅套餐,动态设置
role字段值(比如基础套餐设为basic,高级套餐设为vip)。
内容的提问来源于stack exchange,提问作者Likero Bayer
相关产品推荐
相关产品推荐

