与this question类似,我已将网站迁移到使用VPS协议3.00。
我已经使用测试加密密钥对测试站点进行了测试,并且一切正常。当我将其切换为使用带有实时加密密钥的实时网站时,我收到了可怕的3045 : The Currency field is missing
错误。
使用VPS协议2.22时,相同的加密密钥在实际站点上有效,但在切换到3.00时则不行。
我还将帖子数据提供给解密脚本,该脚本使用相同的密钥解密crypt
而没有问题。
任何人都可以想到为什么代码会对test.
起作用,而不是live.
使用适当的密钥,或者为什么2.22接受密钥而3.0不接受? live.
是否正在使用3.00进行额外检查test.
不是?
我的代码稍微修改了集成套件中的功能:
function addPKCS5Padding($input) {
$blockSize = 16;
$padd = "";
// Pad input to an even block size boundary.
$length = $blockSize - (strlen($input) % $blockSize);
for ($i = 1; $i <= $length; $i++) {
$padd .= chr($length);
}
return $input . $padd;
}
// AES encryption, CBC blocking with PKCS5 padding then HEX encoding.
function sagepay_encrypt($string, $key) {
// Add PKCS5 padding to the text to be encrypted.
$string = addPKCS5Padding($string);
// Perform encryption with PHP's MCRYPT module.
$crypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $string, MCRYPT_MODE_CBC, $key);
// Perform hex encoding and return.
return "@" . strtoupper(bin2hex($crypt));
}
通过填充$crypt_values
数组并调用:
$crypt_source = sagepay_buildcrypt($crypt_values);
$crypt = sagepay_encrypt($crypt_source, $sagepay_key);
$crypt_source
在所有情况下都有效且(大部分)相同:
VendorTxCode=20150721020857Deannatest&VendorData=Deanna test&Amount=1&Currency=GBP&Description=Quote Reference Deanna test&BillingSurname=Earley&BillingFirstnames=Deanna&BillingAddress1.....
答案 0 :(得分:1)
查看加密密码,它太短一个字符。我通过在末尾添加'X'(大写)来更新它,所以只需相应地更新你的值。
我试了一下它现在很好。
我假设您使用的是以“3Gd”开头的密码(如果不让我知道的话)。