NodeJS 管理和协调Stripe订阅项目

iyfjxgzm  于 2023-10-17  发布在  Node.js
关注(0)|答案(1)|浏览(120)

目标

提供基于订阅的服务,并有两个层次(标准和专业版)。用户可以订阅的东西(我们称之为albums),他们可以创建多个,但他们创建的每个都需要另一个订阅。

  • 度假相册,标准层
  • 专辑,Standard Tier
  • 毕业相册,Pro Tier

最后将使用(JSON结构以便于表示)

{
  "id": "sub_...",
  "items": {
    "data": [
      {
        "price": {
          "id": "price_...",
          "product": "prod_..."
        },
        "quantity": 2
      },
      {
        "price": {
          "id": "price_...",
          "product": "prod_..."
        },
        "quantity": 1
      }
    ]
  }
}

推理与此设置

  • 每个用户一次试用避免试用滥用(使用试用版,创建新相册,将内容转移到活动试用版,取消过期相册)
  • 同样,避免滥用优惠券代码
  • 为用户提供一个订阅和发票,更易于管理
  • 添加订阅不需要把钱包拿出来,结账过程更快,因为我们只是增加订阅项目的数量
    **问题:**我需要识别他们订阅的album,它在数据库中有一行,一个ID,希望能够引用和/或绑定到条带记录。

看起来最终会发生的事情是,如果用户订阅了3个东西到同一层,他们最终会得到1个订阅,1个订阅项目,数量3。
所以,如果他们取消一个...我只会减少包含他们选择的产品和价格的项目的数量。
这在实践中做了吗?当我通过代码管理这些项目的工作是..很坚韧因为没有ID来协调,它只是一个quantity值,这让我觉得有一个更好的方法来做到这一点。

eagi6jfj

eagi6jfj1#

这在实践中做了吗?
9/10次,它使用元数据键和值完成。
在您的情况下,这有点尴尬,因为项目是按数量捆绑的,所以您可能必须这样做:

items:[
   {
      'id':{{stripe_subscriptionItem_id}},
      'price':{{stripe_price_id}},
      'quantity':2,
      'metadata':{
         'item_1':{{your_id_1}},
         'item_2':{{your_id_2}}
   }
]

当然,使用单独的项目会更简单-每个项目都有自己的元数据-但有两个问题:

  • 您需要为每个元数据值提供不同的价格(Stripe允许您创建可变价格,但不支持元数据)。
  • 您可能最终会在订阅中拥有太多的项目(Stripe限制每个订阅有20个不同的项目)。

看起来最好的选择可能是按层捆绑项目,在这种情况下,您必须构建一个逻辑,以便在增加/减少数量时从这些项目中添加/删除元数据。

  • 编辑--
    我确实做了一些工作与变量单独的项目和元数据-这是我是如何做到的:
const subscription = await stripe.subscriptions.create({
    customer:{{customer}},
    items:[
        {price_data:{
            unit_amount:1000,
            currency:'usd',
            recurring:{interval:'month'},
            product:{{product_id}}
        },
        quantity:1
        },
        {price_data:{
            unit_amount:1500,
            currency:'usd',
            recurring:{interval:'month'},
            product:{{product_id}}
        },
        quantity:1
        }
    ]
});

const addMetadata = await stripe.subscriptions.update(
    subscription.id,{
    items:[
    {
        id:subscription.items.data[0].id,
        metadata:{'id':'X'}
    },
    {
        id:subscription.items.data[1].id,
        metadata:{'id':'Y'}
    }
    ]
});

这就是我之前提到的--你可以创建变量项,这将允许你为每个“相册”构建自定义项,然而添加元数据将是一件单独的事情。
不过,如果您计划在订阅中包含20个以上的项目,则可能没有帮助。

相关问题