javascript - 用于 Opayo(Sage Pay)支付表单 Crypt 字段的 Node.js 中的 AES 加密
问题描述
我相信我已遵循加密表单数据的规范以发送到支付处理器 Opayo(以前称为 Sage Pay)。但是,我收到一个错误,看起来加密无法读取。
Crypt 字段的规范(VPSProtocol 版本 4.00),https://developer-eu.elavon.com/docs/opayo-forms/api-reference/crypt-field
Crypt 字段应包含纯文本形式的交易信息,因为 Name=Value 字段由“&”分隔 人物。
字符串必须在 CBC 模式下使用 AES(块大小 128 位)和 PKCS#5 填充进行加密。
使用提供的密码作为密钥和初始化向量,并将结果编码为十六进制(确保字母为大写)。
将“@”符号添加到编码结果的开头。
生成 Crypt 字段值的实现:
function encodeAES (text, key, iv) {
const cipher = crypto.createCipheriv('aes-128-cbc', new Buffer(key), new Buffer(iv));
const encrypted = Buffer.concat([
cipher.update(text),
cipher.final()
]);
return encrypted.toString('hex').toUpperCase();
}
function createHash (paramsString) {
return '@' + encodeAES(paramsString, OPAYO_FORM_API_PASSWORD, OPAYO_FORM_API_PASSWORD);
}
const crypt = createHash("Name=Value...");
当表单与所有其他必填字段一起发布时,我收到错误 5080。测试门户中没有记录任何事务。
解决方案
推荐阅读
- javascript - 使用 jQuery fadeOut() 缩放动画
- angularjs - 请求已被阻止;内容必须通过 HTTPS 提供
- asp.net - 带有 Webforms 客户端和令牌刷新的 IdentityServer4
- android - 警报触发太频繁
- android - How to display the data of an external database in the listview?
- spring-boot - 如何自定义连接池的spring boot默认属性
- asp.net-mvc - 在实体框架 UnitOfWork 模式中实现事务
- swift - 如何从 Swift 中的 [DDXMLElement] 中提取值?
- oracle - SQL Server 2016 链接的 Oracle Server - 突然停止工作
- ruby-on-rails - Rails 重定向或渲染以显示错误