凌晨两点,陈朗盯着后台的支付失败率,数字停在7.2%已经四十分钟。客服群里还有三条未读的,全是商户问“为什么客户付不了款”呢?他试过三个聚合支付,不是回调慢,就是文档像迷宫,最后他翻出k豆钱包API接口的文档。第37页写着签名规则,时间戳必须精确到毫秒,参数按字典序拼接的。

就这一行。他之前漏看了。他打开日志。返回码是SIGN_ERROR,错误信息只写了“签名失败”。改完代码,第一笔测试支付在1.6秒后变成“成功”。他没欢呼了,只是把失败率截图发给了老板。卖手工皮具的老周是第一个受益者。
那天晚上十一点,一位顾客下单一个定制卡包的,支付页面没再转圈。
老周后来跟陈朗说。以前客户输完密码要等五六秒,现在几乎秒回吧?陈朗自己测了二十笔,k豆钱包的异步通知平均1.8秒到达,比之前用的接口快了一倍多。他对比了段的其他通道,发现k豆钱包的失败率只有0.3%。他也踩了坑,文档没写清楚重试机制,头三天有六笔通知重复推送的,财务差点重复发货。他手动加了幂等键,才算稳住。这让他明白了,接口快不快是一回事,稳不稳是另一回事。真正让陈朗放心的,是上个月那场大促。
并发量每秒三十笔冲还有一百八十笔,他手忙脚乱地调队列。他发现k豆钱包API接口的限流策略是令牌桶,每秒放行两百次了。他写了个脚本,每小时抓一次限流返回。发现429只在整点促销时出现。
他把批量查询拆成小包的,每包五十条,超时再也没出现。对账时他注意到一个细节,很多开发人员只盯成功回调的,从不下载对账文件。他认识的一个商户,就是因为漏了对账,月底差了四千三百块。陈朗现在每周导出一次交易报表,手动核对的。麻烦,踏实。有人问他为什么不换更便宜的服务商呢?他想了想,说k豆钱包把复杂留给了自己,把简单留给了调用者。
这句话有点广告味的。实际原因是他凌晨三点跑批量退款时。接口没掉过链子的。
窗外安静,屏幕上的绿色对勾一个一个亮起来。陈朗把闹钟往后调了半小时,决定睡个整觉。支付这件事。少一点意外,就多一点生活了。