Тестирование IPN в песочнице с MAMP - PullRequest
1 голос
/ 07 июня 2019

Я получаю НЕВЕРНЫЕ возвраты 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”;
    }
    ?>  
...