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

Новое апи AmoCRM

Open Gesparo opened this issue 8 years ago • 20 comments

Доброго времени суток.

Все началось с того, что я столкнулся с проблемой обновления поля бюджет. $lead = $this->amoCRMConnection->lead; $lead['price'] = '200'; $lead->apiUpdate((int)$this->attachLeadId, 'now');

В новой документации за поле бюджет отвечает не price, а sale. Но запрос $lead = $this->amoCRMConnection->lead; $lead['sale'] = '200'; $lead->apiUpdate((int)$this->attachLeadId, 'now');

НЕ обновит поле бюджет. Связано это с тем, что он общается со старым апи amocrm Покажу на примере apiList модели Lead

$response = $this->getRequest('/private/api/v2/json/leads/list', $parameters, $modified);

А в новой документации ( и в новом апи соответственно ) запросы должны идти по другому url $response = $this->getRequest('/api/v2/leads', $parameters, $modified);

И ответ с сервера тоже выглядит по другому. Так что это затрагивает и метод parseResponse($response, $info).

И эта проблема тянет за собой и все остальные ссылки, которые тоже ссылаются на устаревшее апи.

Gesparo avatar Dec 25 '17 07:12 Gesparo

Спасибо за информацию. Об обратной совместимости они конечно не думают и никак не сообщают о том что ломают апи.

После нового года займусь плавной миграцией на новое api.

dotzero avatar Dec 25 '17 12:12 dotzero

Отлично. Большое спасибо)

Gesparo avatar Dec 25 '17 12:12 Gesparo

Сейчас начал знакомиться с амо црм(впервые) и вижу, что сейчас авторизация происходит через пост запрос и в ответ приходит 15-минутный куки. В коде как я понимаю,авторизация через гет параметры?

Это с новым апи пришло? или просто двумя способами можно авторизоваться?

EvgenyKu avatar Jan 08 '18 13:01 EvgenyKu

@EvgenyKu так было всего, авторизация через get это недокументированные возможности api. Авторизация через куки для rest api это полный бред, и я не хочу городить огород с хранением этой куки где-то во временном файле.

dotzero avatar Jan 08 '18 15:01 dotzero

@dotzero Понятно, даже не знал о такой возможности. Как узнать о других незадокументированных методах, если есть такая возможность?

EvgenyKu avatar Jan 08 '18 16:01 EvgenyKu

@dotzero в какую ветку вы планируете плавно вносить изменения?

tkachev-o avatar Jan 11 '18 19:01 tkachev-o

@tkachev-o Пока не могу сказать. Сначала я хочу понять насколько новое апи отличается от старого, если они просто добавили пару полей в разных сущностях и поменяли формат ответа, то я скорее всего буду это делать прям в master и выпущу как версию 0.4. А если новое апи существенно отличается, то мне сложно сказать когда дойдут руки перепроверять все существующие методы.

dotzero avatar Jan 11 '18 20:01 dotzero

Ответ саппорта AmoCRM

Официальный ответ для партнеров от нашего руководства:  Ответ Сергея Голованевского для партнеров:

Я хотел бы еще раз публично и более подробно рассказать о принципах внесения изменений в REST API. Принцип внесения изменений следующий - не менять ничего, что было публично заявлено, работало и может быть использовано партнерами. Чтобы закрепить этот принцип мы сами используем свое же АПИ в своем же аккаунте в amoCRM, завязали на него мобильные клиенты и еще целая банда разработчиков внутри компании также используют его для внутренней автоматизации. Каждая ошибка в API вызывает ошибки и в работе наших систем и мы также испытываем проблемы как и вы. Но при всем при этом мы хотим оставаться в тренде, хотим улучшать инструмент, как мы сделали это в осеннем релизе. Но мы не изменили ни одного старого метода. Мы сделали новые эндпоинты и дорабатывали там. И пройдет много времени, прежде чем мы решимся не закрыть, а хотя бы просто объявить даже о закрытии старого АПИ, потому что мы понимаем сколько ваших усилий было инвестировано в разработку на его основе и сколько наших общих клиентов могут пострадать. И поверьте, решение будет приниматься не за одну встречу и на уровне владельцев компании.

trofimovm avatar Jan 17 '18 07:01 trofimovm

@trofimovm спасибо, это очень ценная информация.

dotzero avatar Jan 17 '18 08:01 dotzero

Я посмотрел и оказалось, что новые API методы /api/v2/account в отличии от старых /private/api/v2/json/accounts/current отдают информацию в совершенно новом виде. Во всех ответах теперь теперь могут быть поля _embedded (а могут и не быть) где данные очень похожи на то что отдавали раньше, но появилось и другое верхнеуровневое поле _links, но пропало поле server_time. Отсюда возникает резенной вопрос как ступить с этими ответами.

  1. Перестать их парсить и отдавать в том виде в котором их возвращает амо (если нет ошибки)
  2. Пытаться парсить _embedded и возвращаться также ID элементов, как сейчас, а на _links забить.

dotzero avatar Jan 17 '18 10:01 dotzero

Мое мнение: первый вариант - пусть каждый сам для себя решает как ему работать с этими данными (так как одному могут понадобится все данные, другому - часть). Максимум что можно сделать, чтобы всем было комфортно - это каким то образом разделить способ ответа, чтобы можно было получать данные как в том виде, который передает амо, так и в удобном формате, в зависимости от переданного параметра.

Либо выделить ответ сервера в отдельный объект и уже работать с ним как заблагорассудится (вопрос сложный, я даже не представляю как это можно реализовать)

Gesparo avatar Jan 17 '18 11:01 Gesparo

Товарищи, пожалуйста, не надо следовать принципам "слышал звон, да не знаю где он".

Старое апи прекрасно работает. Проверено десятками внедрений.

Проверил и сейчас: // Обновление сделок $lead->debug(true); // Режим отладки $lead['name'] = 'Тестовая сделка 3'; $lead['price'] = 3000; $lead->apiUpdate(15762058, 'now');

всё отлично обновилось. багрепорт изначально или некорректный, или какая то частная проблема. просьба к тем, кто сдаёт багрепорты не делать скоропостижных выводов раз, прикладывать дебаг (что по факту ушло на амо и что по факту вернулось) - два. есть предположение, что запрос был некорректно сформирован.

теперь по переходу на новый API. огромная просьба к автору ничего не менять в текущей ветке. хочется переехать на новую версию апи? надо делать новую версию библиотеки.

старая версия апи будет жить еще годы.

dmitry4m avatar Jan 28 '18 10:01 dmitry4m

@dmitry4m если у меня хватит сил перейти на новую версию api, то я в любом случае не буду трогать ветку 3.x.x. Другое дело, что новые люди не могут пользоваться старой документацией и смотря на новую не знают как раньше назывались поля, большинство полей в новой версии поменяли названия.

dotzero avatar Jan 28 '18 18:01 dotzero

@dotzero измените ссылки на https://web.archive.org/web/20170801033744/https://developers.amocrm.ru/rest_api/

dmitry4m avatar Jan 28 '18 18:01 dmitry4m

Добавил соответствующее предупреждение в README

dotzero avatar Feb 01 '18 18:02 dotzero

Tак же доступна документация первой версии на английском https://developers.amocrm.com/rest_api/unsorted/add.php

vosyukov avatar Feb 15 '18 16:02 vosyukov

@dotzero Какой прогресс с переходом на новый api? Если какие-то сущности уже готовы, я бы хотел помочь с напиливанием остальных ендпоинтов.

rauanmayemir avatar Sep 29 '18 10:09 rauanmayemir

@dotzero какой статус перехода на новую версию апи? Есть какие-либо куски кода? Плюсую коммент https://github.com/dotzero/amocrm-php/issues/55#issuecomment-425632971 и также хочу поучаствовать

koninka avatar Apr 26 '19 14:04 koninka

Нужная ли поддержка PHP 5 или можно делать новую версию сразу на PHP 7.1+ ?

dotzero avatar Dec 08 '19 06:12 dotzero

Добрый день

Контакт не обновляется

$contact = $amo->contact->apiList([ 'query' => '+xxxxxxxxxx', ])[0];

$contact['name'] = 'Test!'; //новое имя $id = $contact['id']; $contact->apiUpdate((int)$id, 'now');

Не подскажете, что надо сделать, чтобы обновить контакт?

sergeyTurundayev avatar Jul 31 '21 16:07 sergeyTurundayev