21 分•作者: prasoonds•5 天前
大家好,HN,
stripe-no-webhooks 是一个开源库,可以将您的 Stripe 支付数据同步到您自己的 Postgres 数据库:
<<a href="https://github.com/pretzelai/stripe-no-webhooks" rel="nofollow">https://github.com/pretzelai/stripe-no-webhooks</a>>
这里有一个演示视频:<<a href="https://youtu.be/cyEgW7wElcs" rel="nofollow">https://youtu.be/cyEgW7wElcs</a>>
它会在您的 Stripe 账户中创建一个 webhook 端点,将 webhook 转发到您的后端,在那里一个 webhook 监听器将所有数据存储到一个新的 <i>stripe.*</i> 模式中。您在 TypeScript 中定义您的套餐,运行一个同步命令,该库会负责创建 Stripe 产品和价格、处理 webhook,并保持您的数据库同步。我们还允许您为现有账户回填您的 Stripe 数据。
它支持预付费使用额度、账户钱包和基于用量的计费。它还允许您生成一个可以自定义的定价表组件。您可以使用该库提供的简单 API 访问用户信息:
```
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 中定义您的套餐:
```
{
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",
},
},
}
```
然后在 CLI 上,您运行 `init` 命令,该命令会创建数据库表 + 一些 API 处理程序。运行 `sync` 将套餐同步到您的 Stripe 账户并创建一个 webhook 端点。当创建订阅时,该库会自动向用户授予 500 个 API 完成额度和 2000 个标签完成额度。续订和升级/降级都得到妥善处理。
消耗代码如下所示:
```
await billing.credits.consume({
userId: user.id,
key: "api_completion",
amount: 1,
});
```
如果他们想允许用户手动充值:
```
await billing.credits.topUp({
userId: user.id,
key: "api_completion",
amount: 500, // 购买 500 额度,收费 5.00 美元
});
```
类似地,我们有用于钱包和用量的 API。
如果您自己基于 Stripe 实现这些,这将需要大量工作。您需要在您自己的数据库中跟踪所有这些权利,并处理续订、过期、临时授权等。这绝对是可行的,尤其是在 AI 编码的帮助下,但您最终可能会构建一些脆弱且难以维护的东西。
这只是该库功能的概览。它还支持席位级额度、货币钱包(精确到微美分)、自动充值、强大的故障恢复、税务收集、发票以及开箱即用的定价表。
我为测试编写了一个小型的玩具应用程序:<<a href="https://snw-test.vercel.app" rel="nofollow">https://snw-test.vercel.app</a>>
没有验证,所以请随意使用虚拟电子邮件注册,然后使用测试卡订阅套餐:4242 4242 4242 4242,任何未来的过期日期,任何 3 位数的 CVV。
截图:<<a href="https://imgur.com/a/demo-screenshot-Rh6Ucqx" rel="nofollow">https://imgur.com/a/demo-screenshot-Rh6Ucqx</a>>
请随意试用!如果您最终使用此库,请在存储库上报告任何错误。如果您遇到问题 / 想聊天,我很乐意提供帮助 - 我的联系方式在我的 HN 个人资料中。