СМС

Интеграция с Joomla + VirtueMart, отправка СМС

На днях обратился за помощью клиент, который хотел интегрировать СМС-оповещения в свой интернет-магазин, работающий на бесплатной связке Joomla + VirtueMart. Задача была такова – чтобы сразу после заказа клиенту приходила ободряющая СМСка, что его заказ принят и скоро будет обработан, а администратору магазина сигнализировать о новом заказе.

Итак, что для этого нужно сделать 

  1. Качаем наш PHP-класс, реализующий транспортный протокол для отправки СМС-сообщений по этой ссылке. (для работы нашего PHP-класса требуется PHP 5 и расширение curl)
  2. Создаем в корне вашего сайта папку smsapi
  3. Распаковываем содержимое загруженного архива в только что созданную папку smsapi
  4. Открываем файл config.php и проводим необходимые настройки: HTTPS_LOGIN - ваш логин для работы через транспорт, HTTPS_PASSWORD – ваш пароль (обычно совпадают с теми, что вы указали при регистрации на нашем сайте. Можно изменить их в настройках личного кабинета). HTTPS_CHARSET – если скрипты на вашем сайте сохранены в кодировке utf-8, не меняем значение HTTPS_CHARSET, если же они сохранены в кодировке Windows-1251, ставим utf8. Если ваш сервер не поддерживает HTTPS-запросы, поставьте значение флажка USE_HTTPS = 0.
  5. Теперь требуется модифицировать файл VirtueMart, чтобы он теперь отправлял не только E-mail уведомления, но и СМС. Для этого откройте для редактирования файл, находящийся по адресу administrator/components/com_virtuemart/classes/ps_checkout.php
  6. Находим функцию email_receipt($order_id).
  7. После объявления глобальных переменных global $sess, $ps_product, $VM_LANG … ; вставим наш код, для отправки СМС сообщений:
    require_once("smsapi/transport.php");
    $api = new Transport();
    
    //Отправляем СМС администрации ресурса
    $administrationPhone = "89231113344"; //Ваш номер телефона!
    $params = array("text" => "Поступил новый заказ.");
    $phones = array($administrationPhone);
    $send = $api->send($params,$phones);
    
    //Отправляем СМС клиенту
    $dbu = new ps_DB;
    $q  = "SELECT * FROM #__{vm}_order_user_info WHERE order_id='$order_id'";
    $dbu->query($q);
    $dbu->next_record();
    $params_shopper = array("text" => "Ваш заказ поступил в обработку. В скором времени наши менеджеры с вами свяжутся!");
    $phones_shopper = array($dbu->f("phone_1"));
    $send_shopper = $api->send($params_shopper,$phones_shopper);
  8. Вот и все.  Сохраняем и пробуем!

Справедливости ради замечу, что этот код верен для случая, когда клиент делает заказ, не регистрируясь на сайте. В случае, если клиент уже зарегистрирован, и повторно свои данные не вводит (в том числе и искомое поле phone_1) вам нужно самостоятельно написать код, который бы получал номер телефона клиента в массив $phones_shopper. Думаю, это не составит огромного труда для вас)

Если что – обращайтесь за помощью!

P.S. В комментах человек попросил разобраться как вставить оповещение при смене статуса заказа.

Для этого вставьте вот такой код в файлик /administrator/components/com_virtuemart/classes/ps_order.php , в функцию order_status_update

if ($d['order_status'] == 'R'){
$path = "путь/до/transport.php";
if (file_exists($path)) {
require_once($path);
$api = new Transport();
$dbu = new ps_DB;
$q = "SELECT * FROM #__{vm}_order_user_info WHERE order_id='".$d['order_id']."'";
$dbu->query($q);
$dbu->next_record();
$params_send = array("text" => "Заказ #".$d['order_id']." оплачен!");
$adminPhone = "Номер админа";
$phones = array($adminPhone, $dbu->f("phone_1"));
$send = $api->send($params_send,$phones);
}
}

Вернуться Назад