
我把一个「源码小铺」完整开源了:从付款到自动开通,飞鱼小铺的诞生记
有些项目,是从一个按钮开始的。
最初,我只是想做一个很小的入口:把源码、插件、部署陪跑和授权服务摆在一个清清爽爽的页面里,让需要的人自己看、自己买、自己拿到交付结果。
可当真正动手时,才发现这件事并不只是“放几个商品”那么简单。一个看似轻盈的小铺,背后要有登录、支付、订单、优惠券、代码仓库权限、工单、客服消息、移动端适配、公众号入口,还有各种意料之外的边角。
于是,飞鱼小铺慢慢长了出来。它不是一个演示页面,而是一套已经可以承担真实购买、真实开通、真实售后的小型数字商品系统。更重要的是:它完全开源。🌈

从一张商品卡片,到一个完整闭环
真正的商城,难处从来不在“好看”两个字。
商品卡片要让人一眼看到分类、标签、价格、购买人数、是否推荐、是否置顶;商品详情要告诉用户是否需要绑定仓库账号,能不能使用优惠券,支付后如何交付;订单要能追踪,支付要能回调,回调还要能面对重复通知;售后不能停在一句“联系客服”,而要有工单、有消息、有记录、有提醒。
飞鱼小铺把这些环节串在了一起:
| 用户看到的需求 | 小铺提供的能力 |
|---|---|
| 想买源码 | GitHub、Gitea、Gitee 账号登录与绑定 |
| 想付款后立刻拿到权限 | Git 仓库自动开通,支持单仓库与多仓库 |
| 想买成套产品 | 多仓库组合交付,适合 office 全格式这类套件 |
| 想先打赏再开通 | 任意金额打赏类商品,设置最低金额即可 |
| 想留住客户 | 推荐商品、首页置顶、自由排序 |
| 想做活动 | 折扣券、满减券、后台生成、下单试算 |
| 遇到支付或开通问题 | 工单、附件、邮件、公众号通知、站内客服 |
| 手机里打开页面 | H5 窄屏布局,卡片与按钮重新排布 |
这张表看起来轻巧,但每一行都曾经牵出一串问题:字段怎么存,权限怎么判定,重复购买怎么拦截,订单超过十五分钟未支付如何关闭,用户换绑账号时如何二次确认,微信拿不到昵称时怎样让人还能分得清谁是谁。
这些细节,才是一个小铺能不能被真正使用的分水岭。
最让我在意的,是“付款以后发生什么”
数字商品最怕的不是“卖不出去”,而是“卖出去了却交付不明白”。
飞鱼小铺围绕“支付完成以后”做了完整设计:订单创建以后进入待支付状态,支付成功以后进入交付流程;如果是 Git 仓库开通类商品,系统会根据商品绑定的仓库引用,选择对应平台的 API Token,调用 GitHub 或 Gitea 的协作者接口,把购买者加入仓库。
它还会在下单前检查用户是否已经拥有对应仓库权限,避免重复购买带来的尴尬。对于一组仓库组成的产品,它会逐个判断、逐个交付,并留下可追溯的订单与交付记录。

这一点对源码产品尤其重要。
如果你卖的是一个单仓库项目,比如一个播放器、一个预览器、一个前端组件库,它可以自动开通一个仓库;如果你卖的是一整套 office 全格式预览方案,它也可以一次选择多个仓库,付款后统一开通。用户不必反复加群、截图、等待人工确认,开发者也不必在深夜翻消息记录。
它不只是商品页,也是一套客户服务系统
飞鱼小铺里有工单,也有客服消息。
用户在订单页、商品详情页、个人中心都能找到入口;管理员能看到未读提醒、工单状态、附件、历史消息,也能从订单或工单发起沟通。用户侧保留简洁的聊天框,管理员侧则有会话列表,可以按最新消息自动排序,并展示未读数量。
这件事看似普通,实际上决定了服务能不能长期运行。
一笔订单背后,可能有支付截图、仓库账号、报错图片、部署日志、授权疑问。把这些内容留在工单和消息里,售后就不再依赖零散聊天记录,用户也能随时回头查看处理进度。
🌈 有问题就提交工单。
有进展就收到通知。
有附件就一起保留。
有记录,才有安心。✨
微信、GitHub、Gitea、Gitee,都被纳入同一条路
登录体系也是一段曲折旅程。
一开始只是接入 Gitea,后来要支持 Gitee,再后来 GitHub 仓库也要自动开通。公众号里用户发送“购买”或“开通”,还要直接收到快捷入口;发送“客服”“咨询”“联系”,要能得到客服指引。
于是,小铺把不同平台的账号信息统一收拢:用户可以绑定多个社交平台,系统把它们归到同一个人身上。对于微信无法直接取得头像和昵称的场景,又增加了趣味用户名生成,例如“爱吃山药的蓝小熊”“会写代码的青小鹿”,既能保护隐私,也能让客服与管理员一眼区分用户。

这不是为了炫酷,而是非常朴素的需求:当用户真的来买、来问、来开通时,系统要认得出他。
移动端也要让人愿意停留
很多购买动作发生在手机里,尤其是公众号跳转过来的用户。
所以飞鱼小铺没有把 PC 页面简单压扁,而是重新整理了手机里的层次:头部按钮更紧凑,推荐商品先出现,分类按钮自动换行,商品卡片保持醒目的封面与价格,工单入口放在用户容易看到的位置。

手机端不是附属品,它往往是第一次见面的门面。
现在,它能支撑哪些业务?
飞鱼小铺目前已经能承载这些数字商品与服务:
| 类型 | 适合卖什么 | 交付方式 |
|---|---|---|
| Git 仓库开通 | 源码、私有仓库、成套代码 | 自动交付 |
| Git 仓库打赏开通 | 不限上限的支持型购买 | 自动交付 |
| 数字下载 | 模板包、资料包、前端素材 | 人工或后续扩展为自动 |
| 服务套餐 | 部署陪跑、排查、咨询 | 人工交付 |
| 授权许可 | 插件授权、部署授权 | 人工交付 |
| 优惠券 | 折扣、满减、运营活动 | 下单试算与核销 |
| 工单售后 | 支付、开通、部署、使用问题 | 邮件、公众号、站内提醒 |
从当前生产环境看,已经有商品真实陈列在页面里:office 全格式源码、file-viewer 源码开通、部署陪跑、Viewer 授权、RTSP 本地播放、多个文档预览仓库开通、Vue 管理端模板包等。
这些商品不只是“示例名称”,而是围绕真实研发与交付场景摆出来的货架。
也给认真做产品的人一点信心
这一路最深的感受是:小产品也需要完整闭环。
只做一个漂亮页面,用户会在支付、开通、售后时遇到断点;只做一个订单接口,管理员会在运营、客服、权限管理里疲于奔命;只做一个登录按钮,后面还会遇到换绑、重复账号、昵称缺失、移动端状态同步等问题。
飞鱼小铺把这些细枝末节一件件补齐,最后呈现出来的,不是一套庞大的商业系统,而是一把适合个人开发者、小团队、开源项目维护者使用的轻巧工具。
它可以帮你把“我有一个源码项目”变成:
用户能自己了解商品; 用户能自己登录绑定; 用户能自己付款; 系统能自动开通仓库; 管理员能维护优惠券和商品; 售后能进入工单与客服; 数据能留下痕迹; 项目能被持续经营。
一些真实运行数字
为了让这篇文章不只停留在想象里,也放几项近期验证结果:
| 项目 | 当前结果 |
|---|---|
| 后端测试 | 98 个测试通过 |
| 前端构建 | Vite 构建通过 |
| 线上形态 | linux/amd64 native 二进制部署 |
| 主二进制大小 | 约 210M |
| 生产进程内存 | 约 190M RSS |
| 支付入口 | H5 支付、扫码支付、微信内支付能力已接入 |
| 商品交付 | GitHub、Gitea 仓库权限自动开通 |
| 售后体系 | 工单、附件、邮件、公众号消息、站内客服 |
这些数字不耀眼,却踏实。它们说明飞鱼小铺已经从“我想做一个小铺”走到了“它真的可以服务用户”的位置。
完全开源,欢迎一起打磨
飞鱼小铺会继续开放代码,也会继续把支付、交付、客服、运营这些真实场景沉淀下来。
如果你也是个人开发者,如果你也有源码、插件、模板、授权、服务套餐想要售卖,如果你希望购买以后不再靠人工一条条确认仓库权限,那么飞鱼小铺也许正好能帮你省下一段漫长的摸索。
愿每一个认真做出来的小作品,都能拥有自己的橱窗。
愿每一次交付,都清楚、体面、可追溯。
愿开源不仅是代码开放,也是一条可以被后来者走得更轻松的路。🌟
项目地址:https://git.flyfish.dev/flyfish-group/flyfish-dev[1]
飞鱼小铺:https://dev.flyfish.group/shop/item-list[2]
引用链接
[1]https://git.flyfish.dev/flyfish-group/flyfish-dev
[2]https://dev.flyfish.group/shop/item-list
夜雨聆风