
Интеграция AmoCRM и WordPress Woocommerce
В этом материале мы расскажем как максимально просто и быстро можно настроить интеграцию WooCommerce и AmoCRM. С процессом настройки интеграции разберется даже далекий от программирования человек.
Что такое AmoCRM
AmoCRM – облачная программа для учета текущих продаж, покупателей и проводимых сделок. AmoCRM считается лучшей crm системой для продаж в сфере среднего и малого бизнеса и идеально подходит для выстраивания продаж в интернет-магазинах.Тестирование работы вебзацепа
Для того чтобы передавать информацию о заказах с нашего сайта в AmoCRM мы будем использовать стандартное функцию Woocommerce – Вебзацеп или “вебхук”. Перед началом работы нужно проверить что данная функиця работает корректно. Перейдите в админку вашего сайта, найдите в меню пункт “Woocommerce” -> “Настройки” -> API -> “Вебзацепы”
Нажмите кнопку “создать вебзацеп” и укажите следующие настройки:
- Имя: Любое
- Статус: Активно
- Топик: Заказ создан
- URL доставки: Перейдите на сайт https://webhook.site и получите ссылку для доставки.
Остальные поля оставляем без изменений и жмем “создать вебзацеп”.
Теперь каждый раз при получении нового заказа наш WooCommerce сайт будет отправлять запрос по ссылке которую мы указали в настройках вебзацепа. Чтобы протестировать работу вебзацепа просто оформите новый заказ на своем сайте и посмотрите что будет передано на сайт webhook.site. Должен быть примерно такой вид:

В некоторых слушая возникает проблема с тем, что первый запрос приходит пустым. Не волнуйтесь и просто оформите заказ снова. Если после второй попытки запрос все так же пустой, обратитесь к техническому специалисту.
Настройка скрипта интеграции
Если тестирование прошло успешно, переходим к настройке скрипта интеграции. Для начала создайте на хостинге новый каталог в корне сайта и создайте в нем файл amocrm.php В этот файл добавьте следующий код:<? // // Получаем данные // $postData = file_get_contents('php://input'); // Получаем JSON от Woocommerce $data = json_decode($postData, true); // Разбираем JSON в масив //Информация о заказе $orderId = $data["id"]; $totalPrice = $data["total"]; // id заказа $payMethod = $data["payment_method_title"]; // способ оплаты $deliveryMethod = $data["shipping_lines"][0][method_title]; // способ доставки $deliveryPrice = $data["shipping_lines"][0][total]; // Стоимость доставки // Информация о клиенте $clientInfo = $data["billing"]; $clientName = $clientInfo["first_name"] . " " . $clientInfo["last_name"]; $clientAddress = $clientInfo["city"] . " " .$clientInfo["state"] . " " . $clientInfo["address_1"] . " " . $clientInfo["address_2"]; $clientPhone = $clientInfo["phone"]; $clientEmail = $clientInfo["email"]; // Информация о товарах в заказе $orderItems = $data["line_items"]; $product1 = $orderItems[0]["sku"] . ' ' . $orderItems[0]["name"] . ' ' . $orderItems[0]["total"]; // Функция проверки ответа function CheckCurlResponse($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()); } } // Данные клиента и сделки $lead_name = 'Заказ № '.$orderId; //Название добавляемой сделки $cemail = $clientEmail; // email клиента $cphone = $clientPhone; // Телефон клиента $cname = $clientName; // Имя клиента $contact_name = $cname; //Название добавляемого контакта $contact_phone = $cphone; //Телефон контакта $contact_email = $cemail; //Емейл контакта //Служебные данные $responsible_user_id =1111111; //id ответственного по сделке, контакту, компании$lead_status_id ='24510406'; //id этапа продаж, куда помещать сделку//АВТОРИЗАЦИЯ $user=array( 'USER_LOGIN'=>'username@mail.ru', #Ваш логин (электронная почта)'USER_HASH'=>'c55aa19711e6153fd8b121e2ef79bfa0b11dcd17' #Хэш для доступа к API (смотрите в профиле пользователя)); $subdomain='poddomen'; #Поддомен напирмер MYSHOP.amocrm.ru#Формируем ссылку для запроса $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'=>$totalPrice, #Полная стоимость заказа 'tags' => 'с сайта', #Теги 'custom_fields'=>array( /*Товар 1*/array( "id"=>123121, "values"=> array( array( "value"=>$product1 ) ) ), /*Номер заказа*/ array( "id"=>123125, "values"=> array( array( "value"=>$orderId ) ) ), array( "id"=>123101, "values"=> array( array( "value"=>$deliveryPrice ) ) ), array( "id"=>123055, "values"=> array( array( "value"=>$clientAddress ) ) ),) ) ); $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 ?>
Копируем код выше и вставляем в созданный файл. Красным отмечены данные которые нужно заменить на свои
- USER_LOGIN – Логин для входа в AmoCRM
- USER_HASH – Хэш для пользователя (посмотреть можно в профиле)
- $subdomain – Поддомен нашей CRM системы например myshop.amocrm.ru
Теперь перейдем к выделенному желтым участку кода:
тут нам предстоит указать ID полей, которые используются в нашей CRM системе. Эти поля будут у всех разные и самый простой способ узнать их это открыть наш файл amocrm.php в браузере.
Если вы верно указали авторизационные данные то увидете список всех данных по аккаунту. ID пользователя и ID доступных полей. Находите нужное поле – копируете его ID и указываете в файле.
Активация интеграции woocommerce и amocrm
Переходим в админку сайта и проделываем все тоже самое, что и в начале статьи: Создаем вебзацеп, только теперь указываем ссылку на наш PHP файл. Теперь после сохранения каждый новый заказ будет автоматически переноситься в вашу CRM систему.
Надеемся этот материал был для вас полезен, задавайте свои вопросы в комментарии к этой статье и мы с радостью вам ответим!