Допустим, есть интернет магазин, в котором есть личный кабинет для партнеров. В магазине реализован механизм отправки данных о заказе с помощью вебхуков. Use-case: при создании заказа в ЛК сайта, программно шлется POST запрос на определенный url с информацией заказа. Далее по нему в crm создаются: Сделка у контакта Партнера в определенной воронке/этапе с заполнением полей заказа, а также создание Примечания с данными заказа, которые являются расширенной информацией. В сделку также крепятся товары из заказа.
Поиск контакта Партнера в amoCRM осуществляется по полю, в котором содержится id Партнера - в запросе это, например, 'customer_id': '1',. Т.е. одним из необходимых условий для работы интеграции данное поле уже должно быть заполнено у каждого контакта Партнера.
Данные покупателя идут в сделку в соответствующие поля, которые определены в конфиге полей.
-
Быстрая установка. Если нужно, чтобы скрипт был в отдельной папке - распаковываем в нее, и прописываем в конфиге и .htaccess, подробней ниже. Далее открываем путь https://ваш.домен/папка_скрипта/readme - и читаем)
-
Конфигурационные файлы для рабочих окружений находятся в папках внутри /config. Выбор конкретного окружения задается в файле .env.type в корне папки /config. Например, если это рабочее окружение, то в файл пишем prod и все конфиги приложения будут в папке prod.
-
Создать базу данных на хостинге. Сделать импорт базы из файла в папке /db, которая лежит в корне скрипта. Прописать данные доступа к БД в файле конфига в параметре
database -
Если скрипт расположен не в корне домена, то нужно задать папку в 2-х местах: в конфиге параметр
script_folderи в файле .htaccess в правилах, например так:RewriteRule ^.*$ /название_папки/index.php [L,QSA] -
В конфиге скрипта записать урл редиректа:
https://ваш.домен/папка_скрипта/api/auth -
Создать интеграцию в амо https://i.imgur.com/rUAauaH.jpg
-
Заполнить редирект урл(тот который в конфиге) в параметре:
redirect_uri -
Сохранить или сразу записать в файл конфига
папка_скрипта/config/название_окружения/amo.config.phpэти значения https://i.imgur.com/YFj9l6w.jpg, где домен - это домен вашего аккаунт, редирект урл - это все тот жеredirect_uri, а ключ и id клиента - в интеграции амо https://i.imgur.com/FIhoKEa.jpg -
После заполнения конфига, перейти по адресу https://ваш.домен/папка_скрипта/api/auth - всплывет кнопка, подтвердить доступ, затем должна быть надпись про успех авторизации.
-
Пароли и логины пользователей задается в конфиге /config/user.php https://i.imgur .com/oKzdqvx.png . Для создания пользователя, нужно "скопировать" массив, и указать login - это то, что в форме авторизации вводить, пароль password - это хеш пароля, который вводят в форме, его можно сформировать в сервисе https://passwordsgenerator .net/sha1-hash-generator/ . По-умолчанию, это логин, т.е. для admin пароль admin. И задать роль - их список можно посмотреть в файле /config/roles.php
-
cacheпараметр задает время жизни кеша по ключам, например для контактов установлены сутки 24 * 60 * 60 -
domain, client_id, client_secret, redirect_uri- параметры авторизации -
В файле amo.config.php можно задать
contact_cf_partner_id- id поля контакта, по которому ищем партнера -
Соответствие полей запроса и амо, а также настройки именования сделки и куда она попадает, задается в файле request.mapper.php. Тут можно задать воронку, этап куда сделка создается, а также имя для новой сделки:
'pipeline_id' => 1731979, 'status_id' => 26034988, 'lead_name' => 'Заказ из ЛК',
В разделеmappingзадается соответствие полей в запросе, с маппингом полей амо. Сам маппинг амо задается в другом конфиге: amo-fields.mapper.php. Чтобы задать, находим id поля в амо, пишем в маппинг, где для поля сами придумываем машинное имя, которое будет использовано в файле request.mapper.php. Например, в запросе есть поле payment_address_1 - находим в амо его id, создаем запись в amo-fields .mapper.php в виде :'lead.cf.customer_payment_address_1' => [ 'id' => 685733, ],и затем в файле request.mapper.php прописываем соответствие'payment_address_1' => [ 'id' => 'payment_address_1', 'mapped_id' => 'lead.cf.customer_payment_address_1', ],. Иззи) Теперь поле запроса пишется в поле сделки. > -
Остальные, не описанные выше парамеры являются системными для скрипта.
📃 Просмотр логов транзакций приложения
Сброс всех сессий авторизации (разлогинить)
🔑 Генератор хеша для пароля авторизации
-
Данный скрипт выложен для ознакомления. Много осталось не реализованным, к сожалению, продолжения не будет.
-
Вопрос: Почему обертка для api amo на самописе, а не на laravel, например? Ответ: Есть несколько причин. Простота и управляемость. Для многих задач использование laravel является избыточным, как для бюджета, так и для сопровождения.
- Один из примеров - это система вебхуков амо. Отправляя вебхук, амо ожидает от сервера ответ. Причем быстрый. И тут либо у вас есть очереди, либо быстрый сервер. Либо вы отдаете 200. В laravel отдача 200 появилась с 8 версии, и то, там это сделано через php-fpm(fastcgi_finish_request), что для хостингов, которые используют клиенты(а это обычно либо шаред, либо впс, но там тоже не могут его нормально настроить), как оказывается, является проблемой. В данном скрипте есть класс Request и в нем можно задать свой обработчик ответа. Да, на ларавел тоже можно все заменить и переопределить, но смысл фреймворка - использовать его, а не бороться с ним.
- На самом деле планировалась отдельная версия обертки amo api и для laravel. Она должна была стать частью большой системы. Разработка SaaS велась параллельно созданию отдельных Stand Alone Integrations для клиентов. На laravel планировалось построить платформу - с пользователями, кабинетами, подписками, очередями, логированием и прочим, прочим. Разработка остановлена.
-
Features скрипта:
- Конфиги по окружениям и контекстам(можно задать свои).
- Роутинг с laravel-подобным способом задания путей.
- Логи с помощью monolog.
- Service подобные обертки сервисов амо. Сделано для возможности добавления функционала, которого нет в sdk amo.
- Авторизация и авторизация
- Поддержка twig шаблонов и php шаблонов
- Lock файлы
- Работа с БД через PDO обертку
- Кеширование запросов к амо и не только
- Контейнер приложения, доступный в коде скрипта с сервисами
- Сессии и переводы строк
- Все сразу не опишешь)