Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Новое апи AmoCRM #55

Open
Gesparo opened this issue Dec 25, 2017 · 20 comments
Open

Новое апи AmoCRM #55

Gesparo opened this issue Dec 25, 2017 · 20 comments

Comments

@Gesparo
Copy link

Gesparo commented Dec 25, 2017

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

Все началось с того, что я столкнулся с проблемой обновления поля бюджет.
$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).

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

@dotzero
Copy link
Owner

dotzero commented Dec 25, 2017

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

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

@Gesparo
Copy link
Author

Gesparo commented Dec 25, 2017

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

@EvgenyKu
Copy link

EvgenyKu commented Jan 8, 2018

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

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

@dotzero
Copy link
Owner

dotzero commented Jan 8, 2018

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

@EvgenyKu
Copy link

EvgenyKu commented Jan 8, 2018

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

@tkachev-o
Copy link
Contributor

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

@dotzero
Copy link
Owner

dotzero commented Jan 11, 2018

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

@trofimovm
Copy link

trofimovm commented Jan 17, 2018

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

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

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

@dotzero
Copy link
Owner

dotzero commented Jan 17, 2018

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

@dotzero
Copy link
Owner

dotzero commented Jan 17, 2018

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

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

@Gesparo
Copy link
Author

Gesparo commented Jan 17, 2018

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

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

@dmitry4m
Copy link

dmitry4m commented Jan 28, 2018

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

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

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

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

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

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

@dotzero
Copy link
Owner

dotzero commented Jan 28, 2018

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

@dmitry4m
Copy link

@dotzero
Copy link
Owner

dotzero commented Feb 1, 2018

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

@vosyukov
Copy link

vosyukov commented Feb 15, 2018

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

@rauanmayemir
Copy link

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

@koninka
Copy link

koninka commented Apr 26, 2019

@dotzero какой статус перехода на новую версию апи? Есть какие-либо куски кода? Плюсую коммент #55 (comment) и также хочу поучаствовать

@dotzero
Copy link
Owner

dotzero commented Dec 8, 2019

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

@sergeyTurundayev
Copy link

Добрый день

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

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

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

10 participants