Перейти к содержанию
Официальный форум поддержки Simpla

[2.*] Модуль sms-оповещения vipsms.net


Рекомендуемые сообщения

Собственно модуль и отсылает смс используя шлюз vipsms.net. апи взято из сайта провайдера.

 

Возможности:

- отправка смс

- просмотр баланса в настройках сайта

 

1. Проверьте что у вас работает и включен модуль PHP SOAP

2. Заходим в api/Notify.php и добавляем туда в самый низ до последней закрывающей скобки '}' две новые ф-и смс

	public function send_sms($phone, $message) {
		// Проверяем доступность расширения SOAP
		if (!extension_loaded('soap'))
			echo "Ошибка! Модуль PHP SOAP не подключен.";
 
		$enc_terminal = 'utf-8';
 
		// Ваши идентификационные данные
		$login  = $this->settings->sms_login;
		$passwd = $this->settings->sms_passw;
 		$sign   = $this->settings->sms_alias;

		$client = new SoapClient('http://vipsms.net/api/soap.html');
 
		// Функция пытается осуществить подключение к серверу
		// в случае удали получит индетификатор сессии
		$res = $client->auth($login, $passwd);
		if ($res->code!=0){
		//    echo "Внимание, ошибка:\n";
		//    echo " код   : {$res->code}\n";
		//    echo " сообщение: {$res->message}\n";
		//    if ($res->extend && is_array($res->extend)){
		//        echo " описание: ".iconv('utf-8', $enc_terminal, var_export($res->extend, true))."\n";
		//    }
		    return;
		}
 
		// Идентификатор сессиии
		$sessid = $res->message;
		$phones = explode(',', $phone);
		foreach($phones as $p)
			$res = $client->sendSmsOne($sessid, $p, $sign, $message);

		if ($res->code!=0){
		//    echo "Внимание, ошибка:\n";
		//    echo " код   : {$res->code}\n";
		//    echo " сообщение: {$res->message}\n";
		//    if ($res->extend && is_array($res->extend)){
		//        echo " описание: ".iconv('utf-8', $enc_terminal, var_export($res->extend, true))."\n";
		//    }
		    return;
		}
	}

	public function get_sms_balance() {
		if (!extension_loaded('soap'))
			echo "Ошибка! Модуль PHP SOAP не подключен.";
 
		$enc_terminal = 'utf-8';
 
		// Ваши идентификационные данные
		$login  = $this->settings->sms_login;
		$passwd = $this->settings->sms_passw;
 		$sign   = $this->settings->sms_alias;

		$client = new SoapClient('http://vipsms.net/api/soap.html');
 
		// Функция пытается осуществить подключение к серверу
		// в случае удали получит индетификатор сессии
		$res = $client->auth($login, $passwd);
		if ($res->code!=0){
		    echo "Внимание, ошибка:\n";
		    echo " код   : {$res->code}\n";
		    echo " сообщение: {$res->message}\n";
		    if ($res->extend && is_array($res->extend)){
		        echo " описание: ".iconv('utf-8', $enc_terminal, var_export($res->extend, true))."\n";
		    }

		    return;
		}
 
		// Идентификатор сессиии
		$sessid = $res->message;

		$res = $client->getBalance($sessid);
		if ($res->code!=0){
		    echo "Внимание, ошибка:\n";
		    echo " код   : {$res->code}\n";
		    echo " сообщение: {$res->message}\n";
		    if ($res->extend && is_array($res->extend)){
		        echo " описание: ".iconv('utf-8', $enc_terminal, var_export($res->extend, true))."\n";
		    }
		    return;
		}
 
 		return $res->message;
	}

 

3. чтобы параметры подгружались с админки добавляем в simpla/SettignsAdmin.php

$this->settings->sms_login = $this->request->post('sms_login');
$this->settings->sms_passw = $this->request->post('sms_passw');
$this->settings->sms_alias = $this->request->post('sms_alias');
$this->settings->sms_admin = $this->request->post('sms_admin');

4. в этом же файле если хотите чтобы показывался ваш баланс в системе добавляем после

$this->design->assign('managers', $managers);

код

$ballance = $this->notify->get_sms_balance();
$this->design->assign('ballance', $ballance);

 

5. и в файл дизайна simpla/design/html/settings.tpl добавляем блок с настройками смс

<div class="block">
	<h2>Настройки СМС</h2>
	<ul>
		<li><label class=property>Логин</label><input name="sms_login" class="simpla_inp" type="text" value="{$settings->sms_login}" /></li>
		<li><label class=property>Пароль</label><input name="sms_passw" class="simpla_inp" type="text" value="{$settings->sms_passw}" /></li>
		<li><label class=property>Подпись</label><input name="sms_alias" class="simpla_inp" type="text" value="{$settings->sms_alias}" /></li>
		<li><label class=property>Телефон администратора</label><input name="sms_admin" class="simpla_inp" type="text" value="{$settings->sms_admin}" /></li>

		<li><label class=property>На балансе</label><input class="simpla_inp" type="text" value="{$ballance}" disabled /></li>
	</ul>
</div>

 

6. вызываем ф-ю где вам нужно. например для оповещения о новом заказе админу это будет выглядеть так (в view/CartView.php)

после

$this->notify->email_order_admin($order->id);

добавляем

// Отправляем смс администратору(ам)
$this->notify->send_sms($this->settings->sms_admin, 'У вас новый заказ #'.$order->id);

 

в админке указываем данные подключения. телефонов можно указать несколько через запятую без пробела

в итоге выйдет что-то такое https://yadi.sk/i/aErL17_juJ4XT

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

Супер!

Единственный вопрос - почему send_sms_balance()??? Ведь функция делает прямо противоположное :)

Почему не get_sms_balance()?

Ссылка на сообщение
Поделиться на другие сайты

Супер!

<kors mode on>

Единственный вопрос - почему send_sms_balance()??? Ведь функция делает прямо противоположное :)

Почему не get_sms_balance()?

<kors mode off>

 

ахах, и правда). мне просто было впадло переименовать первую, дописал до старого названия)). поменял

Ссылка на сообщение
Поделиться на другие сайты

1. Код написан  весьма нерационально.  Коды двух приведенных функций совпадают эдак процентов на 90. Налицо классический обучающий пример для начинающих программистов, как НЕ надо делать...

 

2. И еще интересный вопрос. Что будет при оформлении заказа покупателем, если SMS по каким-то причинам не отправится (например, баланс закончится) ?  При отправке формы заказа обычного  перехода на страницу заказа не будет а покупатель увидит на странице корзины что-то типа

 

Внимание, ошибка:
код : 440
сообщение: тра-та-та
Warning: Cannot modify header information - headers already sent by (output started at...

 

Остается лишь немного пожалеть простого покупателя и сильно пожалеть владельца сайта, воспользовавшегося предложенным программным продуктом. Устанавливать такое себе на сайт - это как закладывать бомбу замедленного действия...

 

Налицо опять классический обучающий пример для начинающих программистов, как не надо спешить, а надо полностью проверять работу во всех возможных ситуациях...

Ссылка на сообщение
Поделиться на другие сайты

1. Код написан  весьма нерационально.  Коды двух приведенных функций совпадают эдак процентов на 90. Налицо классический обучающий пример для начинающих программистов, как НЕ надо делать...

 ...

 

конечно можно все отдельно вынести в ф-и и бла бла. и? вы получите от этого какой-то выигрыш в быстродействии? да можно оформить еще в отдельный класс и? бла бла..

 

насчет echo да, согласен, можно вообще убрать вывод, либо писать отдельно в файл. в первой ф-и можно просто закомментировать. во-второй оставить и в случае ошибки будет выводиться в админке. в чем проблема? слишком драматизируете

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

конечно можно все отдельно вынести в ф-и и бла бла. и? вы получите от этого какой-то выигрыш в быстродействии? да можно оформить еще в отдельный класс и? бла бла..

 

В таком случае я получу пример профессионально сделанной работы, а не что-то сварганенное тяп-ляп методом копирования-вставки.

 

Серьезные работники руководствуются простым правилом, которое обычно усваивается в раннем детстве:

 

Мальчик радостный пошёл, и решила кроха:

"Буду делать хорошо и не буду плохо".

(В.Маяковский)

 

насчет echo да, согласен, можно вообще убрать вывод, либо писать отдельно в файл. в первой ф-и можно просто закомментировать. во-второй оставить и в случае ошибки будет выводиться в админке. в чем проблема? слишком драматизируете

 

Не можно, а НУЖНО! (если Вы хоть чуть заботитесь о качестве своей работы)

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...