Есть такой прикольный црм - 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;
}

Спасибо, помогло. Не мог сообразить с инфой от хука.
ОтветитьУдалитьА что за платное решение?
ОтветитьУдалить