msVK (уведомление о новом заказе в ВК для minishop, готовое решение)

В связи с тем, что идет не хорошая тенденция с отключением мессенджеров, я решил переходить на отечественные решения, а именно в ВК.

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

На его базе сделал свое, но для ВК, поэтому оставлю это здесь больше для себя, но да и вдруг кому будет полезно.

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

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

vkhost.github.io/ переходим по этой ссылке, выбираем VKadmin, авторизуемся под аккаунтом, с которого в дальнейшем будут приходить уведомления. После авторизации, из адресной строки забираем адрес.

должно получиться что-то в этом роде oauth.vk.com/blank.html#access_token=vk1.a.ldksahfkjdsahf;klsdaj;dsalj:DSLKJA:KSHFDJSKgakjgdsajfhglsdahfslkdajhLKJSHdfhgdsfkdsjgf&expires_in=0&user_id=1111111&email=myemail@yandex.ru

Я пометил жирным сам токен, он то нам и нужен.
Теперь, номер чата или если говорить правильно peer_id.

ВАЖНО, для каждого аккаунта идентификатор чата разный.
Заходим в чат, в который в дальнейшем планируем передавать уведомления с аккаунта, с которого планируется эти уведомления передавать и опять же смотрим в адресную строку.
Должно выглядеть как-то так:
vk.com/im/convo/2000000104?entrypoint=list_all

Жирным я пометил peer_id

И остается дело за малым, нужно назначить администратором чата, аккаунт с которого планируются уведомления.

После чего создаем плагин с любым именем, я назвал у себя msVK, так же нужно выставить событие msOnCreateOrder и пилим туда код, который ниже:

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

$token = $modx->getOption('mstelegram_token', null, false);
$recipients = explode(',', $modx->getOption('mstelegram_recipients', null, ''));

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

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

$address_tmp=$msOrder->text_address;

if ($msOrder->delivery=="1") {
    $address_tmp="Самовывоз";
}

//================
$token = " "; //Сюда нужно вставить свой токкен
$recipients = array(" "); // Сюда ID вашего чата
//================

$api_version = "5.131";

$message_text = "
Новый заказ #{$msOrder->id}
на сумму {$msOrder->cost} р.
-----
дата и время:
{$msOrder->region},
{$msOrder->country}
-----
{$products}
-----
Адрес: {$address_tmp}";


foreach ($recipients as $id) {
    $id = trim($id);
    if (!$id) continue;

    $random_id = rand(1, 999999999);

    $post_fields = http_build_query([
        'peer_id'      => $id,
        'message'      => $message_text,
        'random_id'    => $random_id,
        'access_token' => $token,
        'v'            => $api_version
    ]);

    $url = "https://api.vk.com/method/messages.send";

    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $post_fields
    ]);

    $result = curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
}
И чисто теоретически, все должно работать =)
Дмитрий
14 декабря 2025, 09:21
modx.pro
2
110
+2

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

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0