Интеграция плагина "Лейка" для Wordpress с Битрикс24
О заказчике
Благотворительный Фонд Архангела Михаила занимается сбором пожертвований от доноров на строительство и реконструкцию православных храмов России.
Задача проекта
У каждого объекта пожертвования есть отдельная страница на сайте с приемом оплаты. Сайт работает на CMS Wordpress. Для приема пожертвований используется бесплатный плагин для Wordpress «Лейка». Он разработан для НКО, позволяет создавать формы для пожертвований, подключить платежную систему для приема оплаты, отслеживать разовые и регулярные пожертвования, их статусы.
Для дальнейшей работы с пожертвованиями и донорами заказчик использует Битрикс24. В Битрикс24 пожертвования заносились вручную: Сделка – Пожертвование и его данные. Контакт – Донор и его контактные данные.
При ручной работе с пожертвованиями постоянно возникали различные проблемы.
Пожертвование от нового донора:
-
Сделка пожертвования может быть не создана (забыли, не увидели пожертвование вовремя и т.д.;
-
Сделка может быть создана несколько раз (создание дубля);
-
Обновления данных пожертвования могут попасть в сделку с задержкой, либо не попасть вовсе;
Пожертвование от известного донора:
-
Контакт донора может быть создан повторно (создание дубля);
-
Если контакт донора все же был найден по телефону или email, новые контактные данные могут быть не добавлены в карточку контакта;
Реализация
Чтобы автоматизировать работу с пожертвованиями в Битрикс24 мы разработали интеграцию, которая автоматически создает сделки и контакты на основе пожертвований и обновляет их при изменениях данных пожертвований.
Для решения задачи автоматизации работы с пожертвованиями и донорами в Битрикс24 мы разработали свой плагин для Wordpress заказчика.
Это позволило во – первых, держать свой код в одном месте и не разводить его по разным частям кода «Лейки», Wordpress и файлов используемой в Wordpress темы. А во-вторых, не зависеть от обновлений «Лейки» и установленной темы при которых сторонний код удаляется.
Плагин построен на «событиях» Wordpress и действиях после них (хуках), работает с Битрикс24 и созданными постами Wordpress, преобразует их данные для Битрикс24. В Битрикс24 они отправляются с помощью его REST API: создание/изменение сделок и контактов, проверка на дубли.
«Лейка»
Пожертвование в «Лейке» с точки зрения Wordpress является постом с post_type равным leyka_donation, поэтому работа с пожертвованием в плагине строится на том, что пожертвование — это пост.
В «Лейке» пожертвование имеет 3 главных статуса, которые меняются. У поста это поле post_status:
«Попытка пожертвования» (submitted) - пожертвование создается «Лейкой» на основе заполненной на сайте формы;
«Оплачено» (funded) - после заполнения формы и приема оплаты приходит ответ платежной системы о том, что платеж прошел успешно;
«Ошибка» (failed) - после заполнения формы и приема оплаты приходит ответ платежной системы о том, что платеж прошел не успешно;
Для отслеживания создания поста и изменения его post_status мы использовали «событие» поста Wordpress - transition_post_status. Для выполнения нашего кода после изменения статусов поста мы использовали хук типа action.
Обработчик изменения пожертвования
У поста пожертвования есть основные и кастомные поля.
Основные содержат служебную для Wordpress информацию. Например, post_status, post_date_gmt (дата-время создания поста).
Кастомные могут быть созданы пользователем вручную и помещены в форму, чтобы их заполнил донор. Например, телефон, почта, комментарий. Также к ним относятся поля, которые для поста создали разработчики «Лейки» (начинаются с leyka_).
В обработчике и для передачи в Битрикс24 используются кастомные поля.
К кастомным полям относятся:
leyka_campaign_id – id Кампании пожертвования (объекта).
Каждая Кампания является отдельным постом. Чтобы получить строку названия кампании, используем функцию Wordpress get_post;
leyka_donation_amount – сумма пожертвования;
leyka_payment_type – разовый (single) или регулярный (rebill) тип платежа. При создании пожертвования всегда разовый, пока ответ платежной системы не изменит его;
leyka_donor_name – имя донора;
leyka_donor_email – email донора;
leyka_donor_comment – Комментарий пожертвования;
Отдельно отметим многосоставное поле leyka_donor_comment.
В него «Лейка» записывает значения пользовательских полей из форм. Все значения содержатся в единой строке.
Действия обработчика
Хук добавляется в Wordpress через метод add_action и вызывает функцию обработчик изменения статуса поста и передает ей старый и новый статус поста, а также объект поста с основными полями.
В зависимости от нового статуса обработчик выполняет разные действия:
submitted («Попытка пожертвования»):
В самом начале получаем кастомные поля поста с помощью функции Wordpress get_post_meta.
После этого извлекаем значения полей формы из строки leyka_donor_comment и преобразуем их для записи в Битрикс24: задаем соответствующие значения для списочных и строковых полей.
На основе преобразованных значений с помощью REST-метода crm.deal.add создаем в Битрикс24 новую сделку со следующими полями:
-
Название – Имя донора из формы;
-
Сумма – сумма пожертвования из формы;
-
Тип пожертвования – Тип пожертвования из формы;
-
Статус – Попытка пожертвования;
-
Проект – Кампания пожертвования, которой привязана форма;
-
Дата завершения – Дата создания пожертвования в «Лейке»;
-
Адрес – Адрес донора из формы;
-
Почтовый индекс – Почтовый индекс донора из формы;
-
Комментарий – Комментарий донора к пожертвованию из формы;
-
Имена о здравии – Имена, о здравии которых донор просит помолиться за пожертвование. Заполняется в форме;
-
Имена о упокоении – Имена, о упокоении которых донор просит помолиться за пожертвование. Заполняется в форме;
-
Стадия – Новое пожертвование;
-
Направление – Обработчик;
Ищем контакты в Битрикс24 поочередно по email и телефону донора через механизм поиска дублей: с помощью REST-метода crm.duplicate.findbycomm.
Если контакт найден, прикрепляем его к созданной сделке пожертвования.
Если контакт не найден, создаем новый на основе преобразованных значений полей пожертвования с помощью REST-метода crm.contact.add:
-
Имя – Имя донора из формы;
-
Телефон – Телефон донора из формы;
-
Email – Email донора из формы;
-
Город – Город донора из формы;
Если контакт на предыдущем шаге был найден с помощью телефона, в контакт добавляется новая почта донора из формы.
Если контакт был найден с помощью email, в контакт добавляется новый телефон донора из формы.
Для этого мы просто делаем обновление контакта телефоном и email из формы с помощью REST-метода crm.contact.update.
C помощью метода Wordpress update_post_meta к посту пожертвования добавляется поле b24_deal_id. В него мы записываем ID созданной сделки. Это нужно для упрощения обновления сделки на других статусах поста.
funded («Оплачено»):
После заполнения формы и приема оплаты приходит ответ платежной системы о том, что платеж прошел успешно. Значение основного поля поста post_status теперь стало funded.
Также в ответе платежной системы приходит информация о типе платежа: разовый он был или регулярный. Значение кастомного поля поста leyka_payment_type теперь стало rebill (регулярный), либо осталось single (разовый).
Получаем кастомные поля поста с помощью функции Wordpress get_post_meta.
Преобразуем значения полей, которые были перезаписаны ответом платежной системы.
Записываем преобразованные значения в сделку пожертвования, которую мы записали в поле b24_deal_id на статусе submitted («Попытка пожертвования»):
-
Стадия – Успешно;
-
Статус – Оплачено;
-
Тип платежа – Регулярный или разовый;
failed («Ошибка»):
После заполнения формы и приема оплаты приходит ответ платежной системы о том, что платеж прошел не успешно. Значение основного поля поста post_status теперь стало failed.
Также в ответе платежной системы приходит информация о типе платежа: разовый он был или регулярный. Значение кастомного поля поста leyka_payment_type теперь стало rebill (регулярный), либо осталось single (разовый).
Получаем кастомные поля поста с помощью функции Wordpress get_post_meta.
Преобразуем значения полей, которые были перезаписаны ответом платежной системы.
Записываем преобразованные значения в сделку пожертвования, которую мы записали в поле b24_deal_id на статусе submitted («Попытка пожертвования»):
-
Стадия – Провал;
-
Статус – Платеж завершен с ошибкой;
-
Тип платежа – Регулярный или разовый;
-
Сумма – 0;
В результате получился автоматизированный механизм обработки пожертвований, интегрирующий «Лейку» и Битрикс24. Все возможные ошибки, возникавшие из-за человеческого фактора, устранены, и все данные, которые должны попасть в CRM, обязательно туда попадут в правильном виде.