发布远程表单之前的cakephp数据验证

时间:2009-09-01 18:29:25

标签: php cakephp curl

这个真的是我的大脑: 我需要将非敏感数据发布到第三方支付网关。我想使用内置的cakephp表单验证工作正常。

我正在做的是将表单提交给本地操作,该操作会对数据进行分类并输出任何错误(如果有的话)。如果没有验证错误,我遇到的情况是尝试将该帖子数据重新提交到远程URL。问题是必须将浏览器重定向到带有发布数据的外部URL ...我想我在这里丢失了它我知道这可能是不可能的... 我的计划B只是使用javascript进行表单验证并直接发布到外部URL。我查看使用curl但我需要浏览器重定向/打开extrernal url。我有办法让curl在发布到网址时重定向浏览器吗?

4 个答案:

答案 0 :(得分:2)

根据您的能力和其他与业务相关的决定,您可以选择几条路线。

我的建议是使用AJAX验证方法来验证您的数据。然后,您的服务器将用于验证(您可以存储相关详细信息,如发票号,客户信息等)。一旦验证,您可以将页面提交表单数据到第三方站点。请注意,根据您的安全证书(用于SSL)的设置方式,您可能会遇到一些与安全相关的问题。

另一个选择(我认为更安全的选择)将是您的网站接受数据。如果它没有验证,请从客户端请求修复(这里非常基本的Cake的东西)。如果确实验证了,则可以使用libcurl将数据发送到第三方处理器,在请求的POST数据中正确形成每个变量。

您无法使用POST有效负载重定向客户端。上述两个选项中的任何一个都可以帮助您完成工作。我个人会使用第二种方法,原因如下:1)更容易审核/调试(它已经在您的服务器环境中等)2)更安全 - 您可以比客户端系统更好地锁定服务器,3)似乎对我来说更清洁(客户端看不到遍布各处的连接等)和4)您可以在通过系统时修改和跟踪请求(当处理器报告错误时适当地响应客户端等)

总而言之,这是一件可行的事情。您的第三方是否提供API?你也可以考虑一下。

答案 1 :(得分:1)

如果您的应用程序流程中有额外的步骤,您可以轻松地执行此操作,无需使用Javascript:

  1. 用户照常填写表格。
  2. 表格照常提交给Cake行动并经过验证。
  3. 如果验证成功,则会显示中间页,其中包含隐藏或只读表单元素中的所有值。
  4. 提交将隐藏的表单发送到外部站点。
  5. 对于用户,您可以显示该中间页面“请最后一次确认您的数据,单击”返回“以更改数据或点击”提交“将其提交到外部网站。”

答案 2 :(得分:0)

我所知道的唯一选择是使用JavaScript。

如果您只想发送数据,可能会有很多选项。但重定向用户是另一回事。

您最好的选择可能是重新考虑您希望将用户发送到其他网站的原因。

答案 3 :(得分:0)

使用CURL重定向有点复杂,但它可能,而且非常难。如果您具体了解要重定向到的URL,或者您是否可以构建该重定向URL,则会更容易。以下是curl调用示例:

/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”。
  4. 完成初始发布后,只需使用第二个网址再次调用/ usr / bin / curl即可。只需按照它应该查找第二页的方式构建标题,以及它发送给您的任何Cookie,它应该像浏览器一样发布。

    curl命令的结果将是实际页面,您可以登录到某个数据库进行验证。

    我希望这会有所帮助。