Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
%total% для %data doSelection()%

Автор albionРаздел Макросы UMI.CMS

Ответов: 5
Просмотров: 5290
Последний ответ 24 Июля 2011, 10:29:40
от albion
autothumbs.php версии 2,8,4

Автор albionРаздел Настройка системы и модулей

Ответов: 6
Просмотров: 6245
Последний ответ 21 Июля 2011, 18:00:19
от admin
Фильтр по полю

Автор mihdanРаздел Шаблоны XSLT

Ответов: 1
Просмотров: 2241
Последний ответ 18 Октября 2013, 22:53:46
от PHOENIX-75
Не выводятся все теги в xslt

Автор goodprofyРаздел Шаблоны XSLT

Ответов: 2
Просмотров: 3837
Последний ответ 03 Июня 2014, 13:52:04
от goodprofy
webforms & XSLT & модальное окно

Автор graveРаздел JS и AJAX

Ответов: 8
Просмотров: 8562
Последний ответ 13 Июня 2011, 00:41:56
от talanter

0 Пользователей и 1 Гость просматривают эту тему.

*

psw2020

  • *
  • 11
  • +3/-0
    • Просмотр профиля
Для этого нужно будет создать обработчик события отправки сообщения для  формы обратной связи, запрос к API сервиса ePochta (не сочтите за рекламу), и JS обработчик для поля номера телефона в форме обратной связи на стороне клиенты (для придания номеру телефона корректного формата).

Итак добавляем обработчик события отправки сообщения:
В файле /classes/modules/webforms/custom_events.php пишем код:
<?php
 $oAddWebformSms = new umiEventListener("webforms_post", "webforms", "SendSMS");
?>

Готовим запрос к API в следующем формате:
$params ['version'] ="3.0"; // Версия API
$params ['action'] = "sendSMS"; // Метод к которому обращаемся
$params ['key'] = ""; //Публичный ключ (предоставляется сервисом)
$params ['sender'] = "Test"; //Имя отправителя SMS
$params ['text'] = "Спасибо за заявку"; //Текст сообщения
$params ['phone'] = "+79871234567"; //Номер телефона на который отправляем (формат обязателен)
$params ['datetime'] = ""; //Время для отложенной отправки, пустой параметр - моментальная отправка
$params ['sms_lifetime'] = "0"; // Время жизни сообщения, 0 - максимальное время
$params ['type'] = "2"; // 2 - отправка от имени 'sender, 3 - отправка с произвольного номера сервиса
ksort ($params); //Сортировка параметров, обязательна для создания котрольной суммы
$sum='';
foreach ($params as $k=>$v)
$sum.=$v; // Конкатенация значений
$sum .= $privateKey; //Конкатенация значений с приватным ключом (предоставляется сервисом)
$control_sum =  md5($sum); // Получение контрольной суммы запроса
$params ['sum'] = $control_sum; //Запись контрольной суммы для отправки

В файле /classes/modules/webforms/__custom.php Добавляем макрос:
public function SendSMS(iUmiEventPoint $oEventPoint) {

$thisFormId = $oEventPoint->getParam("form_id", $iFormTypeId); //Записываем в переменную ID формы связи, т.к. для отправки смс будем использовать конкректную форму

if($thisFormId="902"){ //Проверка - та ли это форма? В моем случаем ID формы 902.

$phoneNumber = $_REQUEST['data']['new']['nomer_telefona']; //Записываем в переменную номер телефона переданный из формы обратной связи по её текстовому идентификатору, в моем случае это 'nomer_telefona'

/*Параметры что мы подготовили ранее*/
$params ['version'] ="3.0";
$params ['action'] = "sendSMS";
$params ['key'] = "";
$params ['sender'] = "Test";
$params ['text'] = "Спасибо за заявку";
$params ['phone'] = $phoneNumber; //Подставляем номер телефона из формы
$params ['datetime'] = "";
$params ['sms_lifetime'] = "0";
ksort ($params);
$sum='';
foreach ($params as $k=>$v)
$sum.=$v;
$sum .= $privateKey;
$control_sum =  md5($sum);
$params ['sum'] = $control_sum;

/*Посылаем запрос к API*/
$url = 'http://atompark.com/api/sms/3.0/sendSMS';
$result = file_get_contents($url, false, stream_context_create(array(
    'http' => array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => http_build_query($params)
    )
)));
};

    return true;
  }

Осталось только придать номеру телефону нужный формат на стороне клиента, для это я использовал плагин jQuery Mask:
<script>
$(document).ready(function(){
$('[name="data[new][nomer_telefona]"]').focusin(function(){
$('[name="data[new][nomer_telefona]"]').mask('+70000000000',{placeholder: "+79871234567"});
})
});
</script>

Вот и всё, отныне отправитель сообщения через форму с ID 902, будет получать SMS сообщение. Подробнее про работу плагина и API сервиса можно почитать в интернетах ;)
« Последнее редактирование: 16 Июля 2014, 11:59:20 от psw2020 »