我目前有一个自定义购物车直接发送到2Checkout,需要使用相同的表格来支付不同的付款方式。
为此,我需要首先将表单提交到我自己的服务器,然后将服务器重定向到所选的支付网关或我网站上的一个页面,详细说明其他支付选项。
我如何在PHP中使用变量作为post方法重定向用户(而不是javascript)?
我当前的代码不起作用,因为用户没有离开页面,他们需要...
//$url = 'https://www.2checkout.com/checkout/spurchase';
$url = 'getpost.php';
//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,1);
curl_setopt($ch, CURLOPT_HEADER ,0); // DO NOT RETURN HTTP HEADERS
curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1); // RETURN THE CONTENTS OF THE CALL
//execute post
$result = curl_exec($ch);
//close connection
curl_close($ch);
答案 0 :(得分:1)
通常,当您必须对自己进行POST,然后再次从PHP POST到新位置时,是一个很好的指针,您需要返回并查看应用程序的结构。
更顺畅的解决方案可能是将付款流程分解为步骤。
第1步 - 信息
拥有您目前拥有的表格,并让它像您目前一样发布。
第2步 - 选择网关
将所有$ _POST变量存储在页面上的隐藏字段中,并具有用户可以选择的网关列表。当您点击其中一个时,可以将用户发送到确认页面。
第3步 - 确认页
此页面的主要目的是让用户查看他输入的数据,并确认他想要购买该商品。
此页面的第二个目的是获取您拥有的所有数据,并将它们放入隐藏的输入中(再次),但这次您知道将数据发送到何处,从而知道字段应该具有哪种格式/命名
这就是说,没有什么可以阻止你实际发布php的数据形式,但正如我所说,这是一个很好的指针,你的应用程序结构不再有意义。
答案 1 :(得分:0)
curl_setopt($ch,CURLOPT_POST, count($fields));
它接受布尔使用它像这样
curl_setopt($ch,CURLOPT_POST, TRUE);
这是一个完美的curl函数,可以处理每个帖子,获取http https登录和所有内容。
像curl_grab_page($url,$data)
一样使用url url和数据
function curl_grab_page($url,$data,$secure="false",$ref_url="",$login = "false",$proxy = "null",$proxystatus = "false")
{
if($login == 'true') {
$fp = fopen("cookie.txt", "w");
fclose($fp);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
if ($proxystatus == 'true') {
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
}
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
if($secure=='true')
{
curl_setopt($ch, CURLOPT_SSLVERSION,3);
}
curl_setopt( $ch, CURLOPT_HTTPHEADER, array( 'Expect:' ) );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $ref_url);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
ob_start();
return curl_exec ($ch); // execute the curl command
curl_getinfo($ch);
ob_end_clean();
curl_close ($ch);
unset($ch);
}