自动提交表单(cURL)

时间:2010-04-07 11:56:48

标签: php forms curl paypal

我正在写一个表格将数据发布到paypal,这很好用,我创建了带有隐藏字段的表单,然后有一个提交按钮,将所有内容提交给paypal。

但是,当用户单击该按钮时,我想要做的更多,例如在数据库中更改其购物车状态。所以,我希望能够在他们点击提交时执行一些代码,然后将数据发布到paypal。

我不想为此使用javascript。

我的方法目前是使用cURL,表单回发到当前页面,然后检查$ _POST数据,执行其他命令,如更新购物车的状态,然后创建curl命令,并发布表格数据到贝宝。现在,它成功发布,但浏览器不会发送到PayPal。

起初我只是在一个字符串中重新结果,然后回显它,我可以看到帖子成功了,然后我将CURLOPT_FOLLOWLOCATION设置为1,假设这会让浏览器关闭到paypal,但它没有,是什么它似乎做的是从paypal中抓取一些东西并将它放在我的页面上。

使用cURL是正确的吗?如果是这样,我该如何解决这个问题呢?我想远离javascript,因为只有启用了javascript的用户才能更新购物车。

我正在使用curl的代码如下,post_data是我创建的数组,然后将键值对读入post_string。

//Set cURL Options
curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl_connection, CURLOPT_USERAGENT,
  "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, false);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl_connection, CURLOPT_MAXREDIRS, 20);

//Set Data to be Posted
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string);

//Execute Request
curl_exec($curl_connection);

2 个答案:

答案 0 :(得分:2)

也许尝试将CURL与标题声明

结合起来
<?php
header ("Location: https://www.paypal.com/"); 

如果浏览器需要将任何状态(会话)信息传递给paypal,这可能会有效。此会话信息收集在您的CURL调用中,但遗憾的是无法将其传递给浏览器。因此,如果您需要维持状态,那么这将无效。

Curl在服务器端运行。它不会影响您的浏览器。 CURLOPT_FOLLOWLOCATION只是指示CURL在例如paypal发送一个类似上面提到的标题时服从。指示浏览器执行某项操作的唯一方法是使用上面的HTTP标头或在HTML响应中使用某种元标记进行响应,例如:

<META HTTP-EQUIV="refresh" CONTENT="10;URL=https://www.paypal.com/">

作为替代方案,paypal不提供重定向功能,当事务完成后,重定向将重定向回您的服务器。如果是这样,那么只需在此回调期间更改卡状态并跳过整个卷曲过程?

答案 1 :(得分:1)

收到表格并做你需要做的事情之后,你应该提供另一个表格,只有一个按钮(隐藏字段中的所有其他数据)供用户点击,最后转到paypal。