Stripe - ошибка PHP - Stripe больше не поддерживает запросы API, выполняемые с помощью TLS 1.0


Можно ли запускать тесты stripe без HTTPS-страницы? Кажется, я получаю следующую ошибку на своем локальном хостинге. Есть ли способ это исправить?

Это происходит после отправки платежной информации.

Неустранимая ошибка: Неперехваченное исключение "Полоса\Ошибка\Проверка подлинности" с сообщением "Полоса больше не поддерживает запросы API, выполняемые с помощью TLS 1.0. Пожалуйста, инициируйте HTTPS-соединения с TLS 1.2 или более поздней версии. Вы можете узнать больше об этом по адресу https://stripe.com/blog/upgrading-tls .'в /Приложения/MAMP/htdocs/композитор/поставщик/полоса/полоса-php/lib/apirequestor.php:110 из запроса API 'req_9awhiplsriwhrz' Трассировка стека: #0 /Applications/MAMP/htdocs/composer/vendor/stripe/stripe-php/lib/ApiRequestor.php (227): Stripe\apirequestor->Ошибка обработки ('{\n "ошибка": {\n...', 401, Массив, Массив) # 1 /Applications/MAMP/htdocs/composer/vendor/stripe/stripe-php/lib/ApiRequestor.php (65): Полоса\apirequestor->_interpretresponse('{\n "ошибка":{\n...', 401, Массив) # 2 /Applications/MAMP/htdocs/composer/vendor/stripe/stripe-php/lib/ApiResource.php (120): Stripe\apirequestor->запрос ("сообщение", "/v1/клиенты", массив, массив) #3 /Applications/MAMP/htdocs/composer/vendor/stripe/stripe-php/lib/ApiResource.php (160): Stripe\ApiResource::_staticrequest('post', '/v1/пользовательский в /Applications/MAMP/htdocs/composer/vendor/stripe/stripe-php/lib/ApiRequestor.php на линии 110

Author: StackUnderFlow, 2016-09-11

3 answers

Проблема здесь не в использовании страницы HTTPS. Это связь TLS между вашим сервером (в данном случае локальным компьютером) и Stripe. Несколько месяцев назад Stripe опубликовала сообщение в блоге, в котором объяснялось, что по соображениям безопасности они будут осуждать некоторые старые протоколы, которые считаются небезопасными. Вы можете прочитать больше об этом здесь:

Https://stripe.com/blog/upgrading-tls

Прямо сейчас, если вы столкнулись с этой проблемой, ваш сервер или компьютер по умолчанию использует TLS 1.0 вместо требуемого TLS 1.2.

Обычно это происходит из-за устаревшего программного обеспечения или проблемы с конфигурацией на вашем компьютере. Я бы рекомендовал вам ознакомиться со статьями поддержки Stripe, в которых подробно описывается, как протестировать ваш код, а также пути обновления (в том числе немного подробностей, специфичных для Mac OS и MAMP - по сути, вам нужно будет запускать приложение с системным php, а не с версией, поставляемой с MAMP):

Https://support.stripe.com/questions/how-do-i-upgrade-my-stripe-integration-from-tls-1-0-to-tls-1-2#php

Более того, если вы обнаружите, что TLS 1.2 не поддерживается вашей системой, вам следует обновить свой сервер для надлежащей поддержки TLS 1.2. Для этого может потребоваться обновление операционной системы, curl, openssl и/или языковых библиотек.

Https://support.stripe.com/questions/how-do-i-upgrade-my-openssl-to-support-tls-1-2

Этот тестовый сценарий может быть полезно для определения версий библиотек, используемых вашей установкой PHP: https://gist.github.com/olivierbellone/9f93efe9bd68de33e9b3a3afbd3835cf

Если вы используете 3.x версию библиотеки PHP, вы можете рассмотреть возможность обновления до ветки 4.x. Хотя обновление системных библиотек является лучшим решением здесь, ветвь 4.x позволяет передавать флаг CURLOPT_SSLVERSION, который может позволить некоторым версиям PHP/curl успешно взаимодействовать по протоколу TLS 1.2.

Https://github.com/stripe/stripe-php#ssl--tls-compatibility-issues

 6
Author: duck, 2017-01-09 19:03:56

Если вы используете Anaconda, следующий обходной путь сработал для меня на моем компьютере MAC. Сначала установите openssl с помощью conda

conda install openssl

Затем создайте новую виртуальную среду, используя установку python, управляемую Anaconda. Установите свои требования в новой виртуальной среде, и это должно решить проблему TLS. Используйте следующий код для тестирования - [источник - https://support.stripe.com/questions/how-do-i-upgrade-my-stripe-integration-from-tls-1-0-to-tls-1-2#python]

import stripe
stripe.api_key = "sk_test_BQokikJOvBiI2HlWgH4olfQ2"
stripe.api_base = "https://api-tls12.stripe.com"

if stripe.VERSION in ("1.13.0", "1.14.0", "1.14.1", "1.15.1", "1.16.0", "1.17.0", "1.18.0", "1.19.0"):
    print ("Bindings update required.")

try:
    stripe.Charge.all()
    print ("TLS 1.2 supported, no action required.")
except stripe.error.APIConnectionError:
    print ("TLS 1.2 is not supported. You will need to upgrade your integration.")
 0
Author: Abu Obaida, 2017-11-30 16:04:02

Используйте сценарий ниже

require_once(APPPATH . 'libraries/vendor/autoload.php');
try {
    $curl = new \Stripe\HttpClient\CurlClient(array(CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1));
    \Stripe\ApiRequestor::setHttpClient($curl);
    \Stripe\Stripe::setApiKey($this->apiKey);

    $token = \Stripe\Token::create(array(
        "card" => array(
            "number" => $creditCard,
            "exp_month" => $expMonth,
            "exp_year" => $expYear,
            "cvc" => $cvc
        )
    ));

    $result = $token->getLastResponse();
    $json = json_decode($result->body);
    $token = $json->id;
} catch (Exception $e) {
    echo $e->getMessage();
    exit;
}
 -1
Author: Iftikhar Khan, 2016-12-30 13:29:05