Я получаю НЕВЕРНЫЕ возвраты IPN с использованием MAMP для разработки и тестирования с помощью песочницы PayPal.
Я просмотрел несколько десятков последних публикаций, касающихся этой проблемы, и не нашел ни одного успешного совета.
Моя установка MAMP прошла тест PayPal на соответствие TLS 1.2 и HTTP / 1.1. У меня есть пакет casert.pem от мая 2019 года в том же каталоге, что и прослушиватель.
Все переменные транзакции вкнопка «Оплатить сейчас» - это целые числа, money_format или urlencoded text.Сделки завершены.История IPN в изолированной программной среде была недоступна с тех пор, как я начал этот тест, поэтому код HTTP и другие данные недоступны.(Может ли кто-нибудь еще получить доступ к истории IPN в «песочнице»?)
Установка по сути такая же, как и в приложении, работающем на рабочем сайте с SSL.Итак, очевидные различия: MAMP и отсутствие SSL (URL-адреса notify_url и return являются http, а не https).Тем не менее, несколько месяцев назад я запустил подобный код в MAMP без проблем.
Я быстро получаю сообщение об ошибке, сохраняя файл слушателя открытым в моем браузере и обновляя его после того, как получаю правильные «возвращаемые» данные PDT,При работе код отправляет электронные письма об ошибках.
Мой код - без кода приложения, который запускается при подтверждении IPN - в значительной степени является копией примера кода.
<?php
$paypal_url = “'https://www.sandbox.paypal.com/cgi-bin/webscr';
$raw_post_data = file_get_contents('php://input');
$raw_post_array = explode('&', $raw_post_data);
$myPost = array();
foreach ($raw_post_array as $keyval) {
$keyval = explode ('=', $keyval);
if (count($keyval) == 2)
$myPost[$keyval[0]] = urldecode($keyval[1]);
}
// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';
if(function_exists('get_magic_quotes_gpc')) {
$get_magic_quotes_exists = true;
}
foreach ($myPost as $key => $value) {
if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) {
$value = urlencode(stripslashes($value));
} else {
$value = urlencode($value);
}
$req .= "&$key=$value";
}
$ch = curl_init($paypal_url);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));
if( !($res = curl_exec($ch)) ) {
echo "curl_error($ch)";
exit:
}
if (strcmp ($res, "VERIFIED") == 0) {
echo "VERIFIED";
} elseif (strcmp ($res, “INVALID”) == 0) {
echo “INVALID”;
}
else {
echo “NO IPN”;
}
?>