Ну собственно. Есть сайт, работающий на 5cms, программисту была поставлена задача интегрировать поступление (по сути копирование) заказов в логистическую систему (maxoptra). В первое время всё работало отлично, заказы передавались (при создании) в логистику, всё ок. Но с какого то времени начала возникать ошибка 500. Я пытался разобраться в ситуации но не смог отловить 500 ошибку, и при помощи разработчиков увидел следующее: PHP: Fatal error: Uncaught GuzzleHttp\Exception\ConnectException: cURL error 28: Operation timed out after 2001 milliseconds with 0 bytes received (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) in /home/v/vagontrade/jaromaks-ru/public_html/api/maxoptra/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php:200 Stack trace: #0 /home/v/vagontrade/jaromaks-ru/public_html/api/maxoptra/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php(155): GuzzleHttp\Handler\CurlFactory::createRejection(Object(GuzzleHttp\Handler\EasyHandle), Array) #1 /home/v/vagontrade/jaromaks-ru/public_html/api/maxoptra/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php(105): GuzzleHttp\Handler\CurlFactory::finishError(Object(GuzzleHttp\Handler\CurlHandler), Object(GuzzleHttp\Handler\EasyHandle), Object(GuzzleHttp\Handler\CurlFactory)) #2 /home/v/vagontrade/jaromaks-ru/public_html/api/maxoptra/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php(43): GuzzleHttp\Handler\CurlFactory::finish(Object(GuzzleHttp\Handler\CurlHandler), Object(GuzzleHttp\Ha in /home/v/vagontrade/jaromaks-ru/public_html/api/maxoptra/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php on line 200 Сервис логистики отвечает что это где то там: Судя по ошибке, проблема на стороне обработчика, мы не сможем помочь с выяснением проблемы у сторонней программы. Кто возьмется разобраться и вылечить? Наверное опт с guzzlehttp поможет с решением.
PHP: $this->client = new Client([ 'base_uri' => $this->api_url, 'timeout' => 10.0, 'verify' => false ]); увеличил до 10 секунд - тоже самое ошибка 500, не решило проблему...
Не вижу сообщения про полный текст ошибки(хотя в уведомлениях есть), он выглядит вот так: Fatal error: Uncaught GuzzleHttp\Exception\ConnectException: cURL error 28: Operation timed out after 2001 milliseconds with 0 bytes received (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) in /home/v/vagontrade/jaromaks-ru/public_html/api/maxoptra/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php:200 Stack trace: #0 /home/v/vagontrade/jaromaks-ru/public_html/api/maxoptra/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php(155): GuzzleHttp\Handler\CurlFactory::createRejection(Object(GuzzleHttp\Handler\EasyHandle), Array) #1 /home/v/vagontrade/jaromaks-ru/public_html/api/maxoptra/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php(105): GuzzleHttp\Handler\CurlFactory::finishError(Object(GuzzleHttp\Handler\CurlHandler), Object(GuzzleHttp\Handler\EasyHandle), Object(GuzzleHttp\Handler\CurlFactory)) #2 /home/v/vagontrade/jaromaks-ru/public_html/api/maxoptra/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php(43): GuzzleHttp\Handler\CurlFactory::finish(Object(GuzzleHttp\Handler\CurlHandler), Object(GuzzleHttp\Ha in /home/v/vagontrade/jaromaks-ru/public_html/api/maxoptra/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php on line 200
@[rip.savage] выполните, пожалуйста, на своем сервере команду: Код (Text): curl -X POST http://beta.maxoptra.com/rest/2/authentication/createSession\?accountID\=ws\&password\=dontpreach\&user\=paul.rooney Если получите ответ в виде xml с id сессии -- проблема в коде. Если не получите -- проблема в сервере.
vagontrade@vh282 ~ $ curl -X POST http://beta.maxoptra.com/rest/2/aut...\=ws\&password\=dontpreach\&user\=paul.rooney <?xml version='1.0' encoding='UTF-8' standalone='yes'?> <apiResponse version="1.0"> <authResponse> <sessionID>b7afba936aa6461284095eb2fc87eba3</sessionID> </authResponse> </apiResponse> Значит проблема в коде?
Очень вероятно. Убедитесь, что в $this->api_url и тд попадают корректные данные (валидный url, правильное имя аккаунта и тд).
@brevis, понимаете весь парадокс ситуации в том, что проблема с "плавающей точкой", что я имею ввиду, я тут статистику подсобрал немного. За последние два часа, из 23 поступивших заказов, "нормально", т.е. без ошибки 500 прошло лишь шесть... Как я это понял: при создании заказа в папке log должно появляться два текстовых файла, один вида Код (Text): xml_last_30516:55cc2d88_2021-12-07_16-50-03.txt там находится сам заказ, и еще вида Код (Text): xml_s_30514:ae608c56_2021-12-07_16-24-35.txt в котором должно быть следующее содержание: Код (CSS): <?xml version='1.0' encoding='UTF-8' standalone='yes'?> <apiResponse version="1.0"> <orders> <order> <orderReference>30514:ae608c56</orderReference> <status>Created</status> </order> </orders> </apiResponse> я так понимаю этот файл должен создаваться после прихода ответа от логистики о статусе заказа, так вот этот ответ пришел шесть раз из двадцати трех...как так происходит - загадка.
Ну если иногда работает, а иногда нет -- вероятность проблемы в коде все выше Возможно, в некоторых случаях xml запроса формируется некорректно (может нужно банально заэкранировать какие-то данные). Нужно поизучать файлы с заказами, на которых возникает ошибка.
@mkramer @brevis PHP: $this->client = new Client([ 'base_uri' => $this->api_url, 'timeout' => 5.0, 'verify' => false ]); мда, первая версия оказалась верной, поставил 5 секунд, всё стало работать корректно. просто надо было править рабочий файл, а не его копию в папке maxptra. Всем спасибо, за помощь, тему можно закрывать.