amocrm-php icon indicating copy to clipboard operation
amocrm-php copied to clipboard

Обработка ошибок соединения

Open DarthLegiON opened this issue 7 years ago • 6 comments

Периодически возникает исключение с текстом: couldn't connect to host Иногда настолько часто, что это ломает логику работы. Я обрабатываю такие исключения, но лучше, чтобы само расширение производило попытку отправить запрос заново, если сервер amocrm оказывается недоступен.

DarthLegiON avatar Sep 07 '17 08:09 DarthLegiON

Понимаю эту боль, но это не проблема библиотеки, а проблема серверов с AmoCrm, не думаю что проблемы серверов должна решать библиотека. Если вы готовы написать какой-то враппер над библиотекой для повторной отправки техе запросов в общем виде, то я всего раз PullRequest'ам. Но у меня самого врятли руки до этого дойдут в ближайшее время.

dotzero avatar Sep 23 '17 07:09 dotzero

@DarthLegiON Если не секрет, как Вы обрабатываете неудачные отправки данных! Автору - огромная благодарность за такой крутой код!

unnamedfeeling avatar Nov 02 '17 23:11 unnamedfeeling

@unnamedfeeling через try ... catch, а потом генерирую и высылаю себе на почту такие случаи, чтобы знать, какие лиды потеряны.

К тому же в последнее время разрывы как-то подозрительно прекратились, и я перестал заниматьс поиском решения.

Проблема в том, что для повторной отправки запроса лучше перезапускать именно метод, отвечающий за curl, а не всю отправку - это повлечет за собой лишние действия. А curl закопан глубоко внутрь класса Request. Можно было бы его унаследовать, но от него зависят десятки других. Поэтому тут поможет либо инициатива разработчика плагина, либо чей-нибудь PR

DarthLegiON avatar Nov 03 '17 09:11 DarthLegiON

Как самое простое решение, я могу добавить какой-то метод retry(), и можно дергать его, что-то вроде:

do {
    $id = null;
    try {
        $amo = new \AmoCRM\Client();
        $contact = $amo->contact;
        $contact['name'] = 'ФИО';
        $id = $contact->apiAdd();
    } catch (\AmoCRM\Exception $e) {
        $contact->retry();
    }
} while($id === null);

Но если все это прекратилось, то может и нет смысла городить такие костыли?

dotzero avatar Nov 06 '17 09:11 dotzero

@dotzero у меня прекратилось (вроде бы), а у кого-то нет, судя по ответам тут. И надо как-то ограничивать количество этих "ретраев", в общем не все так просто.

DarthLegiON avatar Nov 07 '17 08:11 DarthLegiON

@dotzero , @DarthLegiON Я еще не попал на эту проблему. На данном этапе - для себя сделал логгирование в файлах. Кроме того - я пока-что работаю с wordpress, а в нем есть очень крутая штука "псевдо-крон" (wp-cron) - вот его задействую чуть позже (пока еще не реализовал). Меня лично данный вопрос заинтересовал до того как оно случилось и данные потеряны ;) Как по мне - смысл в retry() есть - "лучше перебдеть, чем недобдеть".

unnamedfeeling avatar Nov 07 '17 11:11 unnamedfeeling