PHP: POST запрос не получает ответа от Paypal

233
08 сентября 2018, 16:30

У меня есть код, который выполняет POST запрос и успешно получает ответ от песочницы Paypal.

Как только я меню адрес на живой адрес Paypal запрос начинает выполняться бесконечно и в итоге ответ не приходит.

Что я делаю неправильно?

        // Init cURL
        $request = curl_init();
        // Set request options
        curl_setopt_array($request, array
        (
            CURLOPT_URL => 'https://www.paypal.com/cgi-bin/webscr',
            CURLOPT_POST => TRUE,
            CURLOPT_POSTFIELDS => http_build_query(array
            (
                'cmd' => '_notify-synch',
                'tx' => [$GET['tx']],
                'at' => $this->token,
            )),
            CURLOPT_RETURNTRANSFER => TRUE,
            CURLOPT_HEADER => FALSE,
            // CURLOPT_SSL_VERIFYPEER => TRUE,
            // CURLOPT_CAINFO => 'cacert.pem',
        ));
        // Execute request and get response and status code
        $response = curl_exec($request);
        $status   = curl_getinfo($request, CURLINFO_HTTP_CODE);
        // Close connection
        curl_close($request);
        var_dump($response);
Answer 1

Попробуйте добавить такие параметры

//curl_setopt($ch, CURLOPT_SSLCERT, $sslcert);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);  //0
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);  //0
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));

Ваш хост работает через https?

Answer 2

В итоге заработал вот такой код:

        if (isset($GET['tx'])) {
        $query_data = [
            'cmd' => '_notify-synch',
            'tx' => $GET['tx'],
            'at' => $this->token
        ];
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_USERAGENT, 'PayPal');
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($query_data));
        curl_setopt($ch, CURLOPT_URL, $this->url);
        $response = curl_exec($ch);
        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
READ ALSO
Рефакторинг кода и исправление багов. PHP

Рефакторинг кода и исправление багов. PHP

Необходимо провести рефакторинг, исправить баги, указать уязвимиости и продокументировать в стиле PHPDoc

218
ffmpeg: Ошибка при сохранении или конвертации видео в формат .mp4

ffmpeg: Ошибка при сохранении или конвертации видео в формат .mp4

На моем хостинге - ffmpeg установлен как модуль phpУ меня возникают ошибки при конвертации видео в формат mp4

219
Помогите composer.lock мешает делать update плагина

Помогите composer.lock мешает делать update плагина

Использую Laravel 56 нужно сделать update плагина carbon

245
Отправка формы на почту AJAX + JQuery + PHP

Отправка формы на почту AJAX + JQuery + PHP

Нужно отправлять с лендинга на почту форму обратной связи, но что-то пошло не так и форма не обрабатывается php, в консоли получаю "POST http://localhost:3000/savephp...

232