Я пытаюсь использовать Stripe на своем сайте, но получаю следующую ошибку:
Fatal error:
Uncaught Stripe\Error\ApiConnection: Unexpected error communicating with Stripe. If this problem persists, let us know at support@stripe.com.
(Network error [errno 77]: error setting certificate verify locations: CAfile: CApath: /etc/ssl/certs) in /var/www/html/assets/vendor/stripe/lib/HttpClient/CurlClient.php:284
Stack trace:
#0 /var/www/html/assets/vendor/stripe/lib/HttpClient/CurlClient.php(241): Stripe\HttpClient\CurlClient->handleCurlError('https://api.str...', 77, 'error setting c...', 0)
#1 /var/www/html/assets/vendor/stripe/lib/HttpClient/CurlClient.php(203): Stripe\HttpClient\CurlClient->executeRequestWithRetries(Array, 'https://api.str...')
#2 /var/www/html/assets/vendor/stripe/lib/ApiRequestor.php(364): Stripe\HttpClient\CurlClient->request('post', 'https://api.str...', Array, Array, false)
#3 /var/www/html/assets/vendor/stripe/lib/ApiRequestor.php(96): Stripe\ApiRequestor->_requestRaw('post', '/v1/charges', Array, Array)
#4 /var/www/html/assets/vendor/stripe/lib/ApiOperations/Request.php(5 in /var/www/html/assets/vendor/stripe/lib/HttpClient/CurlClient.php on line 284
Недавно я создал новую виртуальную машину в Google Compute Engine, используя развертывание LAMP одним щелчком.Я также использовал Lets Encrypt, чтобы разрешить https.Кроме того, я скачал последний файл cacert.pem и поместил его в папку /etc/ssl/certs
.
Папка certs имеет следующие разрешения:
drwxr-xr-x 2 root root 20480 Apr 5 14:31 certs
Файл имеет следующие разрешения:
-rw-r--r-- 1 root root 219596 Apr 5 14:29 cacert.pem
Я также отредактировал файл php.ini
, чтобы указать curl.cainfo
и openssl.cafile
на файл pem, и перезапустил Apache.
Просматривая сайт Stripe, он упомянулчто TLS 1.2 теперь требуется.Я подтвердил, что мой сайт использует его.Но некоторый пример тестового кода на сайте Stripe, похоже, указывает на то, что он не видит TLS 1.2.
Согласно ssllabs.com, мой сайт распознается как имеющий протокол TLS 1.2.
Пример Stripeкод, который я добавил для проверки на своем сайте:
\Stripe\Stripe::setApiKey("sk_test_BQokikJOvBiI2HlWgH4olfQ2");
try {
\Stripe\Charge::all();
echo "TLS 1.2 supported, no action required.";
} catch (\Stripe\Error\ApiConnection $e) {
echo "TLS 1.2 is not supported. You will need to upgrade your integration.";
}
Я также добавил следующее для дополнительной информации о версии:
echo 'PHP version: ' . phpversion() . PHP_EOL . '<br/>';
echo 'cURL version: ' . curl_version()['version'] . PHP_EOL . '<br/>';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.howsmyssl.com/a/check");
curl_setopt($ch, CURLOPT_SSLVERSION, 6);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo 'TLS version: ' . json_decode($response)->tls_version . PHP_EOL;
Результат при запуске:
============= Stripe Suggested Test Code ============
TLS 1.2 is not supported. You will need to upgrade your integration.
================================================
==================== Version Code ===================
PHP version: 7.0.33-0+deb9u3
cURL version: 7.52.1
TLS version: TLS 1.2
================================================
На данный момент у меня заканчиваются идеи.Для полного раскрытия я делаю большую часть своего обучения через поиски в Google и на этом сайте, поэтому любая помощь на уровне хобби-программиста будет принята.