[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().
19 сентября 2016, 02:26    but1head   
16    981 +18

Комментарии (6)

  1. but1head 20 сентября 2016, 19:08 # +5
    Опубликовали в modstore
    1. Александр 21 сентября 2016, 03:04 # 0
      Спасибо! пригодится)
    2. Александр 26 сентября 2016, 14:12 # 0
      Добрый день.
      Помогите настроить плагин на работу с Shopkeeper 3? Кто нибудь знает как это сделать?
      1. Константин 02 июля 2017, 12:44 # 0
        День добрый.
        Подскажите почему может не отображаться почта в сообщении, которую указывает клиент?
        // Текст сообщения
        $message = "
        Новый заказ #{$msOrder->num}
        на сумму {$msOrder->cost} р.
        -----
        {$products}
        -----
        Клиент: {$contacts->receiver}
        -----
        Телефон: {$contacts->phone}
        -----
        Почта: {$contacts->email}
        -----
        Комментарий: {$contacts->comment}";
        
        1. Володя 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}
          
          1. Константин 02 июля 2017, 13:11 # 0
            Теперь знаю куда смотреть) Спасибо за помощь
        Вы должны авторизоваться, чтобы оставлять комментарии.