#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, которые вы отправили ранее. Экспресс-проверка, как вы упомянули, лучшее решение здесь.