Có cùng vấn đề.
<?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;
phản ứng:
bool(false)
và không có lỗi bản ghi!
Vì vậy, tôi đã thực hiện kịch bản nhỏ:
<?php
error_reporting(E_ALL);
var_dump(file_get_contents('https://api-3t.sandbox.paypal.com/nvp'));
và đây là những gì tôi đã có trong nhật ký:
[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
Giải pháp của tôi là:
- Cập nhật (1.0 trở lên) phiên bản OpenSSL.
- biên dịch lại Curl
- biên dịch PHP với CURL mới
- Hãy chắc chắn rằng Curl SSL Phiên bản OpenSSL/(1.0+)
SSL Version OpenSSL/1.0.1e - Tốt
SSL Phiên bản NSS/3.13.6.0 - Bad
Tôi đang chạy trên CentOS.Dưới đây là những gì tôi đã làm để cập nhật:
Cập nhật OpenSSL:
phiên bản openssl
nếu dưới 1,0 chạy: yum update openssl chắc chắn rằng nó thực sự được cập nhật
- Cài đặt lại PHP. Vì vậy, hãy lưu tập tin php.ini
Lưu danh sách tất cả các mô-đun PHP được cài đặt qua:
Danh sách yum được cài đặt | grep php
lưu đầu ra!
- yum erase php
- yum xóa php-curl
- yum install php
yum install php-curl
restart apache hoặc fpm và nếu bạn may mắn, bạn sẽ có được những điều làm việc
- khôi phục cấu hình php.ini và mô-đun PHP: yum install php-pgsql; yum cài đặt php-gd; vv
Tuy nhiên nếu gói lưu trữ của bạn đã lỗi thời hoặc bạn có thư viện curl được cài đặt với các ràng buộc SSL NSS, bạn có thể tải xuống và biên dịch thư viện curl theo cách thủ công. Tôi đã sử dụng công cụ phpize đi kèm với gói php-devel. Vì vậy, vấn đề của tôi Tôi đã có:
cURL Information 7.19.7
SSL Version NSS/3.13.6.0
và đây là cách tôi đã thay đổi nó để:
cURL Information 7.22.0
SSL Version OpenSSL/1.0.1e
Cập nhật OpenSSL:
phiên bản openssl
nếu chạy dưới 1.0: cập nhật y openssl đảm bảo rằng nó thực sự được cập nhật
- Cài đặt lại PHP. Vì vậy, hãy lưu tập tin php.ini
Lưu danh sách tất cả các mô-đun PHP được cài đặt qua:
Danh sách yum được cài đặt | grep php
lưu đầu ra!
- yum erase php
- yum xóa php-curl
- yum install php-devel
- in PHP phiên bản với rpm -qa --queryformat '% { phiên bản}' php và tìm nơi bạn có thể tải về chính xác cùng một nguồn PHP
- Tiếp theo kịch bản bash sẽ cài đặt thư viện curl cụ thể:
<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 hoặc fpm và nếu bạn may mắn, bạn sẽ có được những điều làm việc
- khôi phục configs php.ini và các module PHP: yum install php-pgsql ; yum cài đặt php-gd; vv
Giải pháp duy nhất là phải nâng cấp lên một phiên bản mới hơn CURL bao gồm OpenSSL 1.0 trở lên. Cảm ơn vì lời khuyên :) – inf3ction