[msTelegram] Уведомления о заказе в telegram

Небольшой плагин на уведомление о новом заказе в телеграм, отличная замена сервисам смс рассылки.

Сделано на основе гайда от Михаила.
Как получить токен, узнать айди чата и тд так же отлично расписано в гайде.




Плагин вешается на событие msOnCreateOrder.

if($modx->event->name != 'msOnCreateOrder') return;

$token = '<token>';
$contacts = $modx->getObject('msOrderAddress', array('id'=> $msOrder->address));
$_products = $msOrder->getMany('Products');

// Список получателей, у меня их много, если будет один можно обойтись одной переменной и убрать foreach
$recipients = array(
    '<chat id>'
);

// Список товаров в заказе
$i = 0;
$products = '';
foreach ($_products as $product) {
    $i++;
    $products .= "{$i}. {$product->name} ({$product->count} шт.)";
}

// Текст сообщения
$message = "
Новый заказ #{$msOrder->num}
на сумму {$msOrder->cost} р.
-----
{$products}
-----
Телефон: {$contacts->phone}";

$message = urlencode($message);
foreach($recipients as $id){
    $url = "https://api.telegram.org/bot{$token}/sendMessage?chat_id={$id}&text={$message}";
    $ch = curl_init();
    curl_setopt_array($ch, array(CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true));
    $result = curl_exec($ch);
    curl_close($ch);
}
p.s. fopen заменил на curl т.к. на некоторых устройствах получал сообщение в виде urlencode().
but1head
18 сентября 2016, 23:26
modx.pro
17
5 231
+18

Комментарии: 21

but1head
20 сентября 2016, 19:08
+5
Опубликовали в modstore
Александр
26 сентября 2016, 14:12
0
Добрый день.
Помогите настроить плагин на работу с Shopkeeper 3? Кто нибудь знает как это сделать?
    Константин
    02 июля 2017, 12:44
    0
    День добрый.
    Подскажите почему может не отображаться почта в сообщении, которую указывает клиент?
    // Текст сообщения
    $message = "
    Новый заказ #{$msOrder->num}
    на сумму {$msOrder->cost} р.
    -----
    {$products}
    -----
    Клиент: {$contacts->receiver}
    -----
    Телефон: {$contacts->phone}
    -----
    Почта: {$contacts->email}
    -----
    Комментарий: {$contacts->comment}";
      Володя
      02 июля 2017, 12:51
      +1
      если посмотреть сюда github.com/bezumkin/miniShop2/blob/master/core/components/minishop2/model/schema/minishop2.mysql.schema.xml#L337-L352
      то видно что там нет поля email.

      нужно получить профиль пользователя и оттуда взять email
      $profile = $msOrder->getOne('UserProfile')
      {$profile->email}
        Константин
        02 июля 2017, 13:11
        0
        Теперь знаю куда смотреть) Спасибо за помощь
          Алексей
          17 октября 2020, 22:40
          0
          А как получить варианты доставки и оплаты?
          Подскажите пожалуйста, что-то не разберусь.
            Александр
            18 ноября 2020, 12:17
            0
            if ($msOrder->delivery == '1') {
                $deli = "Способ доставки: Самовывоз";
                } else {
                  
               $deli = "Способ доставки: Доставка";
            }
            
            if ($msOrder->payment == '1') {
                $pay = "Способ оплаты: Оплата в магазине";
                } else {
                    
               $pay = "Способ оплаты: Онлайн картой";
            }
            Сделал так, кривовато конечно, но логика такая — подстроите под себя
            Александр
            30 ноября 2020, 11:12
            0
            А изображение продукта можно как-то получить? Не подскажете?
          Александр
          19 июня 2018, 08:05
          0
          Приветствую! Плагин работает отлично! Не подскажете, как добавить адрес доставки?
            Александр
            23 июля 2018, 12:25
            0
            Вопрос про добавление адреса доставки решен.
              Александр
              18 ноября 2020, 11:40
              0
              Добрый день, а не поделитесь решением?
                Александр
                18 ноября 2020, 11:50
                0
                // Текст сообщения
                $message = "
                Новый заказ #{$msOrder->num}
                на сумму {$msOrder->cost} р.
                Оплата: {$msOrder->payment}
                -----
                {$products}
                -----
                Имя: {$contacts->receiver}
                Телефон: {$contacts->phone}
                Email: {$profile->email}
                Улица: {$contacts->street}
                Дом: {$contacts->building}
                Квартира: {$contacts->room}
                Комментарий: {$contacts->comment}";
                  Александр
                  18 ноября 2020, 11:52
                  0
                  Простите, что отвлёк, не туда комментарий оставил. Искал варианты оплаты и доставки. Спасибо!
            Sergey
            10 сентября 2019, 09:39
            0
            Как изменить текст сообщения? Создал сниппет, хотел изменить текст сообщения, сохраняю, но в телеграмму приходит старый
              Ishvan
              11 сентября 2019, 11:17
              +1
                Sergey
                11 сентября 2019, 11:21
                0
                Спасибо большое
              Rodion
              21 октября 2019, 12:47
              0
              Добрый день! Все настроил по инструкции. Но при заказе отправка в телегу не идет.
              Как можно отладить? и проверить?
                Влад
                30 декабря 2020, 13:28
                0
                Добрый день! Может кто подсказать, как еще достать артикул товара?
                $product->article
                не проходит
                При этом
                $product->product_id
                работает, но это не является решением
                  Николай Савин
                  30 декабря 2020, 15:03
                  +1
                  $product->Product->get('article')
                    Влад
                    30 декабря 2020, 15:57
                    0
                    Был близок пробуя что-то подобное :D
                    $product->get('article')
                    Спасибо за Ваш ответ, Николай! Всё работает
                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                  21