Имитация PayPal _xclick с использованием PHP с помощью fsockopen - PullRequest
0 голосов
/ 06 октября 2011

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

В настоящее время происходит то, что происходит: 1. Пользователь заполняет форму, которая получает POST'd на моей странице 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 Ответ

1 голос
/ 07 октября 2011

Ответ таков: по крайней мере с PayPal это сделать невозможно. Если я выполняю POST с последующим GET, то URL-адрес браузера не изменяется, и это нарушает стандарты безопасности. Короче говоря, браузер (пользователь) должен быть вовлечен в POST, чтобы поддерживать все правильные появления. PayPal предлагает API, который может делать все за кадром и не требует HTML FORMS, но он недоступен с _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>
...