【问题标题】:How to grab POST params (using Rails) in original order in which they came?如何以原始顺序获取 POST 参数(使用 Rails)?
【发布时间】:2010-12-24 09:12:52
【问题描述】:

你好!我正在集成 Paypal 的 IPN 系统,他们的身份验证过程要求我的服务器响应 Paypal 请求,并使用 POST 到 Paypal 的参数与 Paypal 发送给我的参数完全相同(尽管带有附加字符串)。因此,我已将 params 哈希转换为字符串(格式正确)并将其发回,但看起来生成的字符串与原始 POST 参数的顺序不同(导致没有身份验证)。

任何人都知道我如何自己访问实际的 POST 参数(而不是 params 哈希),以便我可以复制它并将其发送回 Paypal?需要注意的是,我发送到 Paypal 的参数顺序需要与访问我的服务器的请求完全相同。

这有意义吗?有什么想法吗?提前致谢!

--贾里德

【问题讨论】:

  • 您是如何获得带有附加字符串的 POST 参数的?请发布您收到的完整参数(当然,敏感值是红色的)
  • 嘿 Zabba,Brett 在下面的回答解决了我的问题,但只是为了回答您的问题:我的问题是在 ActionController 将 POST 数据转换为参数之前访问实际 POST 数据本身的方法之后哈希。一旦我可以访问该数据,在我的控制器中,我将 POST 数据作为一个字符串(使用 request.raw_post)并附加一个 Paypal 需要验证的字符串,然后将所有这些在 POST URI 中发送到 Paypal。够迷惑吗?祝大家新年快乐。

标签: ruby-on-rails ruby authentication paypal-ipn


【解决方案1】:

如果我没记错的话,Paypal 的 IPN 可能有点挑剔(您真的必须准确地向他们提供他们发送的内容并附加您的消息,否则什么都不起作用)。

您可能应该在控制器中获取原始发布数据,向其附加一个字符串,并在将原始发布数据发回之前构造某种 HTTP 请求。记得上次我用paypal的IPN时就做了,效果还不错。

我会使用ActionController#raw_post 并在将请求发送回贝宝之前对其进行修改。另请记住,IPN 响应有超时(我认为),如果他们没有得到他们期望的结果,贝宝可能会向您发送多个具有完全相同数据的通知,因此您可能希望在之前立即向他们发送请求你的代码可以做任何其他事情。

【讨论】:

  • 布雷特,抱歉回复晚了!你是我的救星——request.raw_post 就是门票。附加字符串,立即发送回来,瞧。非常感谢。
【解决方案2】:

您不能使用 params 哈希,排序会丢失。使用原始请求字符串,例如request.request_urirequest.query_string

【讨论】:

  • 很抱歉回复晚了--假期妨碍了事情! Fullware,谢谢回复,只是想说我正在寻找 POST 数据,而 URI 中不存在该数据。我相信你知道这一点,只是想向看到这篇文章的人重申一下。
猜你喜欢
  • 1970-01-01
  • 2016-10-16
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
  • 2018-03-20
  • 2019-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多