返回首页

一周热榜

26作者: blenderob大约 16 小时前
受到这个 Ask HN 的启发:https://news.ycombinator.com/item?id=46834977 但我将追溯更久远的历史,看看这里是否还有人使用计算尺?
24作者: ingve7 天前
21作者: prasoonds5 天前
大家好,HN, stripe-no-webhooks 是一个开源库,可以将您的 Stripe 支付数据同步到您自己的 Postgres 数据库: &lt;<a href="https:&#x2F;&#x2F;github.com&#x2F;pretzelai&#x2F;stripe-no-webhooks" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;pretzelai&#x2F;stripe-no-webhooks</a>&gt; 这里有一个演示视频:&lt;<a href="https:&#x2F;&#x2F;youtu.be&#x2F;cyEgW7wElcs" rel="nofollow">https:&#x2F;&#x2F;youtu.be&#x2F;cyEgW7wElcs</a>&gt; 它会在您的 Stripe 账户中创建一个 webhook 端点,将 webhook 转发到您的后端,在那里一个 webhook 监听器将所有数据存储到一个新的 <i>stripe.*</i> 模式中。您在 TypeScript 中定义您的套餐,运行一个同步命令,该库会负责创建 Stripe 产品和价格、处理 webhook,并保持您的数据库同步。我们还允许您为现有账户回填您的 Stripe 数据。 它支持预付费使用额度、账户钱包和基于用量的计费。它还允许您生成一个可以自定义的定价表组件。您可以使用该库提供的简单 API 访问用户信息: ``` billing.subscriptions.get({ userId }); billing.credits.consume({ userId, key: &quot;api_calls&quot;, amount: 1 }); billing.usage.record({ userId, key: &quot;ai_model_tokens_input&quot;, amount: 4726 }); ``` 实际上,如果您不想,您不必再处理 Stripe 仪表板或 Stripe API/SDK。该库为您提供了 Stripe 之上的一个很好的抽象,应该涵盖 ~ 大多数订阅支付用例。 让我们通过一个快速的例子来看看它是如何工作的。假设您有一个像 Cursor(IDE)过去那样的计费套餐:每月 20 美元,您获得 500 次 API 完成 + 2000 次标签完成,您可以购买额外的 API 额度,任何额外的使用量都将作为超额费用计费。 您在 TypeScript 中定义您的套餐: ``` { name: &quot;Pro&quot;, description: &quot;Cursor Pro plan&quot;, price: [{ amount: 2000, currency: &quot;usd&quot;, interval: &quot;month&quot; }], features: { api_completion: { pricePerCredit: 1, // 每单位 1 美分 trackUsage: true, // 启用用量计费 credits: { allocation: 500 }, displayName: &quot;API Completions&quot;, }, tab_completion: { credits: { allocation: 2000 }, displayName: &quot;Tab Completions&quot;, }, }, } ``` 然后在 CLI 上,您运行 `init` 命令,该命令会创建数据库表 + 一些 API 处理程序。运行 `sync` 将套餐同步到您的 Stripe 账户并创建一个 webhook 端点。当创建订阅时,该库会自动向用户授予 500 个 API 完成额度和 2000 个标签完成额度。续订和升级/降级都得到妥善处理。 消耗代码如下所示: ``` await billing.credits.consume({ userId: user.id, key: &quot;api_completion&quot;, amount: 1, }); ``` 如果他们想允许用户手动充值: ``` await billing.credits.topUp({ userId: user.id, key: &quot;api_completion&quot;, amount: 500, // 购买 500 额度,收费 5.00 美元 }); ``` 类似地,我们有用于钱包和用量的 API。 如果您自己基于 Stripe 实现这些,这将需要大量工作。您需要在您自己的数据库中跟踪所有这些权利,并处理续订、过期、临时授权等。这绝对是可行的,尤其是在 AI 编码的帮助下,但您最终可能会构建一些脆弱且难以维护的东西。 这只是该库功能的概览。它还支持席位级额度、货币钱包(精确到微美分)、自动充值、强大的故障恢复、税务收集、发票以及开箱即用的定价表。 我为测试编写了一个小型的玩具应用程序:&lt;<a href="https:&#x2F;&#x2F;snw-test.vercel.app" rel="nofollow">https:&#x2F;&#x2F;snw-test.vercel.app</a>&gt; 没有验证,所以请随意使用虚拟电子邮件注册,然后使用测试卡订阅套餐:4242 4242 4242 4242,任何未来的过期日期,任何 3 位数的 CVV。 截图:&lt;<a href="https:&#x2F;&#x2F;imgur.com&#x2F;a&#x2F;demo-screenshot-Rh6Ucqx" rel="nofollow">https:&#x2F;&#x2F;imgur.com&#x2F;a&#x2F;demo-screenshot-Rh6Ucqx</a>&gt; 请随意试用!如果您最终使用此库,请在存储库上报告任何错误。如果您遇到问题 / 想聊天,我很乐意提供帮助 - 我的联系方式在我的 HN 个人资料中。