Как уже отмечалось в комментариях, это трудно отладить удаленно.Мне не хватает репутации, чтобы добавить комментарий, поэтому я предложу этот ответ.Это сложная проблема, поэтому я боюсь, что этот ответ, в лучшем случае, направит вас в правильном направлении, а не даст вам конкретный обзор.
Во-первых, вам было бы намного лучше использоватьPayPal PHP SDK, который на момент написания статьи можно найти на этой странице:
https://github.com/paypal/PayPal-PHP-SDK/
Если эта ссылка не работает, я уверен, что Google поможет.Это почти наверняка решит ваши проблемы.
Однако, чтобы ответить на ваш вопрос (или вопрос кого-либо еще, кто по какой-то причине не может использовать каноническую библиотеку) - как видно из ссылки выше,Paypal довольно строго относится к своей безопасности.Я сильно подозреваю, что ваш curl командной строки использует протоколы соединения SSL, отличные от вашего php-curl.Я был бы удивлен, если бы эта страница не ответила, чтобы решить вашу проблему:
https://github.com/paypal/tls-update#php
Я воспроизвел это здесь в случае разрыва ссылки:
Требования PHP
PHP использует системную библиотеку cURL, для которой требуется OpenSSL 1.0.1c или более поздняя версия.Вам может потребоваться обновить библиотеки SSL / TLS.
Guidelines
Найдите OpenSSL в следующих местах:
OpenSSL установлен в версии openssl вашей операционной системы.
Расширение OpenSSL установлено в вашем PHP.Найдите это в своем php.ini.
OpenSSL, используемый PHP_CURL - curl_version ().
Эти расширения OpenSSL могут отличаться, и вы обновляете каждое из них отдельно.
PayPalи другие PHP SDK используют то же расширение OpenSSL, которое PHP_CURL использует для создания HTTP-соединений.Расширение PHP_CURL OpenSSL должно поддерживать TLSv1.2.
Библиотека php_curl использует свою собственную версию библиотеки OpenSSL, которая отличается от версии PHP, то есть файла openssl.so в php.ini.
Чтобы проверить версии PHP и TLS
Чтобы найти информацию openssl_version для cURL, выполните:
php -r 'echo json_encode (curl_version (), JSON_PRETTY_PRINT);'
Возвращенная версия php_curl может отличаться от версии openssl, поскольку они являются разными компонентами.
При обновлении библиотек OpenSSL необходимо обновить версию php_curl OpenSSL, а не версию OS OpenSSL.
Загрузите cacert.pem и TlsCheck.php.
В оболочке вашей производственной системы выполните:
php -f TlsCheck.php
Вклуспех:
PayPal_Connection_OK
При ошибке:
информация curl_error
Примечания:
Убедитесь, что в тесте командной строки используется тот жеуегзИоны библиотек PHP и SSL / TLS, которые использует ваш веб-сервер.Если вы используете MAMP или XAMPP в качестве вашей разработки, PHP, который поставляется вместе с ними, использует более раннюю версию OpenSSL, которую вы не можете легко обновить.Дополнительные сведения об этой проблеме и временном обходном пути см. В разделе Неизвестная ошибка протокола SSL.
И последнее: если это является причиной вашей ошибки, я предполагаю, что ваш работающий сервер работает по адресухотя бы пару лет.Это совершенно не связано, и это не мое дело, но если это так, то вы, вероятно, имеете множество других уязвимостей.Я настоятельно рекомендую обновить или даже ускорить работу нового сервера (что может быть легче сказать, чем сделать ...)