在Rails app之间发布数据

时间:2010-07-06 15:03:20

标签: ruby-on-rails

好的,所以这是大局,我有2个站点,称他们为SiteA和SiteB。 SiteA在电子商务交易中作为主站点(我们的信用卡处理公司只有一个帐户,因此成功/拒绝的交易被重定向到SiteA)

因此,用户登录到SiteB,完成购买流程并提交带有信用卡详细信息的表单,该信息卡详细信息将发布到信用卡验证公司,成功交易后SiteA会收到所有必要信息(以POST方式) )由信用卡处理公司发送。此时,SiteA上的代码基于param确定事务源自哪个站点,并使用此代码再次将数据发送到该站点

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

success在routes.rb中定义为

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

然而问题是,虽然用户登录SiteB,但是当SiteB收到SiteA发布的数据时(显然对SiteB的session_id一无所知),SiteB上的数据的进一步处理由于缺少会议信息。

两个站点都运行完全相同的代码。

我的问题是,有哪种方法可以在SiteA发送数据时请求SiteB的会话数据并将其附加到Post数据。

非常感谢

1 个答案:

答案 0 :(得分:1)

如果这两个站点在同一台物理计算机上运行,​​您可以使用Memcache之类的东西作为在两个不相关的站点之间交换状态信息的简单方法。如果他们在不同的机器上,使用POST可能是您唯一合理的选择,尽管最终会更难以实施。

如果SiteB必须转发到SiteA进行某些处理,并且SiteA需要将访问者返回给SiteB,则需要在两个应用程序上创建私有API。您通常可以创建一个简单的REST接口,并根据您的偏好以简单的序列化格式(如YAML或JSON)转储您需要的任何内容。

例如,程序可能大致如下:

  • 访客通过HTTP重定向从SiteB转发到SiteA。
  • 访客在SiteA上进行交易,并在数据库中创建一个具有唯一标识符的记录,以反映此交易的结果。
  • SiteA使用此唯一标识符作为参数将访问者转发回SiteB。
  • SiteB向SiteA发出请求以检索此交易的详细信息。
  • SiteB根据需要更新其内部记录,并向访问者显示交易结果。

为了安全起见,您应该生成随机唯一标识符,因为类似UUID的内容会阻止人们通过猜测数字来检查任意订单。您还应该确保调用SiteA以检索事务详细信息具有某种访问控制,即使它只是一个秘密令牌或密码。更强大的实现可能会使用TLS和SSL证书来验证任何请求的来源。