Спецификация сайта:
Ошибка возникает во время оформления заказа. Вот процесс оформления заказа:
/checkout/1
Страница сведений о корзине/checkout/2
Форма для выставления счетов и доставки информации. Расчет стоимости доставки происходит на этой странице./checkout/3
Форма для информации о кредитной карте./checkout/receipt/ORDER_HASH
Страница квитанции.Эта проблема возникает на стр. 2. После ввода информации о доставке пользователь нажимает кнопку «Рассчитать», вызывая запрос к API UPS о сметной стоимости доставки. Страница перезагружается с ответом ИБП обо всех действительных вариантах доставки и сметных расходах.
Согласно уведомление от UPS, TLSv1.0 и v1.1 больше не работают в тестовом режиме.
Однако плагин UPS Shipping согласовывает набор шифров, используя спецификацию TLSv1 (а не только v1.2). Запрос попадает на балансировщик нагрузки и отправляется на различные серверы. Некоторые серверы все еще поддерживают v1.0, а другие требуют v1.2. Таким образом, я получаю ошибку примерно в половине случаев.
Ошибка возникает в Жрет HTTP-клиент. Вот ошибка:
Fatal error: Uncaught exception 'Guzzle\Http\Exception\CurlException'
with message '[curl] 35: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version https://wwwcie.ups.com/ups.app/xml/Rate'
in /.../system/expressionengine/third_party/store/vendor/guzzle/http/Guzzle/Http/Curl/CurlMulti.php:338
Stack trace:
#0 /.../system/expressionengine/third_party/store/vendor/guzzle/http/Guzzle/Http/Curl/CurlMulti.php(279):
Guzzle\Http\Curl\CurlMulti->isCurlException(Object(Guzzle\Http\Message\EntityEnclosingRequest), Object(Guzzle\Http\Curl\CurlHandle), Array)
#1 /.../system/expressionengine/third_party/store/vendor/guzzle/http/Guzzle/Http/Curl/CurlMulti.php(244):
Guzzle\Http\Curl\CurlMulti->processResponse(Object(Guzzle\Http\Message\EntityEnclosingRequest), Object(Guzzle\Http\Curl\CurlHandle), Array)
#2 /.../system/expressionengine/third_party/store/vendor/guzzle/http/Guzzle/Http/Curl/CurlMulti.php(227):
Guzzle\Http\Curl\Cur in /.../system/expressionengine/third_party/store/vendor/guzzle/http/Guzzle/Http/Curl/CurlMulti.php on line 338
Плагин доставки не обновлялся некоторое время, поэтому это обновление UPS API не учитывалось. В то же время, я ищу, чтобы исправить это самостоятельно.
Я подозреваю, что проблема в строке 143 функции send () в этом файле:
/.../system/expressionengine/third_party/store_ups/ApiRequest.php
Линия:
$request->getCurlOptions()->set(CURLOPT_SSL_CIPHER_LIST, 'TLSv1');
Я не уверен, какое строковое значение передать ему, чтобы заставить запрос использовать TLSv1.2. Пробовал с помощью строки 'TLSv1.2'
но это не сработало. Получил строковое значение из Руководства OpenSSL.
Задача ещё не решена.
Других решений пока нет …