我把微信/支付宝账单导入做成了隐私优先的记账小程序

7 阅读7分钟

摘要:微支记账 是一个基于微信小程序的个人记账工具,支持本地离线解析微信 / 支付宝账单、邮箱自动导入、趋势统计和非必要支出分析。本文会拆解它的产品思路和工程实现。

#微信小程序 #个人记账 #Cloudflare #Node.js #隐私优先 #前端工程化

小程序码

小程序码.jpg

很多人记账失败,不是因为不想记,而是因为两件事太劝退: 一是手动输入太麻烦,二是账单一旦上云,就总会担心隐私。

微支记账 就是冲着这两个问题来的:让记账足够快,让导入足够省心,同时尽量把敏感数据留在用户本地。

先看结论

这个项目不是一个“只有记一笔”的小工具,而是一套围绕个人账单管理设计的小程序系统,核心能力包括:

模块能力价值
手动记账支持支出 / 收入快速录入、编辑、删除满足日常补记和临时记账
本地导入支持 ZIP / CSV / XLSX / XLS 离线解析不上传敏感账单也能批量导入
邮箱导入支持转发官方账单邮件到专属地址减少导出、下载、传文件的成本
统计分析月度 / 年度趋势图、分类排行、峰值识别让账单不止“存起来”,还能“看懂”
非必要支出分析规则引擎识别冲动消费、订阅、深夜消费把复盘做成可视化结果

如果你想先快速判断这套方案值不值得看,可以直接记住这三点:

  • 账单导入尽量在本地完成,减少隐私暴露面。
  • 邮箱导入串起了边缘拦截、后端中转和客户端解析。
  • 统计和分析不是附属页,而是账单工具的核心体验。
  • 建议每月导入一次微信 / 支付宝官方账单,作为当月记账的基础底账。
  • 不在微信 / 支付宝里的账单,或者临时发生的现金消费,可以直接手记补齐。

它的整体架构

微支记账 用的是一套很典型、也很实用的混合架构:

用户转发账单邮件
  -> Cloudflare Email Routing
  -> Cloudflare Worker 过滤来源并提取 UID
  -> Node.js 服务解析原始邮件并暂存附件
  -> 小程序轮询状态并下载附件
  -> 端上本地解压 / 解析 / 导入
  -> 本地存储 + 统计分析

这套链路最重要的点,是“服务端只做中转,不做长期存储”。附件下载完成后会被及时清理,整个设计非常贴近“阅后即焚”的思路。

从前端结构看,这也是一个非常标准、清晰的原生小程序工程:

  • 首页负责收支概览、最近账单和洞察
  • 记一笔 页负责快速录入
  • 统计 页负责月度 / 年度趋势
  • 导入 页负责本地导入与邮箱导入分流
  • 账单列表 页负责搜索、分组和批量浏览
  • 非必要支出 页负责消费复盘

页面之间边界明确,功能拆分也比较克制,符合一个长期维护型工具的组织方式。

为什么这套导入方案值得说

1. 本地解析优先

本地导入不是简单地读个文件,而是尽量把解析能力前置到设备端:

  • 支持微信、支付宝等官方导出的压缩包和表格文件
  • 支持 ZIP 内自动识别 CSV / Excel
  • 支持 GBK 编码兜底
  • 支持解压密码输入
  • 支持异常格式提示和错误归一化

也就是说,用户把账单文件拿到手后,大多数场景都可以直接在小程序里完成,不需要再绕到网页或电脑端。

2. 邮箱导入把“自动化”做完整了

项目里给每个用户生成一个专属邮箱地址,用户只要把官方账单邮件转发过去,后面这条链路就会自动跑起来:

  • Cloudflare Worker 负责边缘过滤
  • 只放行微信 / 支付宝等官方来源
  • Node.js 后端使用 mailparser 解析原始邮件
  • 识别附件后暂存到临时目录
  • 小程序拉取后再本地解析
  • 下载完成后自动删除临时文件

这套设计的好处很明显:用户不用自己手动解压,也不用担心附件长期留在服务端。

数据层也做了不少工程化处理

账单数据不是直接堆在一个本地 key 里,而是做了分片存储,避免微信小程序本地存储容量上限带来的问题。

此外,getBills() 还做了几件很实用的事:

  • 自动迁移旧数据格式
  • 统一账单时间字段
  • 自动补全分类图标
  • 基于签名去重
  • 读写后自动回写规范化结果

这类处理看起来不“炫”,但对一个长期使用的记账工具来说非常关键。数据不乱,后面的统计和分析才可信。

统计页不是摆设

微支记账 的统计页不是接一个现成图表库就完事,而是直接用原生 Canvas 自绘趋势图。

它支持:

  • 月度 / 年度切换
  • 按日 / 按月趋势展示
  • 峰值高亮
  • 分类排行
  • 活跃天数、支出笔数、结余等摘要指标

这背后的价值是:账单不只是流水,而是可以被解释、被比较、被追踪的行为数据。

非必要支出分析很有意思

我个人觉得这个项目最有“产品味”的部分,就是“非必要支出”分析。

它不是做一个空洞的标签,而是用了一个轻量规则引擎:

  • 深夜消费识别
  • 敏感词命中
  • 商户关键词命中
  • 订阅 / 自动续费识别
  • 同类高频消费识别
  • 历史均值异常放大识别

最后在首页和单独页面里,把这部分支出聚合成一个可读的结果。它不只是提醒你“花多了”,而是在帮你看见“为什么花多了”。

体验层也没有偷懒

这个项目虽然是小程序,但交互细节做得很完整:

  • 自定义 tabbar
  • 统一的反馈层 toast / confirm / alert
  • 账单列表左右滑动编辑、删除
  • 账单详情弹窗
  • 月份分组折叠
  • 暗黑模式适配
  • 自动更新检查

这些细节决定了一个工具是“能用”,还是“愿意一直用”。

我觉得这个项目最值得拿出来讲的 3 点

  1. 隐私优先不是口号,是真把敏感账单留在本地处理。
  2. 自动导入不是噱头,而是把邮件路由、附件解析、临时存储和客户端解压串成了完整链路。
  3. 记账不是记流水,而是把统计、复盘和消费反思做成了产品能力。

写在最后

微支记账 这类项目的有趣之处在于,它不是单点功能的堆砌,而是围绕一个真实痛点,把“导入、存储、统计、分析、隐私”做成了闭环。

如果你也在做个人效率工具、数据分析类小程序,或者想尝试一套“边缘转发 + 本地处理”的轻量架构,这个项目会是一个很好的参考。

它不只是一个记账工具,更像是一个面向个人财务习惯的轻量复盘系统。

如果你也在做类似的个人效率工具,我建议优先把这三件事做好:

  • 先把用户最痛的那一步做顺,再去谈功能扩展。
  • 先把数据流转链路理清,再去堆界面和交互。
  • 先把隐私和容错做好,再去追求自动化和智能化。