Я использую метод интеграции формы SagePay с приложением Ruby on Rails/EmberJS. Я занимаюсь всей сложной платежной конструкцией в Rails.
Короче говоря, SagePay нужна зашифрованная, закодированная строка «crypt», которая содержит такие данные, как платежный адрес пользователя, сумма, перенаправления после оплаты и другие данные транзакции.
SagePay предоставляет пароль шифрования в тестовой среде. В руководстве по интеграции формы говорится, что нужно построить крипту в виде строки, затем зашифровать ее с помощью AES-256 и пароля шифрования, а затем закодировать строку в Base64 для отправки на сервер тестовых платежей Sage.
Вот как я это реализовал (используя гем Encryptor):
def encryptandencode(string)
salt = Time.now.to_i.to_s
secret_key = 'test-server-secret-key-from-sage'
iv = OpenSSL::Cipher::Cipher.new('aes-256-cbc').random_iv
encrypted_value = Encryptor.encrypt(string, :key => secret_key, :iv => iv, :salt => salt)
encoded = Base64.encode64(encrypted_value).encode('utf-8')
return encoded
end
где string
— это незашифрованная, незашифрованная строка Crypt, содержащая данные транзакции.
Проблема
Шифровальщик отказывается использовать данный секретный ключ. Пишет, что ключ слишком короткий.
Что мне здесь не хватает?