Имитировать PayPal _xclick с помощью PHP с fsockopen

#php #paypal #fsockopen

#php #paypal #fsockopen

Вопрос:

Я пытаюсь заставить PHP-скрипт отправлять пользователя на страницу PayPal, которая была предварительно настроена. По сути, я пытаюсь избавиться от промежуточной страницы: «Пожалуйста, подождите, пока я отправлю вас в PayPal, бла».

В настоящее время происходит следующее: 1. Пользователь заполняет форму, которая отправляется на мой 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 ('amp;', $post_items);  

// Add command string
$post_string = '?cmd=_xclickamp;' . $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.1rn");  
fputs($fp, "Host: www.paypal.comrn");  
fputs($fp, "Content-Type: application/x-www-form-urlencodedrn");  
fputs($fp, "Content-Length: ".strlen($post_string)."rn"); 
fputs($fp, "Connection: closern");
fputs($fp, "rn");  
fputs($fp, $post_string);   

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

Ответ №1:

Ответ заключается в том, что, по крайней мере, с PayPal, это невозможно сделать. Если я делаю СООБЩЕНИЕ, за которым следует GET, URL-адрес браузера не изменяется, и это нарушает стандарты безопасности. Короче говоря, браузер (пользователь) должен быть вовлечен в публикацию, чтобы поддерживать все корректные отображения. PayPal предлагает API, который может делать все за кулисами и не требует HTML-ФОРМ, но это недоступно с _xclick.

Таким образом, вам нужно использовать JavaScript и создать ФОРМУ автоматической отправки. Что-то вроде:

 <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>
  

Комментарии:

1. Чтобы добавить; это не просто PayPal: вы просто не можете отправить сообщение на стороне сервера куда-нибудь, а затем перенаправить покупателя куда-нибудь, поскольку покупатель не будет привязан к данным POST, которые вы отправили ранее. Экспресс-проверка, как вы упомянули, лучшее решение здесь.