amocrm-php
amocrm-php copied to clipboard
Обработка ошибок соединения
Периодически возникает исключение с текстом: couldn't connect to host Иногда настолько часто, что это ломает логику работы. Я обрабатываю такие исключения, но лучше, чтобы само расширение производило попытку отправить запрос заново, если сервер amocrm оказывается недоступен.
Понимаю эту боль, но это не проблема библиотеки, а проблема серверов с AmoCrm, не думаю что проблемы серверов должна решать библиотека. Если вы готовы написать какой-то враппер над библиотекой для повторной отправки техе запросов в общем виде, то я всего раз PullRequest'ам. Но у меня самого врятли руки до этого дойдут в ближайшее время.
@DarthLegiON Если не секрет, как Вы обрабатываете неудачные отправки данных! Автору - огромная благодарность за такой крутой код!
@unnamedfeeling через try ... catch, а потом генерирую и высылаю себе на почту такие случаи, чтобы знать, какие лиды потеряны.
К тому же в последнее время разрывы как-то подозрительно прекратились, и я перестал заниматьс поиском решения.
Проблема в том, что для повторной отправки запроса лучше перезапускать именно метод, отвечающий за curl, а не всю отправку - это повлечет за собой лишние действия. А curl закопан глубоко внутрь класса Request. Можно было бы его унаследовать, но от него зависят десятки других. Поэтому тут поможет либо инициатива разработчика плагина, либо чей-нибудь PR
Как самое простое решение, я могу добавить какой-то метод 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 у меня прекратилось (вроде бы), а у кого-то нет, судя по ответам тут. И надо как-то ограничивать количество этих "ретраев", в общем не все так просто.
@dotzero , @DarthLegiON Я еще не попал на эту проблему. На данном этапе - для себя сделал логгирование в файлах. Кроме того - я пока-что работаю с wordpress, а в нем есть очень крутая штука "псевдо-крон" (wp-cron) - вот его задействую чуть позже (пока еще не реализовал). Меня лично данный вопрос заинтересовал до того как оно случилось и данные потеряны ;) Как по мне - смысл в retry() есть - "лучше перебдеть, чем недобдеть".