升级Flovico博客:对接API,写一套支持“付费解锁”的加密阅读模块

刚把最后一行JWT校验逻辑塞进云函数,点了部署,看着日志流里蹦出第一个200状态码,我靠在椅背上长长吐了口气。这口气憋了三个月——从决定在静态博客上搞付费墙开始。

静态站点做鉴权根本就是反常识。Hugo生成的全是HTML文件,哪来的用户状态?但我不想用WordPress,那套东西太笨重,数据库一挂全完蛋。我要的是轻量、可控、能随时拆了重搭的架构。所以盯上了Serverless,云函数按调用次数收费,不用的时候一分钱不花,完美匹配我这种流量不确定的个人站。

核心思路其实暴力:把文章里需要加密的段落用特殊标记包起来,比如``和``。Hugo编译的时候,这些标记原样输出到HTML里。前端JS加载后,先检查本地有没有有效的JWT令牌。没有?那段落就显示成“扫码支付解锁”。有?就带着令牌去调用我写的那个云函数。

云函数才是心脏。它干三件事:验证JWT签名是否被我签发、检查令牌里的过期时间、解析出用户ID和对应的已购文章ID列表。验证通过,就把用户有权看的文章ID列表返回给前端。前端JS拿到列表,再和当前文章ID比对,如果在列表里,就动态把``和``之间的内容从隐藏变成显示。整个流程没有一次页面刷新,体验顺滑得像原生APP。

最精妙的是支付回调。我在微信支付后台配置的回调地址,指向另一个云函数。用户扫码付完钱,微信服务器会POST一个加密通知过来。这个函数解密通知,确认支付成功,就立刻生成一个JWT令牌,里面写好用户openid(匿名化处理过的)和刚买的文章ID,然后把令牌和一篇“恭喜解锁”的引导页HTML一起返回。用户几乎在支付完成的瞬间,就看到页面刷新,加密段落哗啦一下全出来了。

这种感觉,就像在互联网的荒漠里自己打了个井,还修了个小水站。不依赖知乎专栏的付费功能、不挂靠得到那种大平台抽成。代码是我写的,支付通道是我对接的,用户数据(哪怕只有购买记录)存在我自己的云环境里。整个闭环,从引流到内容到支付到交付,全在自家地盘完成。

什么叫“赛博银行”?这就是。虽然现在每天可能就几笔交易,但每一笔的100%都进我口袋,更重要的是,这个通道立在这里了。以后我可以随时往里面“发行”新的内容货币,可以调整价格策略,可以设计梯度权益——因为底层代码全是我可控的。

当然有坑。微信支付的API证书管理烦死人,云函数冷启动偶尔有延迟,JWT令牌在本地存储要考虑安全性防止被篡改。但这些问题一个个啃下来之后,那种“完全靠自己构建系统”的掌控感,是任何第三方SaaS工具都给不了的。我知道每一个API调用的成本,知道每一次鉴权的逻辑,知道万一出问题该从哪行日志查起。

这大概就是技术人的硬核浪漫:用最轻的架构,撑起一个完整的商业收银台。窗外?没什么窗外。电脑屏幕的光照在键盘上,比任何夜景都好看。

© 版权声明
THE END
喜欢就支持一下吧
点赞94 分享