2010-04-07 95 views
5

即时通讯编写表单将数据发布到paypal,这工作正常,我创建带有隐藏字段的表单,然后提交一切提交到贝宝提交按钮。自动提交表单(cURL)

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

我不想为此使用JavaScript。

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

起初我只是退回一个字符串的结果,然后回显出来,我可以看到该帖子成功,然后我设置CURLOPT_FOLLOWLOCATION为1假设这会让浏览器去贝宝,但它没有,它似乎做的是从贝宝中抓取一些东西,并把它放在我的页面上。

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

用于curl的im代码位于下方,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

也许尝试卷曲用头声明

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

这可能因工作,如果浏览器需要通过任何状态(会话)信息,以贝宝结合起来。此会话信息收集在您的CURL调用中,但不幸的是,无法将其传递给浏览器。所以如果你需要保持这个状态,那么这是行不通的。

Curl在服务器端运行。它不会影响你的浏览器。 CURLOPT_FOLLOWLOCATION只是简单地指示CURL服从,例如贝宝发送一个头像上面提到的头。指示浏览器执行某些操作的唯一方法是使用上面的HTTP头或HTML响应中的某种元标记进行响应,例如

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

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

+0

谢谢,我希望我不会在贝宝的回调中做到这一点,我想设置一个购物车的状态,因为它发送到PayPal和一个时,它返回只是因此能准确跟踪进度,并帮助纠正任何错误,虐待尝试设置一些HTTP标题,并看到,但我可能只需要在回调中做。我只是假设自动提交表单并遵循该操作会更容易。 – cast01 2010-04-07 12:43:21

+0

我想你仍然可以为那些已启用javascript的用户执行这两种操作。对于那些没有启用JavaScript的用户,只能使用回调,但对于那些已启用javascript的用户(大多数),您可以在ajax调用中设置'going-to-paypal'标志,并将'set'设置为'complete'国旗在回调中。 – 2010-04-07 13:07:57

1

在收到表单并做你需要做的事情之后,你应该展示另一个只有一个按钮(隐藏字段中的其他数据)的表单,供用户点击并最终前往paypal。

+0

感谢您的回复,但是这将破坏我试图做的事情的目的。我想设置一个购物车,例如,当用户点击付费时,“去贝宝”。如果当他们点击付款时,我然后设置购物车状态并向他们展示他们必须提交的另一种表单,然后他们可以选择不提交,然后我的购物车状态将会错误。 – cast01 2010-04-07 12:44:25

+0

然后你需要一行javascript来自动提交表单。否则,您的服务器无法一次性重定向并单独向PayPal提交表单。 – zaf 2010-04-07 13:15:23