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

Модуль SMS оповещения


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

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

Да можно. Достаточно в sms.ru подать заявку http://sms.ru/?panel=mass&subpanel=senders&add=1 а также в скрипте api/smssend.php после "to" => $phone, прописать "from" => "Название которое запросили на смс.ру".

Ссылка на сообщение
Поделиться на другие сайты
  • Ответов 238
  • Дата создания
  • Последний ответ

Лучшие авторы в теме

Лучшие авторы в теме

Популярные посты

Предлагаю вашему вниманию бесплатный модуль SMS оповещения от провайдера sms.ru (ссылка реферальная, за переход буду благодарен)   Для установки вам понадобиться:   Шаг 1   Создать файл smssend.php в

Изображения в теме

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

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

Может кому пригодится, добавил в админку новое поле трекер ID, в которое можно записать номер почтового идентификатора, а после смены статуса заказа пользователю отправляется уведомление о новом заказе, итак,вот реализация:

Создадим новое поле в БД, для этого выполним комманду

ALTER TABLE `s_orders` ADD `trackerid` VARCHAR(255) NOT NULL AFTER `note`

Или просто создадим новую колонку по аналогии с полем note или просто скопируем его переименовав(если не дружите с консолью)

 

Далее открываем файл api/Orders.php и в строках 24 и 79 дописываем o.trackerid, должно получиться так:

		$query = $this->db->placehold("SELECT o.id, o.delivery_id, o.delivery_price, o.separate_delivery,o.payment_method_id, o.paid, o.payment_date, o.closed, o.discount, o.coupon_code, o.coupon_discount, o.date, o.user_id, o.name, o.address, o.phone, o.email, o.comment, o.status, o.url, o.total_price, o.note, o.trackerid

После открываем файл simpla/design/html/order.tpl и после строчек

			<div class="view_note" {if !$order->note}style='display:none;'{/if}>
				<label class=property>Ваше примечание (не видно пользователю)</label>
				<div class="note_text">{$order->note|escape}</div>
			</div>
		</li>
	</ul>
	</div>

в 189 строку дописываем:

	<div class='layer'>
	<h2>Трекер ID <a href='#' class="edit_trackerid"><img src='design/images/pencil.png' alt='Редактировать' title='Редактировать'></a></h2>
	<ul class="order_details1">
		<li>
			<div class="edit_trackerid" style='display:none;'>
				<textarea name="trackerid">{$order->trackerid|escape}</textarea>
			</div>
			<div class="view_trackerid" {if !$order->trackerid}style='display:none;'{/if}>
				<div class="trackerid_text">{$order->trackerid|escape}</div>
			</div>
		</li>
	</ul>
	</div>

Далее после строчек

	// Редактировать примечание
	$("div#order_details a.edit_note").click(function() {
		 $("div.view_note").hide();
		 $("div.edit_note").show();
		 return false;
	});

в 514-ю вписываем:

	$("div#order_details a.edit_trackerid").click(function() {
		 $("div.view_trackerid").hide();
		 $("div.edit_trackerid").show();
		 return false;
	}); 

После нужно править файл simpla/OrderAdmin.php, в строку 21 вставляем

$order->trackerid = $this->request->post('trackerid');

Далее в строках 120 дописываем отправление не только на почту уведомления, но и sms:

				if($this->request->post('notify_user')){
				$this->notify->email_order_user($order->id);

меняем на

				if($this->request->post('notify_user')){
				$this->notify->email_order_user($order->id);
		
				if($new_status == 1)					
				{
          $this->smssend->send($order->phone, 'Здравствуйте '.$order->name.'. Ваш заказ N'.$order->id.' подтверждён и принят в обработку. Магазин example.ru');
				}
				elseif($new_status == 2)					
				{
           $this->smssend->send($order->phone, 'Ваш заказ N'.$order->id.' отправлен, идентификатор посылки '.$order->trackerid.'. Подробнее об идентификаторах и отслеживании посылки: www.example.ru/post');
				}
				elseif($new_status == 3)					
				{
          $this->smssend->send($order->phone, 'Ваш заказ N'.$order->id.' отменён. Магазин example.ru');				
        }
        }								

Незнаю, насколько решение хорошо, но вроде работает, если есть что дополнить или поправить, с радостью выслушаю.

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

Romalibert, теоретически должно работать.

Но я себе сделал гораздо проще, просто тупо добавил условие примечания на страницу order.tpl, email_order.tpl и в simpla/OrderAdmin.php для СМС. А на странице админки тупо сменил имя примечание на Трек-номер.

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

Может нужно так:  $related_product->variant->price?

не уверен, там везде эта переменная используется, к тому-же я вроде ничего не правил там

 

    foreach($related_products_variants as $related_product_variant)
    {
        if(isset($related_products[$related_product_variant->product_id]))
        {
            $related_product_variant->price *= (100-$discount)/100;
            $related_products[$related_product_variant->product_id]->variants[] = $related_product_variant;
        }
    }
Ссылка на сообщение
Поделиться на другие сайты

А еще можно сэкономить на отправке сообщения для себя любимого (тобишь администратору сайту, менеджеру, в общем тому, кто следит за заказами). Делаем так:

 

$sms_msg = 'Заказ на сумму '.$order->total_price.' р. от '.$order->name;
if (mb_strlen($sms_msg, 'UTF-8') > 70) $sms_msg = mb_substr($sms_msg, 0, 67, 'UTF-8').'...';
$this->smssend->send($this->settings->notify_from_sms, $sms_msg);	

Естественно это из CartView.php

SMS.ru позволяет слать на свой номер (указанный при регистрации) смски бесплатно, НО бесплатно до 60 шт. в день и размер смс не должен привышать 1-ну смску. Следовательно мы:

1. Формируем текст СМС

2. Проверяем его длинну, и если она больше 70 символов (ограничение для смс кириллицей) то урезаем его до 67 символов и добавляем "..." для понимания того, что смс была урезана.

3. Далее шлем это смс

Я подобрал, по моему мнению, самый оптимальный текст. Мы имеем информацию о факте нового заказа, о сумме и что останется - это инфа о клиенте.

 

Если вам необходимо смс уведомление только для себя, то смс.ру можно юзать почти бесплатно :) (ну если у вас заказов менее 60 в день, ну а если уж больше, то можно и не читать этот пост - экономия это низко для вас =))))

 

Держите, функция транслитерации, можно перекодировать себе письма в латиницу и не париться нсчёь длины сообщения

function translit($str) {
	$tr = array("А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D","Е"=>"E","Ж"=>"J","З"=>"Z","И"=>"I","Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N","О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T","У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH","Ш"=>"SH","Щ"=>"SCH","Ъ"=>"","Ы"=>"YI","Ь"=>"","Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j","з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l","м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r","с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h","ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y","ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya");
	return strtr($str,$tr);
} 

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

Какой файл отвечает за вывод заказанного товара, хочу чтобы еще в sms приходило, что заказали. Заранее благодарен за любую помощь.

Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...

Romalibert спасибо конечно, но если бы это делалось именно для себя, то без проблем. 

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

я лучше потрачу 3 смски, но мне так удобней... :) 

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

странно, все делал по мануалу, но номер заказа и сумма в СМС не приходят

p.s. а нет, все ок, посмотрел как у автора код вставлен, вроде заработало

Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...

Почему-то не хочет работать. раз 5 делал по инструкции и кодировки менял и файлы. Проблема в cartView.php. После нажатия на кнопку: оформить заказ не перенаправляет на страницу /order. Просто белая страница без ошибок (ошибка 500). Тем не менее заказ оформляется (приходит оповещение на почту). На телефон ничего не приходит. Если из строк: 

// Отправка смс уведомления пользователю если он этого запросил
            if ($smsnotify == 'send')
            $this->smssend->send($order->phone, 'Ваш заказ №'.$order->id.' принят. На сумму '.$order->total_price.' руб. Спасибо за покупку!');
            // Отправка смс уведомления администратору о поступившем заказе
            $this->smssend->send('+7999*******', 'На сайт поступил заказ №'.$order->id.' на сумму '.$order->total_price.' руб.');
убрать отправку пользователю или администратору, то перекидывать на страницу /order начинает, но смс-ка все равно не приходит... может кто-то сталкивался?
Ссылка на сообщение
Поделиться на другие сайты
  • 2 недели спустя...

Очевидно только у меня не работает(

Все по мануалу.

Может версия 2.2.2 не хочет с дополнением дружить?

Ругается на CartViewer на ту строку где указан код отправки смс.

Подскажите у кого такая же беда

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

Подскажите, пожалуйста.

Выдает:

Notice: Undefined index: captcha_code in /home/rusatri6/public_html/view/CartView.php on line 85

Warning: Cannot modify header information - headers already sent by (output started at /home/rusatri6/public_html/view/CartView.php:85) in /home/rusatri6/public_html/index.php on line 26

При этом форма также пишет:

Капча введена неверно

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

Версия симплы 2.1.5

 

Сделал свой файл CartView.php вставив код, теперь при нажатии на "оформить заказ", отдает

 

Notice: Undefined variable: smsnotify in /home/rusatri6/public_html/view/CartView.php on line 135

Warning: include_once(api/smssend.php) [function.include-once]: failed to open stream: No such file or directory in /home/rusatri6/public_html/api/Simpla.php on line 73

Warning: include_once() [function.include]: Failed opening 'api/smssend.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/rusatri6/public_html/api/Simpla.php on line 73

Fatal error: Class 'smssend' not found in /home/rusatri6/public_html/api/Simpla.php on line 76
Ссылка на сообщение
Поделиться на другие сайты

Проблему решил) Теперь проблема с отправкой смс при смене статуса заказа.

Мой OrderAdmin.php :

<?PHP

require_once('api/Simpla.php');

############################################
# Class Product - edit the static section
############################################
class OrderAdmin extends Simpla
{
	public function fetch()
	{
		if($this->request->method('post'))
		{
			$order->id = $this->request->post('id', 'integer');
			$order->name = $this->request->post('name');
			$order->email = $this->request->post('email');
			$order->phone = $this->request->post('phone');
			$order->address = $this->request->post('address');
			$order->comment = $this->request->post('comment');
			$order->note = $this->request->post('note');
			$order->discount = $this->request->post('discount', 'floatr');
			$order->coupon_discount = $this->request->post('coupon_discount', 'floatr');
			$order->delivery_id = $this->request->post('delivery_id', 'integer');
			$order->delivery_price = $this->request->post('delivery_price', 'float');
			$order->payment_method_id = $this->request->post('payment_method_id', 'integer');
			$order->paid = $this->request->post('paid', 'integer');
			$order->user_id = $this->request->post('user_id', 'integer');
			$order->separate_delivery = $this->request->post('separate_delivery', 'integer');
			$order->numder_post = $this->request->post('numder_post');


			if(empty($order->id))
			{
  				$order->id = $this->orders->add_order($order);
				$this->design->assign('message_success', 'added');
  			}
    		else
    		{
    			$this->orders->update_order($order->id, $order);
				$this->design->assign('message_success', 'updated');
    		}	
			
			if($order->id)
			{
				// Покупки
				$purchases = array();
				if($this->request->post('purchases'))
				{
					foreach($this->request->post('purchases') as $n=>$va) foreach($va as $i=>$v)
						$purchases[$i]->$n = $v;
				}		
				$posted_purchases_ids = array();
				foreach($purchases as $purchase)
				{
					$variant = $this->variants->get_variant($purchase->variant_id);

					if(!empty($purchase->id))
						if(!empty($variant))
							$this->orders->update_purchase($purchase->id, array('variant_id'=>$purchase->variant_id, 'variant_name'=>$variant->name, 'price'=>$purchase->price, 'amount'=>$purchase->amount));
						else
							$this->orders->update_purchase($purchase->id, array('price'=>$purchase->price, 'amount'=>$purchase->amount));
					else
						$purchase->id = $this->orders->add_purchase(array('order_id'=>$order->id, 'variant_id'=>$purchase->variant_id, 'variant_name'=>$variant->name, 'price'=>$purchase->price, 'amount'=>$purchase->amount));
						
					$posted_purchases_ids[] = $purchase->id;			
				}
				
				// Удалить непереданные товары
				foreach($this->orders->get_purchases(array('order_id'=>$order->id)) as $p)
					if(!in_array($p->id, $posted_purchases_ids))
						$this->orders->delete_purchase($p->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.' Информация отправлена на ваш E-mail. Спасибо за покупку! Мы будем благодарны, если вы оставите отзыв о нашем магазине ;)');
					} 
				}
				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('notify_user'))
					$this->notify->email_order_user($order->id);
			}

		}
		else
		{
			$order->id = $this->request->get('id', 'integer');
			$order = $this->orders->get_order(intval($order->id));
		}


		$subtotal = 0;
		$purchases_count = 0;
		if($order && $purchases = $this->orders->get_purchases(array('order_id'=>$order->id)))
		{
			// Покупки
			$products_ids = array();
			$variants_ids = array();
			foreach($purchases as $purchase)
			{
				$products_ids[] = $purchase->product_id;
				$variants_ids[] = $purchase->variant_id;
			}
			
			$products = array();
			foreach($this->products->get_products(array('id'=>$products_ids)) as $p)
				$products[$p->id] = $p;
	
			$images = $this->products->get_images(array('product_id'=>$products_ids));		
			foreach($images as $image)
				$products[$image->product_id]->images[] = $image;         
			
			$variants = array();
			foreach($this->variants->get_variants(array('product_id'=>$products_ids)) as $v) {
				$variants[$v->id] = $v;
        $images_ids[] = $v->image_id;
      }
    
        $temp_images = $this->products->get_images(array('id'=>$images_ids));
               
        $images = array();
        foreach($temp_images as $image)
            $images[$image->id] = $image;          				
	
			foreach($purchases as &$purchase)
			{
				if(!empty($products[$purchase->product_id]))
					$purchase->product = $products[$purchase->product_id];
				if(!empty($variants[$purchase->variant_id]))
					$purchase->variant = $variants[$purchase->variant_id];
        if(!empty($purchase->variant->image_id))
            $purchase->image = $images[$purchase->variant->image_id];
				$subtotal += $purchase->price*$purchase->amount;
				$purchases_count += $purchase->amount;				
			}			
			
		}
		else
		{
			$purchases = array();
		}

		$this->design->assign('purchases', $purchases);
		$this->design->assign('purchases_count', $purchases_count);
		$this->design->assign('subtotal', $subtotal);
		$this->design->assign('order', $order);

		if($order)
		{
			// Способ доставки
			$delivery = $this->delivery->get_delivery($order->delivery_id);
			$this->design->assign('delivery', $delivery);
	
			// Способ оплаты
			$payment_method = $this->payment->get_payment_method($order->payment_method_id);
			
			if(!empty($payment_method))
			{
				$this->design->assign('payment_method', $payment_method);
		
				// Валюта оплаты
				$payment_currency = $this->money->get_currency(intval($payment_method->currency_id));
				$this->design->assign('payment_currency', $payment_currency);
			}
			// Пользователь
			if($order->user_id)
				$this->design->assign('user', $this->users->get_user(intval($order->user_id)));
	
			// Соседние заказы
			$this->design->assign('next_order', $this->orders->get_next_order($order->id, $this->request->get('status', 'string')));
			$this->design->assign('prev_order', $this->orders->get_prev_order($order->id, $this->request->get('status', 'string')));
		}

		// Все способы доставки
		$deliveries = $this->delivery->get_deliveries();
		$this->design->assign('deliveries', $deliveries);

		// Все способы оплаты
		$payment_methods = $this->payment->get_payment_methods();
		$this->design->assign('payment_methods', $payment_methods);
		
		if($this->request->get('view') == 'print')
 		  	return $this->design->fetch('order_print.tpl');
 	  	else
	 	  	return $this->design->fetch('order.tpl');
	}
}

Подскажите, пожалуйста, что не так.

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

Все конечно работает, но у меня после обновления статуса заказа приходит что заказ принят(отправителю)

Как реализовать чтобы при смене статуса заказа и желательно оплачено приходило смс соответсвующего характера.

заказ сделан - заказ принят - заказ оплачен - заказ выполнен

Заранее спасибо!

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

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

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

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

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

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

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

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

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

Загрузка...

×
×
  • Создать...