Last active
March 7, 2023 09:47
-
-
Save sashabeep/401be029521c6a8c698c9bbd3dbc50a0 to your computer and use it in GitHub Desktop.
Отправка сделки на AmoCRM
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
//ПРЕДОПРЕДЕЛЯЕМЫЕ ПЕРЕМЕННЫЕ | |
$responsible_user_id = ######; //id ответственного по сделке, контакту, компании | |
$lead_name = 'Заявка с сайта'; //Название добавляемой сделки | |
$lead_status_id = ''; //id этапа продаж, куда помещать сделку. Пусто - неразобранное | |
$lead_desc = '' //Дополнительная заметка к сделке. Сюда можно поместить тело письма и т.д. | |
$contact_name = $cname; //Название добавляемого контакта | |
$contact_phone = $cphone; //Телефон контакта | |
$contact_email = $cemail; //Емейл контакта | |
//АВТОРИЗАЦИЯ | |
$user=array( | |
'USER_LOGIN'=>'###', //Ваш логин (электронная почта) | |
'USER_HASH'=>'###' //Хэш для доступа к API (смотрите в профиле пользователя) | |
); | |
$subdomain='###'; | |
//АВТОРИЗАЦИЯ | |
//Формируем ссылку для запроса | |
$link = 'https://' . $subdomain . '.amocrm.ru/private/api/auth.php?type=json'; | |
/* Нам необходимо инициировать запрос к серверу. Воспользуемся библиотекой cURL (поставляется в составе PHP). Вы также | |
можете | |
использовать и кроссплатформенную программу cURL, если вы не программируете на PHP. */ | |
$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); | |
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); | |
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($user)); | |
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); | |
curl_setopt($curl, CURLOPT_HEADER, false); | |
curl_setopt($curl, CURLOPT_COOKIEFILE, __DIR__ . '/cookie.txt'); | |
curl_setopt($curl, CURLOPT_COOKIEJAR, __DIR__ . '/cookie.txt'); | |
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); //Получим HTTP-код ответа сервера | |
curl_close($curl); //Завершаем сеанс 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) { | |
die('Ошибка: ' . $E->getMessage() . PHP_EOL . 'Код ошибки: ' . $E->getCode()); | |
} | |
/* | |
Данные получаем в формате JSON, поэтому, для получения читаемых данных, | |
нам придётся перевести ответ в формат, понятный PHP | |
*/ | |
$Response = json_decode($out, true); | |
//echo '<b>Авторизация:</b>'; echo '<pre>'; print_r($Response); echo '</pre>'; | |
//ПОЛУЧАЕМ ДАННЫЕ АККАУНТА | |
//Формируем ссылку для запроса | |
$link = 'https://' . $subdomain . '.amocrm.ru/api/v2/account?with=pipelines,groups,note_types,task_types,custom_fields'; | |
/* | |
Нам необходимо инициировать запрос к серверу. Воспользуемся библиотекой cURL (поставляется в составе PHP). | |
Вы также можете использовать и кроссплатформенную программу cURL, если вы не программируете на PHP. | |
*/ | |
$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); | |
curl_setopt($curl, CURLOPT_HEADER, false); | |
curl_setopt($curl, CURLOPT_COOKIEFILE, __DIR__ . '/cookie.txt'); | |
curl_setopt($curl, CURLOPT_COOKIEJAR, __DIR__ . '/cookie.txt'); | |
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) { | |
die('Ошибка: ' . $E->getMessage() . PHP_EOL . 'Код ошибки: ' . $E->getCode()); | |
} | |
/* | |
Данные получаем в формате JSON, поэтому, для получения читаемых данных, | |
нам придётся перевести ответ в формат, понятный PHP | |
*/ | |
$Response = json_decode($out, true); | |
//echo '<b>Данные аккаунта:</b>'; echo '<pre>'; print_r($Response); echo '</pre>'; | |
//ПОЛУЧАЕМ СУЩЕСТВУЮЩИЕ ПОЛЯ | |
$amoAllFields = $Response['_embedded']['custom_fields']; //Все поля | |
$amoConactsFields = $amoAllFields['contacts']; //Поля контактов | |
//echo '<b>Поля из амо:</b>'; echo '<pre>'; print_r($amoConactsFields); echo '</pre>'; | |
//ФОРМИРУЕМ МАССИВ С ЗАПОЛНЕННЫМИ ПОЛЯМИ КОНТАКТА | |
//Стандартные поля амо: | |
$sFields = array_flip(array( | |
'PHONE', //Телефон. Варианты: WORK, WORKDD, MOB, FAX, HOME, OTHER | |
'EMAIL' //Email. Варианты: WORK, PRIV, OTHER | |
) | |
); | |
//Проставляем id этих полей из базы амо | |
foreach($amoConactsFields as $afield) { | |
if(isset($sFields[$afield['code']])) { | |
$sFields[$afield['code']] = $afield['id']; | |
} | |
} | |
//ДОБАВЛЯЕМ СДЕЛКУ | |
$leads['add']=array( | |
array( | |
'name' => $lead_name, | |
'status_id' => $lead_status_id, //id статуса | |
'responsible_user_id' => $responsible_user_id, //id ответственного по сделке | |
//'date_create'=>1298904164, //optional | |
//'price'=>300000, | |
//'tags' => 'TEST', //Теги | |
//'custom_fields'=>array() | |
) | |
); | |
$link='https://'.$subdomain.'.amocrm.ru/api/v2/leads'; | |
$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); | |
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); | |
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($leads)); | |
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); | |
curl_setopt($curl, CURLOPT_HEADER, false); | |
curl_setopt($curl,CURLOPT_COOKIEFILE,__DIR__.'/cookie.txt'); | |
curl_setopt($curl,CURLOPT_COOKIEJAR,__DIR__.'/cookie.txt'); | |
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); | |
$Response=json_decode($out,true); | |
//echo '<b>Новая сделка:</b>'; echo '<pre>'; print_r($Response); echo '</pre>'; | |
if(is_array($Response['_embedded']['items'])){ | |
foreach($Response['_embedded']['items'] as $lead) { | |
$lead_id = $lead["id"]; //id новой сделки | |
} | |
} | |
//ДОБАВЛЯЕМ СДЕЛКУ - КОНЕЦ | |
//ДОБАВЛЕНИЕ КОНТАКТА | |
$contacts['add'][] = array( | |
'name' => $contact_name, | |
'leads_id' => array($lead_id), //id сделки | |
'responsible_user_id' => $responsible_user_id, //id ответственного | |
'custom_fields'=>array( | |
array( | |
'id' => $sFields['PHONE'], | |
'values' => array( | |
array( | |
'value' => $contact_phone, | |
'enum' => 'WORK' | |
) | |
) | |
), | |
array( | |
'id' => $sFields['EMAIL'], | |
'values' => array( | |
array( | |
'value' => $contact_email, | |
'enum' => 'WORK' | |
) | |
) | |
) | |
) | |
); | |
//echo '<pre>'; print_r($contacts); echo '</pre>'; | |
$link = 'https://' . $subdomain . '.amocrm.ru/api/v2/contacts'; | |
$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); | |
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); | |
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($contacts)); | |
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); | |
curl_setopt($curl, CURLOPT_HEADER, false); | |
curl_setopt($curl, CURLOPT_COOKIEFILE, __DIR__ . '/cookie.txt'); | |
curl_setopt($curl, CURLOPT_COOKIEJAR, __DIR__ . '/cookie.txt'); | |
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); | |
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); | |
$out = curl_exec($curl); | |
$Response=json_decode($out,true); | |
//echo '<b>Новый контакт:</b>'; echo '<pre>'; print_r($Response); echo '</pre>'; | |
//ДОБАВЛЕНИЕ КОНТАКТА - КОНЕЦ | |
//ДОБАВЛЕНИЕ ЗАДАЧИ связаться через 60 минут | |
$tasks['add'][] = array( | |
'element_id' => $lead_id, //id сделки | |
'task_type' => '1', | |
'element_type' => '2', | |
'responsible_user_id' => $responsible_user_id, //id ответственного | |
'text' => $lead_name, | |
'complete_till' => time() + (1 * 60 * 60) | |
); | |
$link = 'https://' . $subdomain . '.amocrm.ru/api/v2/tasks'; | |
$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); | |
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); | |
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($tasks)); | |
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); | |
curl_setopt($curl, CURLOPT_HEADER, false); | |
curl_setopt($curl, CURLOPT_COOKIEFILE, __DIR__ . '/cookie.txt'); | |
curl_setopt($curl, CURLOPT_COOKIEJAR, __DIR__ . '/cookie.txt'); | |
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); | |
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); | |
$out = curl_exec($curl); //Инициируем запрос к API и сохраняем ответ в переменную | |
$Response=json_decode($out,true); | |
//echo '<b>Новая задача:</b>'; echo '<pre>'; print_r($Response); echo '</pre>'; | |
//ДОБАВЛЕНИЕ ЗАДАЧИ - КОНЕЦ | |
//ДОБАВЛЕНИЕ NOTE | |
$data = array( | |
'add' => array( | |
0 => array( | |
'element_id' => $lead_id, | |
'element_type' => '2', | |
'text' => $lead_desc, | |
'note_type' => '4' | |
), | |
), | |
); | |
$link = 'https://' . $subdomain . '.amocrm.ru/api/v2/notes'; | |
/* Нам необходимо инициировать запрос к серверу. Воспользуемся библиотекой cURL (поставляется в составе PHP). Подробнее о | |
работе с этой | |
библиотекой Вы можете прочитать в мануале. */ | |
$curl = curl_init(); | |
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); | |
curl_setopt($curl, CURLOPT_USERAGENT, 'amoCRM-API-client/1.0'); | |
curl_setopt($curl, CURLOPT_URL, $link); | |
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); | |
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); | |
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); | |
curl_setopt($curl, CURLOPT_HEADER, false); | |
curl_setopt($curl, CURLOPT_COOKIEFILE, __DIR__ . '/cookie.txt'); | |
curl_setopt($curl, CURLOPT_COOKIEJAR, __DIR__ . '/cookie.txt'); | |
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); | |
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); | |
$out = curl_exec($curl); | |
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE); | |
/* Теперь мы можем обработать ответ, полученный от сервера. Это пример. Вы можете обработать данные своим способом. */ | |
$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) { | |
die('Ошибка: ' . $E->getMessage() . PHP_EOL . 'Код ошибки: ' . $E->getCode()); | |
} | |
$Response=json_decode($out,true); | |
//echo '<b>Новая заметка:</b>'; echo '<pre>'; print_r($Response); echo '</pre>'; | |
//переписано с https://gist.github.com/webag/58ad75276aaa14325ab02a0189c9e37d 29-04-2020 | |
?> |
@kostealpu а попробовать?
сейчас же в профиле нет api ключ, как попробовать?
сейчас же в профиле нет api ключ, как попробовать?
Да. Отключили. Стало быть, подходит только для тех случаев, когда ключ еще был выпущен
кто то понимает как сделать авторизацию через OAuth 2.0?
может есть простой пример?
Было бы здорово, если бы автор переделал авторизацию. Заранее Благодарю!
/settings/profile/
Открываем консоль браузера и вводим AMOCRM.widgets.system.amohash
В ответ вернет Hash, да его удалили визуально, но они выдаются и API пока продолжает работать без изменений
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@kostealpu а попробовать?