Jump to content

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


Recommended Posts

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

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

Link to post
Share on other sites
  • Replies 237
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

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

Posted Images

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

Link to post
Share on other sites

Может кому пригодится, добавил в админку новое поле трекер 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');				
        }
        }								

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

Может нужно так:  $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;
        }
    }
Link to post
Share on other sites

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

 

$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);
} 

Link to post
Share on other sites
  • 1 month later...

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

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

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

Link to post
Share on other sites
  • 2 weeks later...
  • 1 month later...

Почему-то не хочет работать. раз 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 начинает, но смс-ка все равно не приходит... может кто-то сталкивался?
Link to post
Share on other sites
  • 2 weeks later...

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

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

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

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

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

Link to post
Share on other sites

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

Выдает:

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

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

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

Link to post
Share on other sites

Версия симплы 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
Link to post
Share on other sites

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

Мой 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');
	}
}

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

Link to post
Share on other sites
  • 4 weeks later...

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

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

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

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

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...