参数里三个可选字段为空,一方拼串保留 key=,另一方直接丢掉,签名稳定差一位。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,文档只写了按参数名排序,没说空值怎么处理。两边各自实现,一边序列化空串,一边跳过 None,待签串长度都不同。

「空值字段签名」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。报错里带路径的,先去看那个路径在不在、权限对不对。

python -c "print('&'.join('%s=%s'%(k,v or '') for k,v in sorted({'a':'','b':'1'}.items())))"

同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

具体做法是,约定空值统一参与签名 值写空串;序列化前把 None 转成空字符串;规则写进联调文档并给出样例;两边用同一份含空值的参数回归。

最后用这个标准收尾,含空值参数的样例两边签名一致 联调通过。

作者 9823189