avatar

SMS оповещения о заказе

Опубликовал в блог Дополнения и модули для Simpla CMS
0
SMS информирование о заказе на ваш телефон (бесплатно) от оператора SMS.RU, но можно настроить и на получение sms покупателю о, например, статусе заказа или просьбой оставить отзыв.

Создать файл Smssend.php в папке api cледующего содержания:
<?php
 
require_once('Simpla.php');

class smssend extends Simpla
{
	public function send($phone,$sms)
	{
	
		$ch = curl_init("http://sms.ru/sms/send");
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
		curl_setopt($ch, CURLOPT_TIMEOUT, 30);
		curl_setopt($ch, CURLOPT_POSTFIELDS, array(

		"api_id"		=>	"вводим сюда свой секретный код от SMS.RU",
		"to"			=>	$phone,
		"text"		=>	$sms
));
$body = curl_exec($ch);
curl_close($ch); 

return false;

	}
}

Не забываем заменить
"api_id"        =>    "вводим сюда свой секретный код",

на строку со страницы SMS.RU, ковычки оставляем, например:
"api_id"        =>    "55553331b-4cdd-de24-b54b-a71e5555555",

Если после отправки смс к вам приходит неразбериха меняем строку
"text"        =>    $sms

на
iconv("windows-1251","utf-8",$sms)


В файле api/Simpla.php вписываем строку
'smssend'        => 'Smssend'

Примерно это выглядит так
class Simpla
{
	private $classes = array(
		'config'     => 'Config',
		'request'    => 'Request',
		'db'         => 'Database',
...
		'notify'     => 'Notify',
		'managers'   => 'Managers',
                'smssend'    => 'Smssend'
	);

Не забываем про запятые. В самом конце её нет как видите.

Теперь мы можем в любом месте отправить смс-ку выполнив команду
$this->smssend->send(телефон,'сообщение');

Например для уведомления администратора о поступлении нового заказа мы в файле View/CartView.php после
// Отправляем письмо пользователю
$this->notify->email_order_user($order->id);

добавляем следующий код
// Отправка смс уведомления пользователю
$this->smssend->send($order->phone, 'Ваш заказ №'.$order->id.' принят. На сумму '.$order->total_price.' руб. Спасибо за покупку!');
// Отправка смс уведомления администратору о поступившем заказе 
$this->smssend->send('+79150000000', 'На сайт поступил заказ №'.$order->id.' на сумму '.$order->total_price.' руб.');

Если вы хотите сделать уведомление клиенту о изменении статуса заказа в файл simpla/OrderAdmin.php ищем
// Принять?
				if($this->request->post('status_new'))
					$new_status = 0;
				elseif($this->request->post('status_accept'))
					$new_status = 1;
				elseif($this->request->post('status_done'))
					$new_status = 2;
				elseif($this->request->post('status_deleted'))
					$new_status = 3;
				else
					$new_status = $this->request->post('status', 'string');
	
				if($new_status == 0)					
				{
					if(!$this->orders->open(intval($order->id)))
						$this->design->assign('message_error', 'error_open');
					else
						$this->orders->update_order($order->id, array('status'=>0));
				}
				elseif($new_status == 1)					
				{
					if(!$this->orders->close(intval($order->id)))
						$this->design->assign('message_error', 'error_closing');
					else
						$this->orders->update_order($order->id, array('status'=>1));
				}
				elseif($new_status == 2)					
				{
					if(!$this->orders->close(intval($order->id)))
						$this->design->assign('message_error', 'error_closing');
					else
						$this->orders->update_order($order->id, array('status'=>2));
				}
				elseif($new_status == 3)					
				{
					if(!$this->orders->open(intval($order->id)))
						$this->design->assign('message_error', 'error_open');
					else
						$this->orders->update_order($order->id, array('status'=>3));
					header('Location: '.$this->request->get('return'));
				}
				$order = $this->orders->get_order($order->id);

меняем на
// Принять?
				if($this->request->post('status_new'))
					$new_status = 0;
				elseif($this->request->post('status_accept'))
					$new_status = 1;
				elseif($this->request->post('status_done'))
					$new_status = 2;
				elseif($this->request->post('status_deleted'))
					$new_status = 3;
				else
					$new_status = $this->request->post('status', 'string');
	
				if($new_status == 0)					
				{
					if(!$this->orders->open(intval($order->id)))
						$this->design->assign('message_error', 'error_open');
					else
					{
						$this->orders->update_order($order->id, array('status'=>0));
					}
				}
				elseif($new_status == 1)					
				{
					if(!$this->orders->close(intval($order->id)))
						$this->design->assign('message_error', 'error_closing');
					else
					{
						$this->orders->update_order($order->id, array('status'=>1));
					if($this->request->post('notify_user'))
							$this->smssend->send($order->phone, 'Ваш заказ №'.$order->id.' обработан, ожидается поступление товара на склад. Вам придет оповещение.');
					} 
				}
				elseif($new_status == 2)					
				{
					if(!$this->orders->close(intval($order->id)))
						$this->design->assign('message_error', 'error_closing');
					else
					{
						$this->orders->update_order($order->id, array('status'=>2));
							if($this->request->post('notify_user'))
							$this->smssend->send($order->phone, 'Ваш заказ №'.$order->id.' выполнен. Спасибо за покупку! Мы будем благодарны, если вы оставите отзыв о нашем магазине ;)');
					} 
				}
				elseif($new_status == 3)					
				{
					if(!$this->orders->open(intval($order->id)))
						$this->design->assign('message_error', 'error_open');
					else
						$this->orders->update_order($order->id, array('status'=>3));
					header('Location: '.$this->request->get('return'));
				}
				$order = $this->orders->get_order($order->id);


Теперь при изменение статуса заказа, покупатель будет получать уведомление по СМС. Но за это будут сниматься деньги с вашего счета на SMS.ru, а если смс только админу, то бесплатно.
7 комментариев RSS
avatar
Отличное решение. У меня пару вопросов.
1) Возможно ли это реализовать при заказе в 1 клик, т.к. вне кардвью, что смс-ка пришла? а то получается только через Корзину работает.
2) Даже через корзину пользователю не отправляется уведомление. лишь только админу.

Спасибо большое!
avatar
я решил первый вопрос так:
в файле oneclick.php добавил эту строку таким образом:
// Отправка смс уведомления администратору о поступившем заказе 
	$simpla->smssend->send('+7*******', 'На сайт поступил заказ №'.$order_id.' на сумму '.$amount.' $.');


только вот смс пользователю не отправляется через корзину… попробовал прикрутить в 1 клик:
// Отправка смс уведомления пользователю
	$simpla->smssend->send($order_phone, 'Ваш заказ №'.$order_id.' принят. На сумму '.$amount.' $. Спасибо за покупку!');

не идет вроде.

а есть вообще ограничение в отправке СМС? а то перестало даже админу приходить
avatar
дописал немного дополнительно, чтобы приходила смс покупателю, с остальным подумаю на днях.
avatar
даа… оказывается «на собственный номер бесплатны до 5 СМС в день»
avatar
простите такой момент. приходит смс-ка если заказать через One click. только вот цену заказа не пишет. как его указать в коде?
// Отправка смс уведомления администратору о поступившем заказе 
	$simpla->smssend->send('+7*******', 'На сайт поступил заказ №'.$order_id.' на сумму '.$total_price.' $.');

что писать в данном случае вместо $total_price ????
Спасибо!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.