Отправка заказов из OpenCart в группу Telegram
15 февраля 2020 OpenCart Telegram
Мы уже рассматривали, как создать бота, который отправляет сообщения с сайта в мессенджер Telegram. Сегодня мы научим его отправлять заказы из интернет-магазина на OpenCart.
Содержание
Создаем бота
Боты в Telegram создаются через другого специального бота @BotFather. Нужно найти его и отправить ему команду /start.
Для создания нового бота отправляем следующую команду /newbot. После чего бот запросит имя вашего нового бота, оно обязательно должно заканчиваться на Bot. В случае успеха в ответ получаем уникальный токен бота, который понадобится для дальнейшей работы. И не забудьте добавить вновь созданного бота в ваши контакты отправив ему команду /start
Получаем токен и chat id бота
Чтобы отправить сообщение пользователю через бота достаточно вызвать определенный URL из PHP скрипта содержащий токен бота и внутренний ID чата chat id.
Токен бота у нас уже есть, а chat id можно получить 2 способами:
- Написать боту @ShowJsonBot любой текст. В ответ он вернет вам некие данные в JSON формате. Находим объект chat и в нем id — это и есть ваш chat id.
- В адресной строке ввести https://api.telegram.org/bot<YourBOTToken>/getUpdates где
<YourBOTToken>
— это ранее полученный токен вашего бота. Находим объект chat и в нем id — это и есть ваш chat id.
Отправка сообщений в группу Telegram
Чтобы бот мог отправлять сообщения в группу, необходимо дать ему определенные разрешения.
Опять заходим в @BotFather и вводим следующую команду: /setjoingroups
, выбираем нашего бота и команду Enabled
. Теперь бота можно добавлять в группы. Далее необходимо разрешить боту читать и писать все сообщения, делается это командой /setprivacy
установленной наоборот в Disabled
.
Теперь добавляем бота в группу Telegram, как обычного участника.
Отправка заказов из OpenCart в группу
Копируем файл из каталога OpenCart /catalog/controller/common/order.php в /system/storage/modification/catalog/controller/common/order.php если его там нет.
Брендовая детская одежда и обувь https://babyavenue.com.ua/malchiki-3-8/
Внимание! Если у вас OpenCart 2.x, то можете пропустить этот раздел и сразу перейти к следующему.
Добавляем после строк:
$order_id = $this->model_checkout_order->addOrder($order_data); $this->model_checkout_order->addOrderHistory($order_id, 1); $this->session->data['order_id'] = $order_id; $json['success'] = 1;
Это практически самый конец файла, примерно 216 строка.
Следующий код:
$message = 'Пришел заказ. '; $message .= 'Имя: ' . $name . ' '; $message .= 'Телефон: ' . $ph . ' '; $message .= 'E-mail: ' . $email . ' '; $message .= 'Цена: ' . $totalPrice . ' '; // Токен бота define('TELEGRAM_TOKEN', '123456789:XXXXXXXXXXXXXXXXXXXXXXX'); // ваш внутренний ID define('TELEGRAM_CHATID', '123456789'); $ch = curl_init('https://api.telegram.org/bot'.TELEGRAM_TOKEN.'/sendMessage?chat_id='.TELEGRAM_CHATID.'&text='.$message); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_exec($ch); curl_close($ch);
TELEGRAM_TOKEN
необходимо заменить на токен вашего бота, который получили ранее. TELEGRAM_CHATID
можете указать свой, который так же получили ранее, тогда заказы будут приходить только вам. Если же необходима отправка в группу Telegram, то там нужно будет указать ID группы. Как его получить рассмотрим в статье далее.
Теперь после строк:
array_multisort($sort_order, SORT_ASC, $totals); $pr = array();
Перед началом цикла foreach
. Это примерно 82 строка.
Добавляем туда следующий код:
$totalPrice = 0;
И чуть ниже, в конце цикла foreach
перед закрывающей скобкой добавляем:
$totalPrice = $totalPrice + (($product['price'] + $this->tax->getTax($product['price'], $product['tax_class_id'])) * $product['quantity']);
Это примерно 110 строка. Это нужно для расчёта общей стоимости покупки, которая будет отправлена ботом.
Код для OpenCart 2.x
Для OpenCart 2.x код будет немного другой, его необходимо будет добавить в функцию addOrder()
в файле /catalog/model/checkout/order.php, предварительно переместив его в каталог /system/storage/modification/catalog/model/checkout/
Находим функцию addOrder()
и в самом её конце перед закрывающей скобкой и return $order_id;
добавляем следующий код:
$message = 'Пришел заказ. '; $message .= 'Имя: ' . $data['firstname'] . ' '; $message .= 'Телефон: ' . $data['telephone'] . ' '; $message .= 'E-mail: ' . $data['email'] . ' '; $message .= 'Цена: ' . $totalPrice . ' '; // Токен бота define('TELEGRAM_TOKEN', '123456789:XXXXXXXXXXXXXXXXXXXXXXX'); // ваш внутренний ID define('TELEGRAM_CHATID', '123456789'); $ch = curl_init('https://api.telegram.org/bot'.TELEGRAM_TOKEN.'/sendMessage?chat_id='.TELEGRAM_CHATID.'&text='.$message); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_exec($ch); curl_close($ch);
TELEGRAM_TOKEN
необходимо заменить на токен вашего бота, который получили ранее. TELEGRAM_CHATID
можете указать свой, который так же получили ранее, тогда заказы будут приходить только вам. Если же необходима отправка в группу Telegram, то там нужно будет указать ID группы. Как его получить рассмотрим в статье далее.
Теперь перед циклом:
foreach ($data['products'] as $product) {
Добавляем:
$totalPrice = 0;
И затем в конце этого цикла перед закрывающей скобкой добавляем следующий код:
$totalPrice = $totalPrice + (float)$product['total'];
Этот код рассчитывает общую сумму товаров, которая заносится в переменную $totalPrice
.
Отправка сообщений в группу
Чтобы бот мог отправлять сообщения в группу, необходимо его туда добавить. Сделать это можно в настройках группы в разделе Добавить участника. В поиске необходимо ввести имя вашего бота и нажать OK.
Теперь в настройках скрипта нужно изменить chat id пользователя, на chat id нужной группы. Для этого предварительно нужно написать любое сообщение в чат, а затем в адресной строке ввести https://api.telegram.org/bot<YourBOTToken>/getUpdates где <YourBOTToken>
— это ранее полученный токен вашего бота. После находим объект chat и в нем id — это и будет chat id группы.
Функция для отправки заказов в Telegram
Давайте оформим наш пример в функцию OpenCart. Так будет правильнее.
Открываем на редактирование файл /catalog/controller/common/order.php и самом начале добавляем константы с токеном бота и ID чата Telegram, куда будут приходить сообщения. В TELEGRAM_CHATID можно указать пользователя, группу или сразу несколько чатов, указав их ID через запятую.
// Токен бота define('TELEGRAM_TOKEN', '123456789:XXXXXXXXXXXXXXXXXXXXXXX'); // ваш внутренний ID define('TELEGRAM_CHATID', '123456789');
И внутри класса class ModelCheckoutOrder extends Model
пишем нашу функцию:
public function message_to_telegram($text, $chat) { $ch = curl_init(); curl_setopt_array( $ch, array( CURLOPT_URL => 'https://api.telegram.org/bot' . TELEGRAM_TOKEN . '/sendMessage', CURLOPT_POST => TRUE, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_TIMEOUT => 10, CURLOPT_POSTFIELDS => array( 'chat_id' => $chat, 'text' => $text, ), ) ); curl_exec($ch); }
Далее ниже внутри функции public function addOrder($data)
вызываем функцию нашего бота для каждого чата:
$chats=explode(",", TELEGRAM_CHATID); foreach($chats as $ch) { $this->message_to_telegram('Пришел заказ на сумму '.$data['total'].' руб.', $ch); }
После внесения изменений не забудьте обновить модификаторы в админке.
Супер!
Можно это все обернуть в модуль для OpenСart.
Будет отправляться только сумма заказа?
А как сделать чтоб отправлялся сам заказ
Товар адрес доставки и т.д?
В примере отправляется имя, телефон, e-mail и цена. Но вы можете доработать скрипт и передавать любые другие поля в сообщении.
Вроде все ок, спасибо.
но почему то не приходят письма на почту
Большое спасибо за статью.
Подскажите, пожалуйста, как добавить в функцию возможность отправки имени, телефона, e-mail, а не только суммы заказа?
Антон, подскажите.
Могу я создать бота чтоб отвечал на СМС других пользователей?