2013-11-11 2 views
0

Я пытаюсь использовать интеграцию формы Sage Pay с моим сайтом. Я думал, что это будет довольно просто, но пока это не доказано. Я работаю в .NET, поэтому загрузил .NET Integration Kit со своей страницы поддержки, надеясь, что смогу увидеть, как это работает и реплицировать его.Ошибка: «Метод шифрования не поддерживается этой версией протокола»

К сожалению, наборы примеров слишком сложны для того, чем они являются. Они должны быть чрезвычайно простыми проектами, которые позволяют четко понимать, не полные, хорошо инкапсулированные решения. Это очень сложно, когда в одном файле кода есть методы, которые вызывают методы из нескольких других, которые используют значения, хранящиеся в файле Web.Config ... Для целей обучения было бы намного проще, если бы код был набран длинным в одном файле, с явно указанными значениями параметров. Конечно, это было бы некрасиво и, надеюсь, ни один достойный разработчик не смог бы воспроизвести такой неуклюжий подход, но было бы легче увидеть, что происходит!

В любом случае, напыщенная речь. Моя проблема заключается в том, что, когда я представить мои данные в Sage Pay я получаю ошибку

"5068: The encryption method is not supported by this protocol version"

Чтобы сделать мое шифрование я добавил файл SagePay.IntegrationKit.DotNet.DLL на мой проект, а затем называемый метод SagePay.IntegrationKit.Cryptography.EncryptAndEncode, который создает зашифрованную строку, которая выглядит так же, как и созданная в рабочем примере с веб-сайта. К сожалению, когда я отправляю строку на сервер Sage Pay, я получаю упоминаемую ошибку.

+0

Любые подсказки относительно того, почему это было отклонено? –

ответ

4

Я не голосовал, но в вашем вопросе (например, источнике) не так много, что может объяснить это. Однако я только что получил эту работу с этим кодом, чтобы сделать шифрование:

public string SagePayEncryptAndEncode(string inputText, string key) 
{ 
    using (var AES = new RijndaelManaged()) 
    { 

     // Set the mode, padding and block size for the key 
     AES.Padding = PaddingMode.PKCS7; 
     AES.Mode = CipherMode.CBC; 
     AES.KeySize = 128; 
     AES.BlockSize = 128; 

     // Convert key and input text into byte arrays 
     Byte[] keyAndIvBytes = UTF8Encoding.UTF8.GetBytes(key); 
     Byte[] inputBytes = UTF8Encoding.UTF8.GetBytes(inputText); 

     // Create streams and encryptor object 
     using (var memoryStream = new MemoryStream()) 
     using (var cryptoStream = new CryptoStream(memoryStream, AES.CreateEncryptor(keyAndIvBytes, keyAndIvBytes), CryptoStreamMode.Write)) 
     { 

      // Perform encryption 
      cryptoStream.Write(inputBytes, 0, inputBytes.Length); 
      cryptoStream.FlushFinalBlock(); 

      // Get encrypted stream into byte array 
      var outBytes = memoryStream.ToArray(); 

      // Manually close streams 
      memoryStream.Close(); 
      cryptoStream.Close(); 
      AES.Clear(); 

      //return Convert.ToBase64String(outBytes); 

      return BitConverter.ToString(outBytes).Replace("-", String.Empty); 
     } 
    } 
} 

Затем нужно сохранить полученное значение в скрытом поле и препенде «Crypt» «@».

<input name='Crypt' type='hidden' value='@<InsertResultHere>' /> 

Одна вещь, чтобы отметить, что, как представляется, работать только с использованием кодировки Hex, а не Base64 кодирование как документация подразумевает.

Надеюсь, это поможет!

+0

Документация будет правильной, если вы используете V2.23 или 2.2, версия 3 не использует старый метод шифрования. –

+1

Привет, Дэн. Спасибо за это. Документация кажется довольно отрывочной, если честно. И даже не заставляйте меня начинать с количества кодов ошибок, которые в основном задокументированы как «что-то не так, пожалуйста, проверьте и исправьте» .... но все же, если бы это было сделано слишком легко, мы не могли бы взимать так много для работы, я полагаю. –

2

Форма v3.00 Строка склепа должна быть зашифрована с использованием алгоритма AES/CBC/PCKS # 5 и предварительно зарегистрированного пароля шифрования (он отличается как для учетных записей Test, так и для Live), а затем Base64 кодируется для обеспечения безопасной транспортировки в HTML-форму. Пожалуйста, используйте AES, как указано выше, для предотвращения ошибки 5068.

V2.23 также поддерживается XOR.

Sage Pay Support

+1

Вопрос здесь относится к ASP, но эта страница демонстрирует высокий уровень в google для сообщения об ошибке, поэтому подумал, что может быть полезно связать с классом PHP, который делает это правильно для нового v3 https://github.com/tolzhabayev/sagepayForm-PHP –

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