Cyber​​source API 请求签名生成不匹配 Apex

问题描述

我正在尝试生成签名哈希以通过 Apex 向 Cyber​​source 发出 API 请求。到目前为止,我能够成功地对 API 执行 GET 请求;但是,在发出 POST 请求时,我注意到从我的代码生成的签名与 Cyber​​source 使用的签名不匹配。

构建哈希的说明在 Cyber​​source 的网站上定义如下:Link

为了测试您的代码以验证是否正确生成了值,他们在此页面上为您提供了一些示例值及其预期响应:Link

对于 GET 请求,标头字段字符串不包括摘要。在测试代​​码以生成 GET 请求的签名哈希时,我得到了预期的响应。在添加摘要字段并为 POST 请求创建哈希时,我没有得到预期的结果。这会导致在尝试使用真实值时出现身份验证问题。

我已经简化了代码以明确测试为签名哈希返回的值。目前,我有以下几点:

String headerFields = 'host: apitest.cybersource.com\ndate: Fri,14 Dec 2018 00:00:00 GMT\n(request-target): post /pts/v2/payments/\ndigest: SHA-256=a/goIo1XUCr80rnKFcwp7yRpwVL50E9RaunuEHh11XM=\nv-c-merchant-id: testmid';
String privateKey = '0123k20MBbIB2t012345678993gHCIZsQKFpf7dR0hY=';
Blob hash = Crypto.generateMac('HmacSHA256',Blob.valueOf(headerFields),EncodingUtil.base64Decode(privateKey));
String digest = EncodingUtil.base64Encode(hash);
System.debug(digest);

当我运行此代码时,我得到以下值: 0vPJsjMaV/RKbhY0/tcU+VTTaExxVodovd+KiF5pB4I=

Cyber​​source 的预期响应是: SV0OVjBmO3ThK9P4CV5TaR4D/efXCVqbsE84doMdhA8=

我尝试过使用其他语言,例如 C#(从另一个问题中找到示例代码 - Creating HTTP Signature for CyberSource integration);然而,我最终得到了同样的回应。这让我相信我在签名散列中遗漏了什么,我做错了什么,或者文档可能遗漏了一个步骤?

非常感谢任何帮助或见解,非常感谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)