2009-09-01 8 views
0

Это действительно ломается мозг: Мне нужно отправить нечувствительные данные на сторонний платежный шлюз. Я хочу использовать встроенную проверку формы тэка, которая работает нормально.проверка данных cakephp перед отправкой удаленной формы

То, что я делаю, представляет форму локальному действию, которое выполняет калибровку данных и выводит любые ошибки, если таковые имеются. Там, где я застрял, вы пытаетесь повторно отправить эти данные на удаленный URL-адрес, если нет ошибок проверки. Проблема в том, что браузер должен быть перенаправлен на внешний url с данными post ... Я думаю, что я потерял его здесь, я знаю, что это, вероятно, невозможно ... Мой план B - это просто использование javascript для проверки и публикации формы непосредственно на внешний url .. Я посмотрел на использование curl, но мне нужно, чтобы браузер перенаправлял/открывал внешний URL. У меня есть способ получить завиток, чтобы перенаправить браузер при отправке на URL-адрес?

+0

что-то говорит мне, что я отважился выйти за пределы протокола HTTP – brndnmg

ответ

0

Единственный вариант, о котором я знаю, - использование JavaScript.

Если вы хотите просто отправить данные, там будет несколько вариантов. Но перенаправление пользователя - это совсем другая история.

Ваш лучший выбор может состоять в том, чтобы переосмыслить, почему вы хотите отправить пользователя на другой сайт.

2

Существует несколько путей для этого, в зависимости от ваших способностей и других бизнес-решений.

Моя рекомендация будет заключаться в использовании методов проверки AJAX для проверки ваших данных. Затем ваш сервер будет использоваться для проверки (и вы можете хранить соответствующие данные, такие как номер счета, информацию о клиенте и т. Д.). После того, как он будет проверяться, вы можете отправить страницу на данные сторонних сайтов. Обратите внимание, что, вероятно, вы столкнетесь с некоторыми проблемами, связанными с безопасностью, в зависимости от того, как настроены ваши сертификаты безопасности (для SSL).

Другой выбор (тот, который я бы счел более безопасным) был бы для вашего сайта, чтобы принять данные. Если это не подтверждается, запросите исправления от клиента (довольно простой материал Cake здесь). Если это подтвердится, вы можете использовать libcurl для отправки данных на ваш сторонний процессор, формируя каждую переменную должным образом в данных POST в вашем запросе.

Вы не сможете перенаправить клиента с помощью полезной нагрузки POST. Любой из двух вариантов выше поможет вам выполнить эту работу. Я лично использовал бы второй метод по следующим причинам: 1) более легкий аудит/отладка (он уже в вашей серверной среде и т. Д.); 2) более безопасный - вы можете заблокировать сервер лучше, чем клиентские системы; 3) кажется (клиент не видит соединений, идущих повсеместно и т. д.), и 4) вы можете изменять и отслеживать запросы по мере их прохождения через вашу систему (отвечать соответствующим образом клиентам, когда процессор сообщает об ошибке и т. д.),

В целом, это полезная вещь. Ваша сторонняя сторона предлагает API? Вы можете заглянуть в это.

0

Немного сложно использовать CURL для перенаправления, но это возможно, и не очень сложно. Это еще проще, если вы точно знаете, к какому URL перенаправляется, или если вы можете создать этот URL-адрес перенаправления. Вот пример локон вызова:

/usr/bin/curl -D "/tmp/0001" -H "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)" -H "Cookie: key=value; key2=value2;" -H "Content-length: 89" -d "this=is&the=post&data=true" http://url.com/application.php 

Пройдем через команду:

  1. ключ -D будет хранить любые возвращаемые заголовки в файл «/ TMP/0001». Отсюда вы можете разобрать любые переадресации, которые вам нужно найти. Просто запустите что-то вроде grep Location /tmp/0001, чтобы получить строку с заголовком перенаправления местоположения.То есть, если приложение перенаправляет. Здесь также вы разбираете файлы cookie.
  2. -H - это заголовок, который вы отправляете на сервер. Вы можете опубликовать заголовок Cookie: если на странице требуются файлы cookie. Вам также может потребоваться создать длину контента на основе данных, которые вы публикуете.
  3. -d - данные, которые вы публикуете в приложении. Это для фактического «POST».

Как только вы сделаете свой начальный пост и получите его, вы просто вызовите/usr/bin/curl снова со вторым URL-адресом. Просто создайте заголовки так, как он должен искать эту вторую страницу, а также любые файлы cookie, которые она отправляет вам, и она должна публиковаться так, как если бы это был браузер.

Результатом команды curl будет фактическая страница, которую вы можете зарегистрировать в какой-либо базе данных для целей проверки.

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

+0

У меня есть этот старый класс curl, который я построил некоторое время назад. Это должно дать вам хорошее начало. http://bin.cakephp.org/saved/50278 – Dooltaz

1

Если дополнительный шаг в порядке в вашем потоке приложения, вы можете легко сделать это так, нет Javascript не требуется:

  1. Пользователь заполняет форму, как обычно.
  2. Форма представляется в действие Cake как обычно и проверяется.
  3. Если проверка прошла успешно, вы отобразите промежуточную страницу со всеми значениями в скрытых или только для чтения элементах формы.
  4. Отправить отправляет скрытую форму на внешний сайт.

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

+0

блестящая идея, очень боковое мышление! – brndnmg

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