Подключаем AMO CRM к любой форме

Подключаем AMO CRM к любой форме

И так на днях пришел интересный заказ по подключению AMO CRM к сетке сайтов.

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

И так первым делом у вас должны быть форма на сайте, в которой делаем все поля для вашего будущего лида .

После этого у вас должен быть обработчик данной формы, в который мы и будем засовывать наш код передачи лида в AMO CRM.

Код весь с комментариями , думаю разобраться в нем не составит труда никому.

 //amo
//ПРЕДОПРЕДЕЛЯЕМЫЕ ПЕРЕМЕННЫЕ
$responsible_user_id = ХХХХХХХХ; //id ответственного по сделке, контакту, компании

$lead_name = 'Заказа с сайта ХХХХХХХХ.' ; //Название добавляемой сделки
$lead_status_id = 'ХХХХХХХХХХ'; //id этапа продаж, куда помещать сделку

$contact_name = $_POST["Shp_names"]; //Название добавляемого контакта
$contact_phone = $_POST["Shp_phone_number"]; //Телефон контакта
$contact_email = $_POST["Shp_Email"]; //Емейл контакта

//АВТОРИЗАЦИЯ
$user=array(
'USER_LOGIN'=>'info@ХХХХХХХХ.ru', #Ваш логин (электронная почта)
'USER_HASH'=>'ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ' #Хэш для доступа к API (смотрите в профиле пользователя)
);
$subdomain='ХХХХХХХХХХХХХХХХХХ'; #Наш аккаунт - поддомен

#Формируем ссылку для запроса
$link='https://'.$subdomain.'.amocrm.ru/private/api/auth.php?type=json';
$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_POST,true);
curl_setopt($curl,CURLOPT_POSTFIELDS,http_build_query($user));
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); #Получим HTTP-код ответа сервера
curl_close($curl); #Завершаем сеанс cURL
$Response=json_decode($out,true);
//echo '<b>Авторизация:</b>'; echo '<pre>'; print_r($Response); echo '</pre>';

//ПОЛУЧАЕМ ДАННЫЕ АККАУНТА
$link='https://'.$subdomain.'.amocrm.ru/private/api/v2/json/accounts/current'; #$subdomain уже объявляли выше
$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,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);
$Response=json_decode($out,true);
$account=$Response['response']['account'];
//echo '<b>Данные аккаунта:</b>'; echo '<pre>'; print_r($Response); echo '</pre>';

//ПОЛУЧАЕМ СУЩЕСТВУЮЩИЕ ПОЛЯ
$amoAllFields = $account['custom_fields']; //Все поля
$amoConactsFields = $account['custom_fields']['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['request']['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'=>$_POST["OutSum"],
'tags' => 'Неоплаченый', #Теги
'custom_fields'=>array(
array(
'id' => 46021,
'values' => array(
array(
'value' => $res,
'enum' => 'Заказ'
)
)
),
array(
'id' => 45957,
'values' => array(
array(
'value' => 'не оплачен',
'enum' => 'Статус заказа'
)
)
),

array(
'id' => 46581,
'values' => array(
array(
'value' => $_POST["OutSum2"],
'enum' => 'Сумма заказа'
)
)
),
array(
'id' => 46583,
'values' => array(
array(
'value' => $_POST["Shp_dos"],
'enum' => 'Сумма доставки'
)
)
),
array(
'id' => 46587,
'values' => array(
array(
'value' => 'ХХХХХХХХХХХХХХ',
'enum' => 'Сайт'
)
)
),
array(
'id' => 46319,
'values' => array(
array(
'value' => $_POST["Shp_adress"],
'enum' => 'Пункт самовывоза'
)
)
),
array(
'id' => 45979,
'values' => array(
array(
'value' => $_POST["InvId"],
'enum' => 'ID заказа'
)
)
),
array(
'id' => 45999

,
'values' => array(
array(
'value' => $_POST["Shp_comment"],
'enum' => 'Коментарий'
)
)
),

)
)
);

$link='https://'.$subdomain.'.amocrm.ru/private/api/v2/json/leads/set';

$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,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);
$Response=json_decode($out,true);
//echo '<b>Новая сделка:</b>'; echo '<pre>'; print_r($Response); echo '</pre>';
if(is_array($Response['response']['leads']['add']))
foreach($Response['response']['leads']['add'] as $lead) {
$lead_id = $lead["id"]; //id новой сделки
};
//ДОБАВЛЯЕМ СДЕЛКУ - КОНЕЦ

//ДОБАВЛЕНИЕ КОНТАКТА
$contact = array(
'name' => $contact_name,
'linked_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' => 'MOB'
)
)
),
array(
'id' => $sFields['EMAIL'],
'values' => array(
array(
'value' => $contact_email,
'enum' => 'WORK'
)
)
)
)
);

$set['request']['contacts']['add'][]=$contact;

#Формируем ссылку для запроса
$link='https://'.$subdomain.'.amocrm.ru/private/api/v2/json/contacts/set';
$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($set));
curl_setopt($curl,CURLOPT_HTTPHEADER,array('Content-Type: application/json'));
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);
//CheckCurlResponse($code);

$Response=json_decode($out,true);
//ДОБАВЛЕНИЕ КОНТАКТА - КОНЕЦ

//amo