2015-07-21 2 views
1

Как и в случае с this question, я перенес сайт, чтобы использовать протокол VPS 3.00. Я проверил свое тестирование на тестовом сайте с помощью тестового ключа шифрования, и все работает хорошо. Когда я переключу это, чтобы использовать живой сайт с живым ключом шифрования, я получаю страшную ошибку 3045 : The Currency field is missing.живой ключ шифрования не работает после обновления до протокола VPS 3.00

Тот же ключ шифрования работает на реальном сайте при использовании протокола 2.22 VPS, но не при переключении на 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

Я могу предоставить доступ к тестовому сайту и продемонстрировать все комбинации, если это необходимо. – Deanna

+0

Если вы можете указать имя поставщика, я могу изучить его для вас ... –

ответ

1

Глядя на пароль шифрования, слишком короткий на один символ. Я обновил его, добавив «X» (верхний регистр) до конца, так что просто обновите свое значение соответственно.

Я попробовал, и теперь все в порядке.

Я предполагаю, что вы используете пароль, начинающийся с «3Gd» (если не дайте мне знать).

+0

Для кого-то еще с этой проблемой - ваш ключ шифрования должен быть 16 символов. Если это не так, вам нужно связаться с Sage Pay –

+0

Благодарим вас, добавив X в обработанный ключ. Я предполагаю, что это также нарушит метод XOR? – Deanna

+0

Да. Вам нужно будет убедиться, что и XOR, и AES используют тот же пароль с этого момента (хотя Sage Pay будет отключать сторону XOR вещей за 10 дней) –

Смежные вопросы