代码之家  ›  专栏  ›  技术社区  ›  Anand Shah

在Rails应用程序之间发布数据

  •  1
  • Anand Shah  · 技术社区  · 15 年前

    好的,这里是大图,我有两个站点,分别称为SiteA和SiteB。当涉及电子商务交易时,SiteA有点像主站点(我们在信用卡处理公司只有一个帐户,因此成功/拒绝的交易将被重定向到SiteA)

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

    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的会话ID)时,由于缺少会话信息,SiteB上的数据进一步处理失败。

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

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

    多谢

    1 回复  |  直到 15 年前
        1
  •  1
  •   tadman    15 年前

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

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

    例如,程序大致如下:

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

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