SMSC.ru хук

Всем привет, хотела запостить в modstore, но там уже есть похожие платные дополнения.
Хук для FormIt, который отправляет SMS.
Нужно добавить _smschook_ в _hooks_ вызова сниппета (перед mail). В системных настройках Formit указать ключи:

  • Логин — [[++smschook_login]]
  • Пароль — [[++smschook_password]]
  • Телефоны — [[++smschook_phones]] в формате КОД СТРАНЫ + НОМЕР ТЕЛЕФОНА (без +), можно указать несколько через запятую
  • smschook_tpl — чанк по аналогии чанка для писем
  • smschook_phones — сюда можно передать телефоны
Пример вызова:
{'!AjaxForm' | snippet : [
     'form' => 'tpl.AjaxForm.example',
    'emailTpl' => 'contactEmailTpl',
    'hooks' => 'smschook,email',
    'emailFrom' => $_modx->config.emailsender,
    'emailFromName' => $_modx->config.site_name,
    'emailSubject' => 'Сообщение с сайта' ~ $_modx->config.site_name,
    'emailTo' => $_modx->config.emailsender,
    'validate' => 'name:equired',
     'smschook_tpl' => 'smscTpl',
]}
yani
13 февраля 2019, 21:46
20
431
+26

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

Андрей
13 февраля 2019, 21:57
+1
Яна, спасибо! Пользуемся уже и довольны :)
Yar
Yar
14 февраля 2019, 10:51
0
Какая умница. Благодарю
Александр
26 марта 2019, 18:13
0
Попробовали использовать и
1 вешался модкс на строке
$mes = $modx->getChunk($tpl, $scriptProperties);
2 не отправлял сообщения с пробелами.
Вот переписанный smschook
<?php
$fields = $hook->getValues();
$phones = $scriptProperties['smschook_phones'];
if(empty($phones)){
    $phones = $modx->getOption('smschook_phones', null, '');
}

$tpl = $scriptProperties['smschook_tpl'];
$mes = $modx->getChunk($tpl, $fields);
//return true;
$data = [
    'login' => $modx->getOption('smschook_login', null, ''),
    'psw' => $modx->getOption('smschook_password', null, ''),
    'phones' => $phones,
    'mes' => $mes
];

if (empty($data['login']) || empty($data['psw'])
    || empty($data['phones']) || empty($data['mes']) || empty($scriptProperties['smschook_tpl'])) {
    $modx->log(modX::LOG_LEVEL_ERROR, '[smscHook] Error sending SMS: empty login, password, phones, message or tpl'.$data['login'].$data['psw'].$phones.$tpl );
    return true;
}

$link = 'https://smsc.ru/sys/send.php?login=' . $data['login'] . '&psw=' . $data['psw'] . '&phones=' . $data['phones'] . '&mes=' . urlencode($data['mes']) . '&charset=utf-8';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $link);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == 200 && substr($res, 0, 2) == 'OK') {
    curl_close($ch);
    return true;
}
$modx->log(modX::LOG_LEVEL_ERROR, '[smscHook] Error sending SMS: ' . print_r(curl_getinfo($ch), true));
curl_close($ch);
return true;
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.