sms уведомление о статусе заказа для minishop2
Победив емейлы для формирования пользователя на сайте, встал вопрос о том как уведомлять клиента о смене статуса заказа.
Я нашел для себя решение, отправлять с рабочего номера телефона, особенно в связке, что за 49 рублей в месяц, безлимитные смс.
мне понадобился вот такой вот плагин, написанный ИИ:
настройки всего 2
$secretToken = 'мой-токен'; его я придумал сам, т.е. абсолютно любой
$apiUrlPath = 'моя_ссылка'; по сути, ее тоже можно указать любой, и в дальнейшем она будет доступна по адресу мой-сайт.ру/моя_ссылка
и теперь нужна софтинка, которая ставится на телефон. Я скачал ее с ТГ с канала @smsgateway
она максимально простая, т.е. по сути, нужно всего лишь прописать в настройках свой токен, и ссылку, и токе и ссылка должны совпадать с теми, которые указаны в плагине, запускаю службу, и вуаля, все работает.
0
Я нашел для себя решение, отправлять с рабочего номера телефона, особенно в связке, что за 49 рублей в месяц, безлимитные смс.
мне понадобился вот такой вот плагин, написанный ИИ:
<?php
/**
* WeBi SMS Gateway Connector for miniShop2
*/
$secretToken = 'мой-токен';
$apiUrlPath = 'моя_ссылка';
// --- 1. ОБРАБОТКА ЗАПРОСОВ ОТ ПРИЛОЖЕНИЯ (POST/GET) ---
if ($modx->event->name == 'OnPageNotFound') {
$q = $_GET['q'] ?? trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
if (strpos($q, $apiUrlPath) === false) return;
$token = $_POST['token'] ?? $_GET['token'] ?? '';
$type = $_POST['type'] ?? $_GET['type'] ?? 'get_sms';
if ($token !== $secretToken) {
header('Content-Type: application/json');
die(json_encode(['error' => 'Unauthorized Access']));
}
// ТИП: Запрос списка СМС
if ($type == 'get_sms') {
$output = [];
$orders = $modx->getCollection('msOrder', ['properties:LIKE' => '%"sent":false%']);
foreach ($orders as $order) {
$props = $order->get('properties');
if (empty($props['sms_queue'])) continue;
foreach ($props['sms_queue'] as $index => $sms) {
if (isset($sms['sent']) && $sms['sent'] === false) {
$uniqueMsgId = $order->get('id') . $index;
$output[$uniqueMsgId] = [
'phone' => (strpos($sms['phone'], '+') === false ? '+' : '') . $sms['phone'],
'text' => $sms['text'],
'id_sim' => '1' // Всегда отправляем с первой симки
];
}
}
}
header('Content-Type: application/json');
if (empty($output)) exit('');
exit(json_encode($output, JSON_UNESCAPED_UNICODE));
}
// ТИП: Подтверждение отправки (просто помечаем как отправлено)
if ($type == 'sms_send') {
$msgId = $_POST['id_message'] ?? $_GET['id_message'] ?? '';
if ($msgId) {
$orderId = substr($msgId, 0, -1);
$order = $modx->getObject('msOrder', $orderId);
if ($order) {
$props = $order->get('properties');
if (!empty($props['sms_queue'])) {
foreach ($props['sms_queue'] as &$item) {
$item['sent'] = true;
$item['sent_at'] = date('Y-m-d H:i:s');
}
$order->set('properties', $props);
$order->save();
}
}
}
exit('OK');
}
if ($type == 'call_in' || $type == 'sms_in') exit('OK');
}
// --- 2. ЗАПИСЬ SMS ПРИ СМЕНЕ СТАТУСА ---
if ($modx->event->name == 'msOnChangeOrderStatus') {
/** @var msOrder $order */
$messages = [
1 => "Вы сделали заказ # [[+id]] на сайте iflower-shop.ru",
2 => "Вы оплатили заказ # [[+id]]",
3 => "Ваш заказ # [[+id]] доставлен.",
4 => "Заказ # [[+id]] отменен"
];
if (!isset($messages[$status])) return;
$phone = '';
$address = $order->getOne('Address');
if ($address) { $phone = $address->get('phone') ?: $address->get('receiver_phone'); }
if (empty($phone)) {
$user = $order->getOne('User');
if ($user && $profile = $user->getOne('Profile')) {
$phone = $profile->get('phone') ?: $profile->get('mobilephone');
}
}
$phone = preg_replace('/[^0-9]/', '', $phone);
if (empty($phone)) return;
$fields = $order->toArray();
$text = str_replace(
array_map(fn($k) => "[[+{$k}]]", array_keys($fields)),
array_values($fields),
$messages[$status]
);
$props = $order->get('properties') ?: [];
if (!isset($props['sms_queue'])) $props['sms_queue'] = [];
$props['sms_queue'][] = [
'phone' => $phone,
'text' => $text,
'sent' => false,
'created_at' => date('Y-m-d H:i:s')
];
$order->set('properties', $props);
$order->save();
}события выставил на msOnChangeOrderStatus и OnPageNotFoundнастройки всего 2
$secretToken = 'мой-токен'; его я придумал сам, т.е. абсолютно любой
$apiUrlPath = 'моя_ссылка'; по сути, ее тоже можно указать любой, и в дальнейшем она будет доступна по адресу мой-сайт.ру/моя_ссылка
и теперь нужна софтинка, которая ставится на телефон. Я скачал ее с ТГ с канала @smsgateway
она максимально простая, т.е. по сути, нужно всего лишь прописать в настройках свой токен, и ссылку, и токе и ссылка должны совпадать с теми, которые указаны в плагине, запускаю службу, и вуаля, все работает.