首页 > 解决方案 > 用于 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。测试门户中没有记录任何事务。

标签: javascriptnode.jsencryptionopayo

解决方案


推荐阅读