Плагин ExpressionEngine UPS Shipping вызывает исключение Guzzle HTTP

Спецификация сайта:

  • апаш
  • PHP версия 5.4
  • OpenSSL 1.0.2_8
  • ExpressionEngine 2.10.3
  • Экспрессо Магазин 2.5.1
  • Store UPS Shipping 1.1.0 (расширение магазина Expresso)

Ошибка возникает во время оформления заказа. Вот процесс оформления заказа:

  • /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.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]