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

同一网站配置两个Stripe Webhooks的实现方案咨询

同一网站实现两类服务的Stripe Webhook区分方案

不需要创建多个Stripe账户,单个账户就能实现你的需求,具体方案如下:

核心实现思路

通过事件类型+产品/元数据标记的组合,在单个Stripe账户内区分两类服务的事件,再分流到对应的Webhook处理逻辑。

1. 基于产品ID的事件分流

  • 先在Stripe后台为VIP会员订阅、网站代币分别创建独立的Product和Price资源,记录好它们的ID(比如prod_VIPxxxx和prod_Tokenxxxx)。
  • 在Stripe Webhook配置中,订阅所有相关事件:VIP订阅对应customer.subscription.created/customer.subscription.updated,代币购买对应checkout.session.completed/charge.succeeded。
  • 接收Webhook事件时,从事件对象中提取关联的产品ID:
    • 订阅事件:从event.data.object.items.data[0].price.product获取绑定的产品ID
    • 结账会话事件:从event.data.object.line_items.data[0].price.product获取产品ID
  • 根据产品ID判断服务类型,将请求转发到Webhook 1(VIP)或Webhook 2(代币)的处理逻辑。

2. 自定义元数据标记分流

  • 创建订阅或结账会话时,给对象添加自定义元数据,示例代码:
    // 创建VIP订阅时添加元数据
    const subscription = await stripe.subscriptions.create({
      customer: 'cus_xxxx',
      items: [{price: 'price_VIPxxxx'}],
      metadata: { service_type: 'vip_subscription' }
    });
    
    // 创建代币购买结账会话时添加元数据
    const session = await stripe.checkout.sessions.create({
      payment_method_types: ['card'],
      line_items: [{price: 'price_Tokenxxxx', quantity: 1}],
      mode: 'payment',
      success_url: 'https://your-site.com/success',
      cancel_url: 'https://your-site.com/cancel',
      metadata: { service_type: 'token_purchase' }
    });
    
  • 接收Webhook事件时,直接读取event.data.object.metadata.service_type字段,根据值触发对应的Webhook处理流程。

3. 多Webhook端点配置(可选)

如果需要完全独立的两个Webhook端点,可在Stripe后台针对不同事件+产品配置过滤规则:

  • 为Webhook 1配置:触发事件为customer.subscription.created/customer.subscription.updated,添加产品ID过滤条件(仅关联VIP产品ID时触发)。
  • 为Webhook 2配置:触发事件为checkout.session.completed/charge.succeeded,添加产品ID过滤条件(仅关联代币产品ID时触发)。

注意事项

  • 所有Webhook端点必须验证Stripe的签名,防止伪造请求,可使用官方SDK的stripe.webhooks.constructEvent方法完成验证。
  • 推荐使用Stripe CLI模拟不同类型的事件,测试分流逻辑是否正常工作。

内容的提问来源于stack exchange,提问作者Maxitrol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:53:16