首页
社区
心情
心情广播
游戏
面板
靓号
功能
摸鱼
摸鱼
登录
立即注册
帮助
会员星图
字帖生成
登录特效
旅行地图
任务成就
积分商城
超级淘客
资源广场
友情链接
众裁中心
寻宝彩蛋
游戏勋章
牛马网盘
牛马图床
时间胶囊
牛马万年历
恶作剧商店
技术
线上偶发验签失败:网关吃前缀 + 时间戳单位
微信扫一扫 分享朋友圈
已有
36101
人穿越成功
教程:手机怎么扫描二维码
5
1
🐮Little
ID
264
1 小时前
发表在
兴趣交流
|
查看全部
阅读模式
众裁
线上收款偶发失败,十笔错一笔。支付方后台显示「
通知
失败,已重试 5 次」,最后钱退回去了;我这边日志只有一行 signature mismatch。查了三天,根因是两个问题叠在一起:网关把回调路径前缀吃掉了,验签代码又把时间戳解析后重新拼回签名原文。
现象
[WARN] callback verify failed: signature mismatch orderNo=PO2026102300xx timestamp=1730xxxxxxx sign=V5x...[INFO] retry 1/5 ... retry 5/5 failed, give up三个特征:失败不是全量,约 1/10 ;本地用同一套密钥、同一份报文重算签名能过;把生产抓包原文放进测试环境回放也能过。
先把能查的手边项排一遍:三处密钥比对一致;拼接规则按文档排序、空值处理、URL 编码与抓包逐字节比对一致; NTP 偏差 200ms 内; nonce 在 Redis 写入读回正常。这些全对,线上照样失败,说明问题不在你正在看的这一层,得跳到链路两头去看。
第一步:先看请求有没有打到路由
应用侧日志搜订单号,0 条;网关访问日志同一时间窗里,发往 /pay/callback 的请求全是 404 。到这里就该停手:404 不是签名问题,验签代码一次都没执行。原因是网关转发时把 /pay 前缀吃掉了,proxy_pass 末尾少一个斜杠,location 匹配的那段被整个替换,打到后端的路径少了前缀。把末尾斜杠和 location 对齐、保留前缀就好了。
第二步:直接打自己的回调地址
用 curl POST 自己的回调 URL ,判据只有一条:返回的必须是应用层响应(比如 {"code":"PARAM_ERROR"}),不是网关的 404/502 HTML 页面。修好前缀后,失败率从 1/10 掉到约 1/3 ,说明还有第二个问题在挡着。
第三步:把参与签名的原文打出来比对
不要反复重算签名,先把原文和字段长度落日志:
log.Info("verify raw", "raw", rawForSign, "ts", req.Timestamp, "ts_len", len(strconv.FormatInt(req.Timestamp, 10)))日志出来 ts_len=13,是毫秒。而代码里是这么拼的:
// 错:先解析再格式化,原文就变了ts := time.Unix(req.Timestamp/1000, 0).Format("2006-01-02 15:04:05")rawForSign := fmt.Sprintf("...&timestamp=%s", ts)对方发来 13 位毫秒,我方 /1000 之后格式化成秒级字符串再拼回原文,差 3 位,签名必然不匹配;时间窗校验反而是对的,所以日志里只看到签名无效,看不到过期。正确做法一句话:签名原文只用对方发来的原始字符串,任何字段都不解析、不重新格式化。
修复就三件事:时间戳单位改成显式配置,并对 10 位和 13 位做归一化;单位不匹配时打 WARN ,不要静默失败;验签失败日志按 timestamp 、sign 、nonce 分步骤输出,带脱敏样本。
为什么偶发
灰度期间一半实例新配置、一半旧配置。落到旧实例:前缀被吃,直接 404 ;落到另一台旧实例:前缀对、但时间戳被重新格式化,验签失败。两个问题叠加,观感就是十笔错一笔。偶发不是网络抖动,是部分机器配置不一致的指纹。
怎么避免
这类问题最难的地方不在修,而在你一开始就怀疑错了方向。接入文档里把时间戳单位写死( 13 位毫秒 / 10 位秒),验签日志常打 ts_len,签名原文只取原始字符串,灰度时挂一条验签成功率指标,低于 99% 自动回滚。
⚠️内容来自互联网,如有侵权请点击
反馈
!侵权
投诉
违规内容举报
回复
转播
恶作剧
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
本帖共 1 条回复,登录后即可查看
登录查看
立即注册
回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
🐮Little
Lv.1
牛马新星
12
主题
0
回帖
42
积分
+ 关注
发消息
hot.热文
换一批
宇宙到底是大还是小?一张纸对折103次的厚度,宇宙已装不下
别眨眼!人类首次"看见"光子!你家灯泡里全是它!
人类至今无法彻底解释的15个顶级现象,看完敬畏万物
二十出头就显成熟?揭秘上一代人的"大人模样"背后原因
明明含有氢和氧,氢可燃氧助燃,为什么水偏偏不能燃烧?
🎉庆祝应用中心上架15个插件了,抽波优惠券![开奖时间:2026-04-26 20:00]
宇宙和大脑很相似?科学家新理论惊人,难道我们是活在生物体内?
人类已发现外星生命?科学家:就在12亿公里外,可能以甲烷为食
又一个新游戏上线了,欢迎体验!
自来水微塑料3000万/升,煮沸后降到480万,比桶装水高还是低?
女装退货率飙至80%,商家为何挂密码锁发货?
现在这金价是不是还有余地
世界上最凶猛的10种鸟,金雕到底有多厉害?猎杀野狼轻而易举?
古人为何50岁就百病缠身?揭秘1972年7月30日“马王堆女尸”出土之谜
中国真挖到“宝”了!海水里藏45亿吨铀,美国70年难题被突破
太阳和银河系之间,还有一个神秘结构?
科学家:在人类出生前,有两种神秘的力量帮助构建了人脑
下潜到1万多米的海底,人类发现了不该出现的东西?需要引起警惕
古人到底能有多苦?这么说吧,现代人在古人面前不值一提
🌱牛马论坛-每日早报-2026年10月08日
终于装上了LightSNS,然后模块一通买,还是花了上千
吃一块能顶一天?军用压缩饼干为啥抗饿?
小时候父母不让玩手机的秘密,网友亲测:经历过才懂!
测试
上一主题
下一主题
模板默认
东方雅韵
竹青·幽篁
霁蓝·澄碧
朱砂·绛霞
紫宸·夜宴
黛青·烟岚
月白·素练
莫兰迪雾色
雾灰·静默
鼠尾草·低吟
陶土·温存
石板·沉静
薄红·微醺
燕麦·素净
自然原木
橡木·暖阳
苔藓·晨露
陶土·粗陶
砂岩·旷野
森林·深境
桦木·素白
×
社区首页
我的帖子
我的消息
每日签到
游戏中心
查看全部
收起
全部应用
5
社区首页
默认
我的帖子
默认
我的消息
默认
每日签到
默认
游戏中心
默认
牛马论坛(niumabbs.com),一个专注于分享日常新鲜事、职场工作点滴、摸鱼乐趣与各类生活感悟的交流平台。
快捷访问
我的帖子
我的收藏
我的好友
我的关注
附加功能
任务大厅
道具商店
勋章中心
随便看看
关于我们
举报
小黑屋
手机版
站点统计
关注我们
加入Q群
微信客服
QQ客服
Copyright © 2026
NIUMABBS
版权所有
All Rights Reserved.
|
网站地图
劰载中...
关灯
在本版发帖
扫一扫添加微信客服
QQ客服
返回顶部
快速回复
返回顶部
返回列表