从零搭建 Hexo 博客,并部署到 Cloudflare Pages
这篇文章记录一下我是怎么从零搭建 Hexo 博客、换上 Butterfly 主题,并最终把它托管到 Cloudflare Pages 的。 中间其实没有什么特别玄学的东西,但有几个地方很容易点错,比如 Cloudflare 现在会把 Workers 和 Pages 放在同一个入口里,如果误进了 Workers 流程,就会看到 wrangler deploy、API token 这些对纯静态博客来说不该出现的配置。 所以这篇就按真实流程写一遍,也顺便记录一些我觉得比较舒服的 Hexo 用法。 准备环境本地需要先准备好 Node.js 和 Git。 Windows 下可以在 PowerShell 里检查: 123node -vnpm -vgit --version 我这里用的是 Node.js 22: 1v22.12.0 如果 PowerShell 提示不能运行 npm.ps1 或 npx.ps1,一般是执行策略限制。临时规避的话,可以在脚本里显式使用: 12npx.cmdnpm.cmd 这样 Windows 批处理里会稳一点。 初始化 Hexo 项目先全局安装 Hexo ...
为什么想建立这个博客
其实很早之前就想弄一个自己的博客了,只是一直拖着没动。 倒也不是没有东西可以写,恰恰相反,很多时候是东西太杂了:折腾过的项目、踩过的坑、临时冒出来的想法、一些后来才发现还挺有价值的经验。只是当时总觉得“以后再整理吧”,然后这个以后就没有然后了。 最遗憾的是,很多东西过去之后就真的记不清了。 当时怎么解决的、为什么这么做、中间试错了哪些方案、最后到底是哪一步救了命,这些细节在脑子里放几天还行,放几个月就开始变成一团雾。等到后来再遇到类似问题,只剩下一句“我以前好像搞过”。 这感觉挺亏的。 当然,还有一个很现实的原因:懒。 很多东西不是不会写,而是懒得写。总觉得记录要写得很完整、很正式、很像一篇文章,结果反而把自己卡住了。后来想想,其实没必要一开始就追求多漂亮。能把当时的过程、想法、坑点留下来,就已经很有价值了。 所以这个博客更像是给自己留的一个备忘录。 它不一定每篇都很严肃,也不一定每篇都有多完整。可能是一次支付方案的整理,可能是一次逆向过程的记录,也可能只是某天突然想明白了一件小事。只要值得留下,就可以写下来。 以前没有记录,确实有点遗憾。 那就从现在开始补上吧。
记一次某云商的 sign 算法逆向
前段时间闲着没事,朋友给我推了一个活动,大概是关于毛子的。刚开始我是拒绝的,后来发现连实名认证都得抢,于是打算用电脑试试。 结果一打开才发现它只支持手机端访问。既然这样,那就顺手抓个包看看。 抓包分析先看抓到的请求: 从请求里能看到一个比较关键的字段:sign。看格式和长度,八九不离十是 MD5。 除了 sign 以外,请求头里还有两个字段: 12noncestrtimestamp timestamp 不用多说,就是时间戳;noncestr 盲猜是随机字符串。这样一来,核心问题就变成了:只要知道它的签名规则,就能模拟这个请求。 小程序解包小程序不像网页,不能直接打开 F12 看源码,所以需要用到 wxappUnpacker 这类小程序分包工具。 小程序包需要先从手机上提取出来,再进行解包分析。 源码分析用 VS Code 打开解包后的源码,直接搜索关键词 noncestr,很快就能定位到加密逻辑附近。 接着继续找 PLMKEY: noncestr 也是有生成规则的,这里当时踩了一个坑: 简单还原一下字符串拼接和签名逻辑,大概是这样: 1234567891011121...
个人账号无法开通当面付时的支付宝 JSAPI 免签支付方案
项目:墨鱼杂货铺目标:在无法开通支付宝“当面付”的情况下,用支付宝小程序 JSAPI 能力实现一套可对接独角数卡的易支付网关。 很多个人开发者或小微场景无法直接开通支付宝“当面付”。这时,如果账号拥有支付宝小程序能力,可以换一种思路:不走当面付扫码支付,而是让用户扫码打开小程序,并在小程序内通过官方 JSAPI 支付完成收款。 这里说的“免签”不是监听个人收款码,也不是绕过支付宝风控,而是不用“当面付”产品,改用官方的小程序 JSAPI 支付能力完成收款闭环。 背景独角数卡这类发卡系统通常更习惯对接“易支付”协议,标准流程类似这样: 1独角数卡 -> 易支付网关 -> 用户付款 -> 网关异步通知独角数卡 如果没有当面付权限,常见的扫码支付接口无法直接使用。但如果账号拥有支付宝小程序能力,就可以在小程序内调用 JSAPI 支付: 123my.tradePay({ tradeNO: tradeNo}) 本项目采用的整体思路如下: 12345678独角数卡发起易支付订单 -> Service 生成一个带订单号的小程序跳转...