Особенно весело становится, когда всплывают «мелкие доработки». Типа интеграции с KakaoTalk. Казалось бы, ну что там такого? Мессенджер и мессенджер. Но если вы хоть раз пытались выковырять логику уведомлений из недр 1С-Битрикс и пересадить её на рельсы WordPress, вы знаете, что это сродни пересадке сердца. От чужого донора. В полевых условиях. Ложкой.
Сегодня я расскажу, как мы это делаем. Без купюр, с техническим «мясом» и всей болью, которую приходится пройти, чтобы ваш сайт с битрикс на wordpress переехал не просто как набор статичных страничек, а как живой организм с работающими уведомлениями.
Почему вообще встал этот вопрос? (Боль Битрикса)
Давайте начистоту. Битрикс — мощная система. Монструозная, я бы сказал. Для огромных корпораций с сотнями филиалов, где есть штатный отдел программистов-мазохистов, это может быть и ок. Но для среднего бизнеса, интернет-магазинов, которые хотят просто продавать, а не платить каждый месяц за продление лицензии и «поддержку штанов», Битрикс часто становится якорем.
Он тяжелый. Он требует специфического хостинга (привет, BitrixVM). Его админка способна ввести в депрессию даже жизнерадостного контент-менеджера. И вот наступает момент, когда владелец бизнеса говорит: «Хватит! Хочу WordPress!». И это правильное решение. Вордпресс — это свобода. Это тысячи плагинов, понятный интерфейс и разработчики, которых можно найти не только в Красной книге.
Мы в Spartan.by делаем перенос сайта с 1с-битрикс на wordpress регулярно. Контент переносим, товары, юзеров, SEO сохраняем (это вообще святое, про 301 редиректы я могу часами говорить). Но вот тут начинается самое интересное. У клиента на старом сайте была настроена хитрая система: человек делает заказ, и ему — дзынь! — в KakaoTalk прилетает уведомление: «Ваш заказ №123 принят, спасибо, что вы есть».
И когда мы разворачиваем новый сайт на WP, клиент первым делом тестирует заказ и спрашивает: «А где дзынь?». А нет его. Потому что «движок» сменился, а логика осталась там, в проприетарном коде Битрикса. И никакой «плагин импорта» вам функционал уведомлений не перенесет. Это надо писать руками. Заново.
Как это работало в Битриксе (Взгляд под капот)
Чтобы понять, как перенести, надо понять, как оно работало там. Если вы откроете код старого сайта на Битриксе (не делайте этого на ночь), вы увидите, что интеграция уведомлений там часто реализована через… кхм… скажем так, через нетривиальные решения.
В Битриксе есть система событий. Это когда что-то происходит (например, OnOrderAdd — создан заказ), система орет: «Эй, кто-нибудь, заказ создали!». И модули могут на этот крик реагировать. Скорее всего, у вас стоял какой-нибудь платный модуль из Маркетплейса, либо предыдущий разработчик (да хранит его господь) написал свой обработчик в файле init.php.
Там был код, который собирал данные заказа, формировал XML или JSON и пулял это всё на сервера Kakao. И всё это было густо замешано на внутренних классах Битрикса: CEvent, CModule::IncludeModule(‘sale’) и прочей радости.
Проблема в том, что в WordPress нет init.php в том понимании, нет инфоблоков (ну, точнее, есть, но они по-другому устроены), и вся архитектура другая. Вы не можете просто скопировать тот кусок PHP-кода. Он просто не заработает. Он будет искать классы Битрикса, которых в Вордпрессе нет и быть не может. Поэтому перенос проекта в части интеграций — это всегда разработка с нуля, но с подглядыванием в шпаргалку.
KakaoTalk API: Зверь, с которым нужно дружить
Теперь про сам KakaoTalk. Это вам не Telegram с его ботами, где всё просто как две копейки. У азиатских сервисов своя атмосфера. Документация часто есть на английском, но самые вкусные нюансы — на корейском. Гугл Транслейт, конечно, помогает, но иногда переводит так, что лучше бы не переводил.
Для отправки уведомлений (AlimTalk или просто Message API) нам нужно пройти семь кругов ада с авторизацией. Там используется OAuth 2.0.
- Сначала нужно создать приложение в Kakao Developers.
- Получить REST API Key.
- Настроить Redirect URI.
- Получить Code.
- Обменять Code на Access Token.
- И главное — не забыть про Refresh Token, потому что Access протухает быстрее, чем молоко на солнце.
В Битриксе модуль, скорее всего, делал это всё под капотом. В WordPress, если мы не найдем готовый плагин (а нормальных плагинов для KakaoTalk под ру-сегмент/СНГ практически нет, они все заточены под корейский рынок и их e-commerce плагины), нам придется писать свой мини-клиент API.
Реализация на WordPress: Пишем свой «плагин»
Короче, хватит лирики, давайте к делу. Мы перенесли сайт. У нас стоит чистенький WordPress, возможно WooCommerce для магазина. Нам нужно, чтобы при смене статуса заказа уходило сообщение.
Не ищите легких путей (готовые плагины)
Серьезно. Я видел попытки поставить плагины типа «Kakao Login», надеясь, что там есть и уведомления. Обычно это заканчивается тем, что вы ломаете форму входа на сайте, а уведомления так и не работают. Лучший способ для такой специфической задачи — написать свой функционал в functions.php дочерней темы или, что намного правильнее, оформить как отдельный mu-plugin (must use plugin).
Используем хуки (Hooks) — наше всё
Вордпресс гениален своей системой хуков. Это те же «события» Битрикса, только называются понятнее и работают предсказуемее. Если у вас WooCommerce, нам нужен хук woocommerce_order_status_completed (если шлем, когда заказ выполнен) или woocommerce_new_order (когда только поступил).
Если у вас просто форма обратной связи (Contact Form 7, например), там свои хуки, типа wpcf7_mail_sent.
Код интеграции (Примерная логика)
Я не буду сейчас вываливать сюда полный листинг кода на 500 строк, вы всё равно его не будете копипастить (надеюсь). Но суть такая.
Нам нужна функция, которая:
- Берет данные заказа (ID, сумму, телефон клиента).
- Формирует JSON-пакет по стандарту Kakao API.
- Отправляет это через wp_remote_post (встроенная функция WP, не юзайте голый cURL, это моветон в мире WP).
Выглядит это примерно так (очень упрощенно!):
add_action( 'woocommerce_new_order', 'spartan_send_kakao_notification', 10, 1 );
function spartan_send_kakao_notification( $order_id ) {
// Получаем объект заказа
$order = wc_get_order( $order_id );
if ( ! $order ) return;
// Достаем телефон
$phone = $order->get_billing_phone();
// Формируем сообщение
$message_text = "Привет! Твой заказ №" . $order_id . " принят. Жди звонка.";
// Токен (его лучше хранить в опциях или константах)
$access_token = get_option('kakao_access_token');
// Параметры для Kakao
$body = array(
'template_object' => json_encode(array(
'object_type' => 'text',
'text' => $message_text,
'link' => array(
'web_url' => 'https://spartan.by',
'mobile_web_url' => 'https://spartan.by'
)
))
);
// Отправка
$response = wp_remote_post( 'https://kapi.kakao.com/v2/api/talk/memo/default/send', array(
'method' => 'POST',
'headers' => array(
'Authorization' => 'Bearer ' . $access_token,
'Content-Type' => 'application/x-www-form-urlencoded'
),
'body' => $body
) );
// Логируем ошибки, если есть
if ( is_wp_error( $response ) ) {
error_log( 'Kakao Error: ' . $response->get_error_message() );
}
}
Чувствуете разницу? В Битриксе вы бы полдня искали, где этот обработчик вообще висит. Тут всё прозрачно. Но! Есть нюанс. Токен. Он живет недолго. Значит, нам нужно написать еще одну функцию, которая будет по крону (WP Cron) дергать API Kakao и обновлять токен, используя Refresh Token. Иначе через 6 часов ваши уведомления превратятся в тыкву.
Типичные грабли при переносе
О, их много. Поле граблей просто бесконечное. Во-первых, формат телефона. Битрикс мог хранить телефоны как попало: «+7…», «8…», «7…». KakaoTalk требует жесткого формата. При переносе данных (пользователей) мы в Spartan.by всегда пишем скрипт нормализации телефонов. Если этого не сделать, API вернет ошибку, а вы будете гадать, почему у Пети работает, а у Маши нет.
Во-вторых, хостинг. Битрикс жил на своем сервере с настроенным окружением. WordPress мы переносим, допустим, на обычный VPS. Нужно проверить, открыты ли исходящие соединения на порты Kakao API. Бывало такое, что фаервол просто дропал пакеты, и мы два дня искали ошибку в PHP, пока админ не посмотрел логи сервера.
В-третьих, кодировки. Битрикс иногда бывает в windows-1251 (старые версии). WordPress — это всегда UTF-8. При экспорте базы данных SQL дампом можно получить «кракозябры». И если в контенте мы это видим сразу, то в уведомлениях, которые уходят по API, это может всплыть не сразу. Представьте лицо клиента, которому пришло сообщение «Р—Р°РєР°Р· РїСЂРёРЅСЏС‚».
Кейс Spartan.by: Как мы спасли корейский магазин косметики
Был у нас случай. Клиент торговал корейской косметикой (логично, раз нужен KakaoTalk). У них был старый магазин на «Малом бизнесе» 1С-Битрикс. Тормозил жутко. База товаров огромная, картинки не оптимизированы, кэш раздулся до размеров Юпитера.
Они решили: «Всё, идем на WordPress + WooCommerce». Мы сделали миграцию. Контент перенесли идеально, SEO позиции не просели (мы заморочились с картой редиректов). Но вот интеграция… У них была завязана логистика на Kakao. Менеджеры в Корее получали уведомления о заказах из РФ именно туда. И когда мы переключили DNS на новый сервер, наступила тишина.
Мы полезли разбираться. Оказалось, старый модуль использовал какой-то древний endpoint API, который Kakao уже собирался закрывать. То есть, перенос сайта фактически спас их бизнес-процесс, потому что на старом сайте оно бы скоро и так отвалилось.
Мы написали свой плагинчик (похожий на тот код выше, но сложнее, с очередями и проверкой доставки). Реализовали логирование: теперь в админке WP у каждого заказа есть лог «Уведомление отправлено в 12:00». В Битриксе этого не было, и они часто гадали, ушло сообщение или нет. Клиент счастлив. Сайт летает, админка понятная, уведомления приходят как часы.
Почему стоит доверить это Spartan.by?
Знаете, перенос сайта с битрикс на вордпресс — это как ремонт в квартире. Можно сделать самому. Поклеить обои, вроде ровно. Но потом оказывается, что розетки не там, под плиткой пустота, а проводка искрит. Мы в Spartan.by занимаемся этим годами. Мы знаем, где у Битрикса скелеты в шкафу, а где у Вордпресса подводные камни.
Мы не просто «ставим тему и плагины». Мы разработчики. Мы пишем код. Если вам нужно интегрировать KakaoTalk, Telegram, 1С, CRM систему или черта лысого — мы это напишем. И оно будет работать. Плюс, мы понимаем в SEO. Перенос сайта — это огромный риск для трафика. Если криво перенести URL, забыть метатеги или robots.txt, можно потерять годы продвижения. Мы делаем аудит до, во время и после.
Так что в итоге?
Перенести интеграцию KakaoTalk с Битрикса на WordPress — задача не тривиальная, но решаемая. Главное — забыть подход «найду плагин» и быть готовым немного поработать с кодом. Или найти тех, кто умеет это делать (вы знаете, кому звонить). Вордпресс — это круто. Не бойтесь миграции. Да, в моменте это стресс, это затраты. Но в перспективе года вы сэкономите кучу денег на поддержке, хостинге и нервах контент-менеджеров. А нервы, как известно, не восстанавливаются. В отличие от токенов KakaoTalk, которые мы скриптом обновляем каждые 6 часов.
В общем, не бойтесь перемен. Меняйте старый Битрикс на новый Вордпресс, и будет вам счастье. И уведомления в KakaoTalk. Всем мир!