2015-06-22 2 views
0

Я успешно прошел интеграцию FORM, за исключением шифрования.Интеграция форм SagePay V3 с использованием CFML - Шифрование AES

Версия 3 требует шифрования AES, и я не понимаю, как реализовать этот этап.

Ранее скрипт CFML построил склеп поле в конце с помощью этого:

//** call to include file to encrypt 
crypt = base64Encode (SimpleXor(stuff,EncryptionPassword)); 

Это называется файл функции, которые сделали фактическую работу.

Помощь, в которой я нуждаюсь, заключается в создании нового скрипта в файле function.cfm, а также в том, каким должен быть вызов.

Может кто-нибудь помочь, пожалуйста?

Приветствия

Вот фрагмент кода:

<cfscript> 

ThisVendorTxCode = "#sfo_id#"; 

ThisVendorName = "pivotell"; 

stuff = "VendorTxCode=" & ThisVendorTxCode & "&"; 

stuff = stuff & "VendorName=" & ThisVendorName & "&"; 

</cfscript> 

<cfset encryptionKey = generateSecretKey("AES") /> 

//** call to include file to encrypt 

<cfset crypt = encrypt(stuff,encryptionKey,"AES","hex") /> 

<cfoutput> 

<form action="https://test.sagepay.com/gateway/service/vspform-register.vsp" method="post" id="form1" name="form1"> 

<input type="hidden" name="VPSProtocol" value="3.00"> 

<input type="hidden" name="TxType" value="PAYMENT"> 

<input type="hidden" name="Crypt" value="#crypt#"> 

</form> 

</cfoutput> 

Я усеченный полную вещь для простоты.

+0

Добро пожаловать в С.О. Как написано, ваши вопросы [слишком широк для переполнения стека] (http://stackoverflow.com/help/closed-questions) и рискуют быть закрытыми. 1) Какой код вы пробовали до сих пор? 2) Какие ошибки вы столкнулись? 3) Вы искали архивы? Есть несколько потоков на SagePay (http://stackoverflow.com/search?q = [coldfusion] + sagePay), который может дать вам отправную точку. Кроме того, если есть общедоступный URL-адрес для этого API, это не помешает включить его выше. – Leigh

+0

Обратите внимание: если вы используете ACF, лучше всего добавить тег '[coldfusion]', чтобы охватить большую аудиторию. – Leigh

+0

Является ли здесь пример кода? [http://stackoverflow.com/questions/11854251/coldfusion-encryption-decryption-issue][1] [1]: http://stackoverflow.com/questions/11854251/ coldfusion-encryption-decryption-issue –

ответ

2

Мне потребовалось 3 дня и 3 ночи, чтобы понять это. Пожалуйста, прочтите страницу 37 Sage Pay Form Integration and Protocol Guidelines 3.00.

A1.1 Склеп поле

  1. Поле Crypt должно содержать всю другую информацию о транзакции в текстовом виде полей Name = Value, разделенных «&» символов. Убедитесь, что все обязательные поля присутствуют, и что нет пробелов после символа '&'.

  2. Эта строка затем должно быть зашифрована с использованием AES (размер блока 128 бит) в режиме CBC с PKCS # 5 дополнением, используя предоставленный пароль, как вектора ключа и инициализации и кодирование результата в шестнадцатеричном (убедившись, буквы в верхнем регистре).

  3. Подготовьте знак «@» к началу закодированного результата.

Вместе с the last answer on this post. Он должен сортировать его.

... Так как ваша строка пароля не в кодировке base64, полученный ключ длина слишком мала, то есть (12) вместо (16) байт. ... Решение в base64 закодировать его первого ... Кроме того, параметр IV должен быть двоичным

<cfset keyIVBytes = charsetDecode(yourKeyString, "utf-8")> 
    <cfset base64Key = binaryEncode(keyIVBytes, "base64")> 

    <cfset result = encrypt(plainString, base64Key,"AES/CBC/PKCS5Padding", "hex", keyIVBytes)> 
+0

Добро пожаловать в S.O. Хотя приведенные выше ссылки содержат ответ, лучше включить также краткое резюме, а не просто ссылки. [«Связать только ответы» обычно удаляются] (http://stackoverflow.com/help/deleted-answers), потому что ответы становятся бессмысленными, когда ссылки меняются или прерываются. – Leigh

+0

BTW, я не голосовал за это, но я подозреваю, что это было проголосовано из-за ссылки только на характер исходного ответа. – Leigh