Автовозврат PayPal не может получить параметры
Документация PayPal заставляет мою голову кружиться!
Я скопировал образец откуда-то для настройки автоматического возврата после завершения оплаты, я создал страницу под названием success.php
чтобы получить возвращенные параметры, каким-то образом мне не удалось отобразить эти возвращенные параметры, может кто-нибудь эксперт в Paypal, пожалуйста, помогите проверить, что не так с кодом ниже?
Success.php
<?php
$req = 'cmd=_notify-synch';
$tx_token = $_GET['tx'];
$auth_token = "ZgTzjTg49XZGeD54WsS";
$req .= "&tx=".$tx_token."&at=".$auth_token;
foreach($_POST as $key => $value){
$value = urlencode(stripslashes($value));
$req .= '&'.$key.'='.$value;
}
$header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Host: http://www.sandbox.paypal.com\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: ".strlen($req)."\r\n\r\n";
// url for paypal sandbox
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
if(!$fp){
// HTTP ERROR
}else{
fputs($fp, $header . $req);
// read the body data
$res = '';
$headerdone = false;
while(!feof($fp)){
$line = fgets ($fp, 1024);
if(strcmp($line, '\r\n') == 0){
// read the header
$headerdone = true;
}else if($headerdone){
// header has been read. now read the contents
$res .= $line;
}
}
// parse the data
$lines = explode('\n', $res);
$keyarray = array();
if(strcmp($lines[0], 'SUCCESS') == 0){
for($i=1; $i<count($lines);$i++){
list($key,$val) = explode('=', $lines[$i]);
$keyarray[urldecode($key)] = urldecode($val);
}
// check the payment_status is Completed
// check that txn_id has not been previously processed
// check that receiver_email is your Primary PayPal email
// check that payment_amount/payment_currency are correct
// process payment
$firstname = $keyarray['first_name'];
$lastname = $keyarray['last_name'];
$itemname = $keyarray['item_name'];
$amount = $keyarray['payment_gross'];
echo '<p><h3>Thank you for your purchase!</h3></p>';
echo '<b>Payment Details</b><br>';
echo '<ul>';
echo '<li>Name: '.$firstname.' '.$lastname.'</li>';
echo '<li>Item: '.$itemname.'</li>';
echo '<li>Amount: '.$amount.'</li>';
echo '</ul>';
}else if(strcmp($lines[0], 'FAIL') == 0){
// log for manual investigation
}
}
fclose($fp);
?>
Your transaction has been completed, and a receipt for your purchase has been emailed to you.<br>
Это автоматически возвращаемый URL:
1 ответ
Я считаю, что использование песочницы не очень хорошо для финального тестирования, поэтому после того, как вы установили, что ваш код работает, лучше всего начать работу, а затем протестировать транзакции за 1 доллар.
Кроме того, вы не получите все детали заказа вашего клиента, поэтому лучше просто получить номер заказа и заполнить квитанцию из записи базы данных, которая была создана до отправки данных в Paypal.
Данные для получения номера вашего счета-фактуры будут найдены как запрос ("номер_позиции")