如何构建发票应用
发票应用保存客户列表,让你创建带有明细项目和税费的发票,为每张发票分配唯一编号,生成 PDF 或供客户打开的链接,并跟踪其是否已付款。第一版是一个直接的数据库应用,用 AI 在一两个下午就能做出来。真正重要的细节——编号、税费、锁定的发票、付款状态——才是把玩具和能够发给客户的工具区分开来的地方。
先确定你需要哪种发票工具
“发票应用”可以指几种不同的东西。开始之前先选定一种:
| 类型 | 使用者 | 区别在哪里 |
|---|---|---|
| 个人开票工具 | 自由职业者 | 一个业务主体、快速生成 PDF、一份简单的付款人名单 |
| 企业开票工具 | 小型团队 | 多个用户、共享的客户列表、报表 |
| 嵌入更大应用中的开票功能 | 你的客户或员工 | 从你已经记录的工作、预约或工时中直接生成发票 |
| 面向他人的开票产品 | 许多企业 | 每个账户只能看到自己的数据——这就是一个 SaaS |
第三种类型最能体现自建的价值:如果你本来就记录了工作或工时,那么直接从这些数据生成发票,可以省去重复录入。第四种则是完整的 SaaS MVP,还需要处理账户和计费等问题。
数据模型
四张数据表可以覆盖大多数需求:
- 企业设置——你的名称、地址、税号或增值税号、logo、银行信息、默认付款条件、默认税率、货币,以及下一个发票编号。
- 客户——姓名、公司、邮箱、账单地址、必要时的税号,以及默认付款条件。
- 发票——编号、客户、开票日期、到期日、状态、货币、备注,以及合计(小计、税额、总额)。
- 明细项目——所属发票、描述、数量、单价、税率和行合计。
如果客户分期付款或使用多种方式付款,可以再添加一张付款表:所属发票、日期、金额、付款方式、参考号。
关键规则
除非你明确提出要求,否则 AI 构建器通常不会自动做对以下这些部分:
- 连续且唯一的编号。 许多税务系统要求发票编号唯一且连续。应在发票正式开具时由服务器生成编号,而不是在创建草稿时生成,这样废弃的草稿就不会留下空缺。
- 锁定已发送的发票。 发票发出之后如果被悄悄修改,就会出问题。只允许编辑草稿;对于已发送的发票,应作废后重开,或开具贷项通知单。
- 快照客户信息。 如果客户明年更换了地址,去年的发票仍应显示旧地址。开具发票时,应将客户信息复制到发票上。
- 以最小货币单位的整数存储金额。 以分(或便士)为单位存储,而不是小数,这样合计金额就不会因舍入而出现偏差。税额的舍入方式应符合税务机关的要求,即按行舍入或按发票舍入。
- 状态应与实际情况一致。 草稿、已发送、已付款、部分付款、逾期、已作废。“逾期”应根据到期日自动计算,而不是手动设置。
PDF 还是发票页面?
客户通常希望收到 PDF,但网页更容易保持同步。大多数发票工具两者都提供:
- 可分享的发票页面,使用难以猜测的链接,客户无需登录即可查看和付款。
- PDF 下载,基于同一份数据生成,带有你的 logo 和信息。
请确认版式适合打印,并检查 PDF 在纸张尺寸(A4 或美国信纸)上的效果。较长的明细列表应能干净地跨页分割。
在线收款
对很多企业来说,在发票上显示银行信息就已足够。如果你希望接受银行卡付款,可以连接支付服务商:
- Stripe Checkout 或付款链接,金额为发票金额。客户在发票页面点击“立即付款”。
- Webhook:服务商在付款成功时通知你的应用,应用随即将发票标记为已付款。不要仅仅因为客户返回了成功页面就标记为已付款——这个页面可能在未付款的情况下也能访问。参见如何为应用添加付款功能。
- 先使用测试模式。 在整个流程跑通之前,使用服务商的测试密钥和测试卡。
值得了解的是:截至 2026 年 9 月,Stripe 也提供自己的发票产品,带有托管的发票页面。如果你只需要发送发票并收到付款,这可能就已经足够。
付款提醒
自动发送的“您的发票即将到期”邮件是最受重视的功能之一,也是最容易出错的功能之一。你需要:
- 一个邮件服务商(Resend、Postmark、SendGrid 等)——参见如何从应用发送邮件。
- 一个能定时运行、用于查找逾期发票的机制。已发布的网页应用在闲置时会休眠,不会自己醒来,因此要询问构建者如何触发检查——例如由外部定时任务服务定期调用应用中的一个端点。
- 一份已发送提醒的记录,确保没有人收到重复的邮件。
先从手动的“发送提醒”按钮开始,之后再实现自动化。
一条有效的首条提示词
为我的网页设计业务构建一个发票应用。我登录后管理客户(姓名、公司、邮箱、账单地址、增值税号)。我创建带有明细项目(描述、数量、单价)的发票,每行可设置增值税税率,并实时看到小计、增值税和总额。发票编号连续(INV-0001、INV-0002),在我将发票标记为已发送时分配;草稿可以继续编辑,已发送的发票则锁定。每张发票都有状态(草稿、已发送、已付款、逾期)和到期日;“逾期”根据到期日自动计算。每张发票都有一个私密的可分享链接,以及一份带有我的 logo 和银行信息的 PDF 下载。仪表盘显示未收款总额和逾期总额。金额以便士存储。只使用英镑。所有数据保存在数据库中。
构建步骤
- 先设置企业信息和客户。 每张发票都依赖这些信息,因此要先让它们正常工作。
- 发票编辑器。 明细项目、税费和合计。用棘手的数字进行测试——例如 3 × £33.33,税率 20%——并用计算器核对合计。
- 编号与锁定。 开具三张发票,删除一张草稿,再开具一张。编号应保持连续,没有空缺或重复。
- 发票页面和 PDF。 在隐私窗口中打开分享链接,打印 PDF。
- 付款。 在测试模式下添加 Stripe,用测试卡支付一张发票,确认 webhook 将其标记为已付款。
- 安全检查。 退出登录,尝试通过修改 URL 中的 ID 打开另一位客户的发票。只有私密链接应当有效,而且不应泄露其他发票。我们的安全检查清单列出了更多需要测试的项目。
- 导出。 添加发票和付款的 CSV 导出,供会计使用。
常见错误
- 使用浮点数处理金额。 0.1 + 0.2 不等于 0.3,这在真实应用中确实会出现。请以最小单位的整数存储。
- 可编辑已发送的发票。 客户收到发票之后再修改,会引发纠纷和会计问题。
- 在草稿阶段分配编号。 会造成空缺和混乱。
- 可以猜到的发票链接。
/invoice/42会诱使别人尝试/invoice/43。应使用足够长的随机令牌。 - 假设只有一种税务规则。 税率、反向征税和必需的表述因国家和客户类型而异。请咨询会计师,不要让 AI 去猜。
- 没有备份。 发票是你可能需要保存多年的记录。应定期导出;在允许的套餐中,还应将代码保存在 GitHub 上。
成本与工具
| 组成部分 | 用途 | 说明 |
|---|---|---|
| 应用构建器 / 托管 / 数据库 | 构建并运行应用 | 在 Mythex 上,一个积分余额即可覆盖以上所有项目——参见价格 |
| 支付服务商 | 银行卡付款 | 按每笔交易收取手续费;请查看该服务商在你所在国家的最新价格 |
| 邮件服务商 | 发送发票和提醒 | 很多服务商在低用量时提供免费套餐 |
| 域名 | 专业的发票链接 | 可选,按年计费 |
什么时候现成的发票软件更好
当开票是你自己工作流程的一部分、你希望工具完全贴合你的开票方式,或者你要在已有的应用中增加发票功能时,就值得自己构建。以下情况则应选择成熟的会计或发票软件:
- 你需要在同一个地方完成记账、银行流水同步、费用追踪和报税。
- 你所在国家要求以特定格式或通过认证渠道开具电子发票。
- 你更希望会计师使用他们已经熟悉的工具。
一个常见的折中方案是:自建与你的业务紧密相关的部分(项目、工时表、让客户查看发票的客户门户),然后把数字导出到你的会计软件中。小企业应该自建还是购买软件一文详细讨论了这个决定。
用 Mythex 构建
在 Mythex 上,你在聊天中描述这个发票应用,然后在实时预览中看着它逐步成形。当应用需要时,它会添加数据库,把 Stripe 密钥等 API 密钥保存在项目机密中,并将应用发布到一个可以立即使用的网址。文档中的 Stripe 教程展示了自带密钥的配置方式。如果你希望从一条已经描述了基本功能的提示词开始,可以试试发票生成器或自由职业者发票模板。
常见问题
发票应用需要哪些功能?
客户列表、带明细项目、税费和合计金额的发票、唯一且连续的发票编号、PDF 或可分享的发票页面,以及每张发票的状态(草稿、已发送、已付款、逾期)。在线支付和付款提醒是最有用的后续功能。
我的发票应用能接受银行卡付款吗?
可以,通过 Stripe 等支付服务商即可。应用会为发票金额创建一个付款链接或结账页面,付款成功后,服务商发来的 webhook 会将发票标记为已付款。
使用我自己的发票应用合法吗?
一般来说是合法的,但发票的法律内容要求因国家而异——例如卖方信息、税号、日期和税额明细——而且有些国家要求以特定格式开具电子发票。在依赖它之前,请先向会计师确认哪些规定适用于你。
我应该自己构建发票应用,还是使用会计软件?
如果你需要记账、报税或银行对账,就用会计软件。如果开票与你自己的工作流程紧密相关——例如项目、工时表——或者你想要一个没有按席位收费的简单工具,那就自己构建。