Had the same problem.
<?php error_reporting(E_ALL); $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_VERBOSE, 1); curl_setopt($curl, CURLOPT_HEADER, 1); curl_setopt($curl, CURLOPT_URL, 'https://api-3t.sandbox.paypal.com/nvp'); $response = curl_exec($curl); var_dump($response); exit;
Answer:
bool(false)
and no error logs!
So, I made a small script:
<?php error_reporting(E_ALL); var_dump(file_get_contents('https://api-3t.sandbox.paypal.com/nvp'));
and here’s what I have in the magazines:
[12-Feb-2016 15:56:19] PHP Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure in /xxx/yyy.php on line 3 [12-Feb-2016 15:56:19] PHP Warning: file_get_contents(): Failed to enable crypto in /xxx/yyy.php on line 3 [12-Feb-2016 15:56:19] PHP Warning: file_get_contents(https://api-3t.sandbox.paypal.com/nvp): failed to open stream: operation failed in /xxx/yyy.php on line 3
My solution was:
- Update (1.0+) version of OpenSSL.
- Compile Curl
- Recompile PHP with the new CURL
- Make sure Curl SSL version is OpenSSL / (1.0 +)
SSL version of OpenSSL / 1.0.1e - Good
SSL Version NSS / 3.13.6.0 - Bad
I work on CentOS. Here is what I did to update:
Update OpenSSL:
openssl version
if below 1.0 run: yum update openssl make sure it is really updated
- Reinstall PHP. Therefore save the php.ini file
Keep a list of all PHP modules installed via:
yum list installed | grep php
save the result!
- yum erase php
- yum erase php-curl
- yum install php
yum install php-curl
restart apache or fpm and if you are lucky you will get work
- restore php.ini configurations and PHP modules: yum install php-pgsql; yum install php-gd; etc.
However, if your package repositories are outdated or you have curl library with SSL NSS bindings installed, you can download and compile curl library manually. I used the phpize tool bundled with the php-devel package. So my problem is:
cURL Information 7.19.7 SSL Version NSS/3.13.6.0
and here is how I changed it to:
cURL Information 7.22.0 SSL Version OpenSSL/1.0.1e
Update OpenSSL:
openssl version
if below 1.0 run: yum update openssl make sure it is really updated
- Reinstall PHP. Therefore save the php.ini file
Keep a list of all PHP modules installed via:
yum list installed | grep php
save the result!
- yum erase php
- yum erase php-curl
- yum install php-devel
- print the PHP version with rpm -qa --queryformat '% {version}' php and find where you can download the exact PHP sources
- After the bash script, a special curl library will be installed:
<pre> #!/bin/bash PHP_VERSION=$(rpm -qa --queryformat '%{version}' php) CURL_VERSION=7.22.0 #echo $CURL_VERSION #exit #wget --no-check-certificate http://mirror.cogentco.com/pub/php/php-${PHP_VERSION}.tar.gz -O /tmp/php-${PHP_VERSION}.tar.gz wget --no-check-certificate http://museum.php.net/php5/php-${PHP_VERSION}.tar.gz -O /tmp/php-${PHP_VERSION}.tar.gz wget --no-check-certificate http://curl.haxx.se/download/curl-${CURL_VERSION}.tar.gz -O /tmp/curl-${CURL_VERSION}.tar.gz cd /tmp; tar xzf php-${PHP_VERSION}.tar.gz cd /tmp; tar xzf curl-${CURL_VERSION}.tar.gz cd curl-${CURL_VERSION} ./configure make make install cd /tmp; rm -rf curl-${CURL_VERSION}* sleep 2 cd /tmp/php-${PHP_VERSION}/ext/curl/ phpize ./configure make make install cd /tmp; rm -rf php-${PHP_VERSION}* </pre>
- restart apache or fpm and if you are lucky you will get the job.
- restore php.ini configurations and PHP modules: yum install php-pgsql; yum install php-gd; etc.