You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 15:27:35