Интеграция 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 систему.

Надеемся этот материал был для вас полезен, задавайте свои вопросы в комментарии к этой статье и мы с радостью вам ответим!

 

Нет времени всем этим заниматься?

Настроим интеграцию AmoCRM и WooCommerce за Вас!

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *