Размещение данных между приложением Rails - PullRequest
1 голос
/ 06 июля 2010

Хорошо, вот общая картина, у меня есть 2 сайта, назовите их SiteA и SiteB.SiteA своего рода служит главным сайтом, когда речь идет о транзакциях электронной торговли (у нас только одна учетная запись в нашей компании, занимающейся обработкой кредитных карт, поэтому успешные / отклоненные транзакции перенаправляются на SiteA)

Таким образом, пользователь входит в SiteBпроходит процесс покупки и отправляет форму с данными кредитной карты, которая публикуется в компании, проверяющей кредитную карту, после успешной транзакции SiteA получает всю необходимую информацию (методом POST), отправленную компанией, обрабатывающей кредитную карту.На этом этапе код на SiteA, основанный на параметре, определяет, с какого сайта была произведена транзакция, и снова ПОСТАВЛЯЕТ данные на этот сайт, используя этот код

Net::HTTP.post_form(URI.parse("http://#{params[:site_name]}/success"), params)   

success, определяется в rout.rb как

map.connect 'success', :controller => "some_controller", :action => "success" 

Проблема, однако, заключается в том, что, хотя пользователь вошел в систему на SiteB, когда SiteB получает данные, отправленные SiteA (который явно ничего не знает о session_id SiteB), дальнейшая обработка данных на SiteB завершается неудачно.из-за отсутствия информации о сеансе.

На обоих сайтах выполняется абсолютно идентичный код.

Мой вопрос, есть ли способ, при котором данные сеанса из SiteB могут запрашиваться и добавляться к данным Post, когда SiteA отправляет данные.

Большое спасибо

1 Ответ

1 голос
/ 06 июля 2010

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

Если SiteB должен переслать в SiteA для некоторой обработки, и SiteA необходимо вернуть посетителя обратно в SiteB, вам нужно создать частный API для обоих приложений. Обычно вы можете обойтись созданием простого интерфейса REST и выгрузкой всего, что вам нужно, в простой сериализованный формат, такой как YAML или JSON, в зависимости от ваших предпочтений.

Например, процедура может быть примерно такой:

  • Посетитель перенаправляется с сайта B на сайт A с помощью перенаправления HTTP.
  • Посетитель продолжает транзакцию на SiteA, и в базе данных создается запись с уникальным идентификатором, которая отражает результат этой транзакции.
  • SiteA перенаправляет посетителя обратно на SiteB с этим уникальным идентификатором в качестве параметра.
  • SiteB запрашивает у SiteA сведения об этой транзакции.
  • SiteB обновляет свои внутренние записи по мере необходимости и представляет результат транзакции посетителю.

Чтобы быть в безопасности, вы, вероятно, должны генерировать случайные уникальные идентификаторы, так как что-то вроде UUID не позволит людям проверять произвольные порядки, угадывая числа. Вам также следует убедиться, что вызов SiteA для получения сведений о транзакции имеет некоторый контроль доступа, даже если это только секретный токен или фраза-пароль. Более надежная реализация, вероятно, будет использовать сертификаты TLS и SSL для проверки происхождения любого запроса.

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