返回首页
24小时热榜
嘿,HN,
stripe-no-webhooks 是一个开源库,可以将您的 Stripe 支付数据同步到您自己的 Postgres 数据库:
<https://github.com/pretzelai/stripe-no-webhooks>
这里有一个演示视频:<https://youtu.be/cyEgW7wElcs>
它在您的 Stripe 账户中创建一个 webhook 端点,将 webhook 转发到您的后端,在那里一个 webhook 监听器将所有数据存储到一个新的 <i>stripe.*</i> 模式中。您可以在 TypeScript 中定义您的计划,运行同步命令,库会处理创建 Stripe 产品和价格、处理 webhook 并保持您的数据库同步。我们还允许您为现有账户回填 Stripe 数据。
它支持预付费使用积分、账户钱包和基于使用量的计费。它还允许您生成一个可以自定义的定价表组件。您可以使用库提供的简单 API 访问用户信息:
```javascript
billing.subscriptions.get({ userId });
billing.credits.consume({ userId, key: "api_calls", amount: 1 });
billing.usage.record({ userId, key: "ai_model_tokens_input", amount: 4726 });
```
实际上,如果您不想,您不必再处理 Stripe 仪表板或 Stripe API/SDK。这个库为 Stripe 提供了一个良好的抽象,应该覆盖大多数订阅支付用例。
让我们通过一个快速示例来看看它是如何工作的。假设您有一个像 Cursor(IDE)曾经使用的计费计划:每月 20 美元,您可以获得 500 次 API 完成 + 2000 次标签完成,您可以购买额外的 API 积分,任何额外的使用量将按超额计费。
您在 TypeScript 中定义您的计划:
```javascript
{
name: "Pro",
description: "Cursor Pro plan",
price: [{ amount: 2000, currency: "usd", interval: "month" }],
features: {
api_completion: {
pricePerCredit: 1, // 每单位 1 美分
trackUsage: true, // 启用使用计费
credits: { allocation: 500 },
displayName: "API Completions",
},
tab_completion: {
credits: { allocation: 2000 },
displayName: "Tab Completions",
},
},
}
```
然后在命令行中,您运行 `init` 命令,这将创建数据库表和一些 API 处理程序。运行 `sync` 将计划同步到您的 Stripe 账户并创建一个 webhook 端点。当订阅创建时,库会自动将 500 次 API 完成积分和 2000 次标签完成积分授予用户。续订和升级/降级的处理也很合理。
消费代码看起来像这样:
```javascript
await billing.credits.consume({
userId: user.id,
key: "api_completion",
amount: 1,
});
```
如果他们想允许用户手动充值:
```javascript
await billing.credits.topUp({
userId: user.id,
key: "api_completion",
amount: 500, // 购买 500 积分,收费 5.00 美元
});
```
同样,我们还有钱包和使用情况的 API。
在 Stripe 上自己实现这些功能将会是非常繁琐的工作。您需要在自己的数据库中跟踪所有这些权限,并处理续订、到期、临时授予等。这绝对是可行的,尤其是在 AI 编码的帮助下,但您可能最终会构建出一些脆弱且难以维护的东西。
这只是库功能的高层概述。它还支持座位级积分、货币钱包(具有微分精度)、自动充值、强大的故障恢复、税收收集、发票和开箱即用的定价表。
我为测试编写了一个小玩具应用:<https://snw-test.vercel.app>
没有验证,所以请随意使用虚拟邮箱注册,然后使用测试卡订阅计划:4242 4242 4242 4242,任何未来的到期日期,任何三位数的 CVV。
截图:<https://imgur.com/a/demo-screenshot-Rh6Ucqx>
欢迎尝试!如果您最终使用这个库,请在仓库中报告任何错误。如果您遇到问题或想聊天,我很乐意提供帮助 - 我的联系方式在我的 HN 个人资料中。