Я младший разработчик (новичок в работе), которому поручено выполнить обновление с Sagepay 2.23 -> 3.00. (на сайте, который мы недавно перешли) Я внес изменения в VPSProtocol и думаю, что успешно реализовал переход на AES.
Однако предыдущий фрагмент кода был установлен на:
$strCrypt = base64Encode(SimpleXor($strPost,$strEncryptionPassword));
Я намерен это закомментировать и выложить это:
function pkcs5_pad($text, $blocksize)
{
$pad = $blocksize - (strlen($text) % $blocksize);
//echo "<br/>Padding:".str_repeat(chr($pad), $pad)."<";
return $text . str_repeat(chr($pad), $pad);
}
function encryptFieldData($input)
{
$key = $strEncryptionPassword;
$iv = $key;
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, "", MCRYPT_MODE_CBC, "");
if (mcrypt_generic_init($cipher, $key, $iv) != -1)
{
$cipherText = mcrypt_generic($cipher,$input );
mcrypt_generic_deinit($cipher);
$enc = bin2hex($cipherText);
}
return $enc;
}
$datapadded = pkcs5_pad($str,16);
$cryptpadded = "@" . encryptFieldData($datapadded);
И сделал изменения здесь:
<input type="hidden" name="Crypt" value="<? echo $cryptpadded ?>">
Я думаю, этого достаточно, я жду доступа к тестовой среде Sagepay.
Что касается поля ответа, я не совсем понимаю, где реализовать необходимые изменения. Предоставленный пример кода перечисляет эту информацию, но существующий php-файл не содержит никаких данных для поля ответа.
Любая помощь или руководство будет очень цениться.
Спасибо!
Посмотрите, что отправляется как URL успеха / неудачи с сообщением о транзакции, а затем вернитесь к коду оттуда. В основном вам нужно будет расшифровать строку шифрования, которую возвращает Sage Pay, которая содержит результат транзакции / ID транзакции и (не забудьте удалить «@» перед тем, как пытаться расшифровать).
Других решений пока нет …