Есть такой прикольный црм - www.amocrm.ru . Задача была такая: при добавлении новой сделки надо чтобы в название добавлялась или ID сделки или же иной порядковый номер.
В интернете нашел решение - оно платное. Платить за такой пустяк не мой метод. И я плавно окунулся в документацию. Признаюсь - документация добротная и удобная. Примеры прилагаются, restAPI реализован грамотно.(мое мнение!).
Итак, начнем!
Переходим в настройки.
Нажимаем на API
Добавляем web Hooks ( читка : https://developers.amocrm.ru/rest_api/#webhooks )
4 - действие: При добавлении сделки!
5 - пункт. Сюда пишем
Теперь пишем код!
посмотрите куда обращается хук - в скрипт amocrmtest.php?cmd=newlead
Создаем файл amocrmtest.php
И строчим код:
Теперь про функцию amocrm_updateLead( );
Как обновить сделки хорошо описано тут: https://developers.amocrm.ru/rest_api/leads_set.php
Разумеется перед тем как обращаться по api надо авторизоваться, иначе все обращения вернут ошибку.
Как авторизоваться : https://developers.amocrm.ru/rest_api/#auth
В интернете нашел решение - оно платное. Платить за такой пустяк не мой метод. И я плавно окунулся в документацию. Признаюсь - документация добротная и удобная. Примеры прилагаются, restAPI реализован грамотно.(мое мнение!).
Итак, начнем!
Переходим в настройки.
Нажимаем на API
Добавляем web Hooks ( читка : https://developers.amocrm.ru/rest_api/#webhooks )
5 - пункт. Сюда пишем
Теперь пишем код!
посмотрите куда обращается хук - в скрипт amocrmtest.php?cmd=newlead
Создаем файл amocrmtest.php
И строчим код:
if($_GET['cmd']=="newlead"){ // amoCRM передает post параметром данный новой сделки. // берем его id $id_lead = $_POST['leads']['add'][0]['id']; $name_lead = $_POST['leads']['add'][0]['name']; // наша функция которая обновляет сделки
// вот тут надо авторизоваться! amocrm_updateLead($id_lead,$name_lead); exit; }
Теперь про функцию amocrm_updateLead( );
Как обновить сделки хорошо описано тут: https://developers.amocrm.ru/rest_api/leads_set.php
Разумеется перед тем как обращаться по api надо авторизоваться, иначе все обращения вернут ошибку.
Как авторизоваться : https://developers.amocrm.ru/rest_api/#auth
function amocrm_updateLead($id,$name){ $leads['request']['leads']['update']=array( array( 'id'=>$id, 'name'=>$name.' - '.$id, 'last_modified'=>time(), ) ); $link='https://'.subdomain.'.amocrm.ru/private/api/v2/json/leads/set'; $result = amocrm_Request($link,$leads); } //---------------------- function amocrm_Request($link , $params = array()){ $curl=curl_init(); #Сохраняем дескриптор сеанса cURL #Устанавливаем необходимые опции для сеанса cURL curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-API-client/1.0'); curl_setopt($curl,CURLOPT_URL,$link); if($params!=null){ curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'POST'); curl_setopt($curl,CURLOPT_POSTFIELDS,json_encode($params)); } curl_setopt($curl,CURLOPT_HEADER,false); curl_setopt($curl,CURLOPT_COOKIEFILE,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__ curl_setopt($curl,CURLOPT_COOKIEJAR,dirname(__FILE__).'/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__ curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0); curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0); $out=curl_exec($curl); #Инициируем запрос к API и сохраняем ответ в переменную $code=curl_getinfo($curl,CURLINFO_HTTP_CODE); curl_close($curl); //Теперь мы можем обработать ответ, полученный от сервера. Это пример. Вы можете обработать данные своим способом. $code=(int)$code; $errors=array( 301=>'Moved permanently', 400=>'Bad request', 401=>'Unauthorized', 403=>'Forbidden', 404=>'Not found', 500=>'Internal server error', 502=>'Bad gateway', 503=>'Service unavailable' ); try { #Если код ответа не равен 200 или 204 - возвращаем сообщение об ошибке if($code!=200 && $code!=204){ throw new Exception(isset($errors[$code]) ? $errors[$code] : 'Undescribed error',$code); } // } catch(Exception $E) { print('Ошибка: '.$E->getMessage().PHP_EOL.'Код ошибки: '.$E->getCode()); } $Response=json_decode($out,true); $Response=$Response['response']; #Response - объект класса StdClass return $Response; }
Спасибо, помогло. Не мог сообразить с инфой от хука.
ОтветитьУдалитьА что за платное решение?
ОтветитьУдалить