调用Fiserv Ucom所有API遇401错误,Node.js生成HMAC签名失败求助
Fiserv Ucom API 401错误:HMAC签名排查与修复
核对
rawSignature的构造逻辑
Fiserv的HMAC签名对原始签名串的格式要求极严,一般得包含HTTP方法、请求URI、时间戳、随机串(nonce)、请求体哈希这些字段,而且顺序、分隔符(比如换行符)必须和文档完全一致。比如常见的格式是:POST\n /ucom/api/v1/transactions\n 1699999999\n abc123xyz\n a1b2c3d4e5f6...你得确认
rawSignature有没有漏字段、顺序错了或者分隔符用错(比如用空格代替换行)。验证HMAC密钥的准确性
别搞混API密钥和HMAC密钥,Fiserv一般会分开提供这两个密钥。另外检查密钥有没有多余的空格、换行符,或者是不是用了错误的编码(比如应该是UTF-8字符串,不是Base64解码后的二进制数据)。确认编码与算法匹配
你的代码用SHA256+HMAC再Base64编码的逻辑是对的,但要注意:rawSignature如果是带特殊字符的字符串,得确保是UTF-8编码后再传入CryptoJS- 核对文档是否要求签名是Base64格式,有些平台会要求十六进制,但Fiserv大多用Base64。
换Node.js原生
crypto模块测试
CryptoJS偶尔会有编码处理的差异,试试用Node.js内置模块生成签名,对比结果:const crypto = require('crypto'); const hmac = crypto.createHmac('sha256', key); hmac.update(rawSignature, 'utf8'); const computedHmac = hmac.digest('base64');如果用原生模块生成的签名能通过验证,说明CryptoJS对
rawSignature的编码处理有问题。检查签名的请求头传递格式
确保把生成的computedHmac放到正确的请求头里,Fiserv一般要求放在Authorization头,格式可能是HMAC <签名内容>,严格按照文档要求的格式来,别自己瞎改。
内容的提问来源于stack exchange,提问作者Dishant Mesvania
相关产品推荐
相关产品推荐

