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
modx.pro
23
1 760
+26
Поблагодарить автора Отправить деньги

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

Андрей
13 февраля 2019, 21:57
+1
Яна, спасибо! Пользуемся уже и довольны :)
    brioni
    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;
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        3