Paypal Sandbox IPN — не получен ПОДТВЕРЖДЕННЫЙ ответ

Я ненавижу задавать вопрос, который, кажется, задавался много раз прежде, но, прочитав много постов, я не могу понять, почему я не получаю сообщение «ПРОВЕРЕНО» из песочницы PayPal, сейчас я в этом несколько часов сейчас, и я не буду дальше.

Я отправляю по электронной почте результат контрольного звонка в PayPal, ниже приведено то, что он говорит, но без «ПРОВЕРЕНО», я тестирую с использованием симулятора IPN https://developer.paypal.com/webapps/developer/applications/ipn_simulator

HTTP / 1.0 302 найдено
Место нахождения: https://www.sandbox.paypal.com
Сервер: BigIP
Подключение: Keep-Alive
Длина контента: 0

<?php
include("connect.php");

// Send an empty HTTP 200 OK response to acknowledge receipt of the notification
header('HTTP/1.1 200 OK');

// Assign payment notification values to local variables
$item_name        = $_POST['item_name'];
$item_number      = $_POST['item_number'];
$payment_status   = $_POST['payment_status'];
$payment_amount   = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$payer_email      = $_POST['payer_email'];

// Build the required acknowledgement message out of the notification just received
$req = 'cmd=_notify-validate';               // Add 'cmd=_notify-validate' to beginning of the acknowledgement

$msg = "";
foreach ($_POST as $key => $value) {         // Loop through the notification NV pairs
$value = urlencode(stripslashes($value));  // Encode these values
$req  .= "&$key=$value";                   // Add the NV pairs to the acknowledgement
}

$req = "";

// Set up the acknowledgement request headers
$header  = "POST /cgi-bin/webscr HTTP/1.1\r\n";                    // HTTP POST request
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";

// Open a socket for the acknowledgement request
$fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);

// Send the HTTP POST request back to PayPal for validation
fputs($fp, $header . $req);

$result = "";
while (!feof($fp))
{                     // While not EOF
$res=fgets($fp, 1024);               // Get the acknowledgement response
$result .= $res;

if (strcmp ($res, "VERIFIED") == 0){  // Response contains VERIFIED - process notification
//db code here
}
}

$to = '[email protected]';
$subject = 'Result';
$m = $result;
$headers = 'From: [email protected]'."\r\n".
'Reply-To: [email protected]'."\r\n".
'X-Mailer: PHP/'.phpversion();

mail($to, $subject, $m, $headers);

fclose($fp);  // Close the file
?>

0

Решение

Вам необходимо использовать безопасное соединение:

$fp = fsockopen ('https://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
0

Другие решения

В дополнение к ответу Мэтью мне пришлось добавить дополнительную строку, чтобы объявить HTTP-хост более подробным Вот:

$header .= "POST /cgi-bin/webscr HTTP/1.1\r\n";
$header .= "Host: www.sandbox.paypal.com\r\n";

Также я не смог заставить протокол https: // работать на моем сервере, но переключение на ssl: // мне помогло, подробно рассуждая Вот:

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

0

По вопросам рекламы [email protected]