使用PHP和fsockopen模拟PayPal _xclick

时间:2011-10-06 03:57:43

标签: php paypal fsockopen

我正在尝试让PHP脚本将用户发送到已预先配置的PayPal页面。基本上,我正试图摆脱中间页面,“请等我送你到PayPal,等等。”

Currenly这是正在发生的事情: 1.用户填写一个表格,该表格将POST到我的process.php页面 2.我希望process.php构建_xclick字符串并直接发布到PayPal并在浏览器中显示(重定向?)页面。

这就是我目前正在做的事情,但是用户的网络浏览器没有被重定向。我知道我可以回应一些HTML并让它工作,但我认为有一种方法可以获取数据,但我想让浏览器采取更多措施?

//create array of requuired minimal data for a PayPal button
$post_data['amount']        = '123';
$post_data['item_name']     = 'widget';
$post_data['item_number']   = '123';
$post_data['quantity']  = '123';
$post_data['currency_code'] = 'USD';
$post_data['business']  = 'widgetsRUS@na.com';
$post_data['no_shipping']   = '2';

//traverse array and prepare data for posting (key1=value1)  
foreach ( $post_data as $key => $value)
{  
    $post_items[] = $key . '=' . urlencode(stripslashes($value)); 
}  

//create the final string to be posted using implode()  
$post_string = implode ('&', $post_items);  

// Add command string
$post_string = '?cmd=_xclick&' . $post_string;

// Connect to PAYPAL
$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);

//sending the data  
fputs($fp, "POST /cgi-bin/webscr HTTP/1.1\r\n");  
fputs($fp, "Host: www.paypal.com\r\n");  
fputs($fp, "Content-Type: application/x-www-form-urlencoded\r\n");  
fputs($fp, "Content-Length: ".strlen($post_string)."\r\n"); 
fputs($fp, "Connection: close\r\n");
fputs($fp, "\r\n");  
fputs($fp, $post_string);   

while (!feof($fp))
{
    echo fgets($fp, 1024);
}
fclose($fp);

1 个答案:

答案 0 :(得分:1)

答案是,至少使用PayPal,这是不可能做到的。如果我执行POST后跟GET,则浏览器URL不会更改,这会破坏安全标准。简而言之,浏览器(用户)必须参与POST以保持所有正确的外观。 PayPal提供的API可以在幕后执行所有操作,而不需要HTML FORMS,但 _xclick 不提供此功能。

因此,您需要使用JavaScript并自动提交FORM。类似的东西:

<html>
<head>
<title>Proceeding to credit card site ...</title>
<body onload="document.paypal_form.submit();">
<h1>Proceeding to credit card site ...</<h1>
<form method="post" name="paypal_form" action="<?php echo $post_data['url']?>">
 <input type="hidden" name="cmd" value="<?php echo $post_data['cmd']?>" />
 <input type="hidden" name="business" value="<?php echo $post_data['business']?>" />
 <input type="hidden" name="currency_code" value="<?php echo $post_data['currency_code']?>" />
 <input type="hidden" name="amount" value="<?php echo $post_data['amount']?>" />
 <input type="hidden" name="item_name" value="<?php echo $post_data['item_name']?>" />
</form>
</body>   
</html>