VirtueMart - SMS уведомления о сделаном заказе.

  • 38 Ответов
  • 14678 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Оффлайн bork

Сегодня целый день искал решение как прислать на телефон sms сообщение о том, что в магазине сделали заказ. (VirtueMart ver. 1.1.8 )
И в итоге за 30 минут сделал свой хак.

Метод первый:
Для тех, кто не хочет особо ковыряться в коде, то можно воспользоваться сервисом pochta2sms.ru (gmail.ru - не советую, сняли денег и не заработало. в gmail сначала нужно оплатить чтобы активировать саму почту, потом оплатить чтобы добавить или сменить номер телефона и после всех оплат, понимаешь. что это не то)
Если у вас немного заказов в магазине, то подойдёт mail.ru  (создаёте новую папку в почте, настраиваете фильтр для этой папки и отправку SMS присваиваете для этой папки)

Достоинства pochta2sms:
- на счету 5руб. для тестов (одна отправка вроде 60 коп.)
- много свободных ящиков для регистрации
- хорошо продуманные фильтры для активации отправки sms
- фильтров можно задать несколько

Недостатки:
- нет пополнения счёта через WebMoney
- заголовок от VM коверкает (но можно написать свой. например "Сделан заказ" - это то. что придёт в качестве сообщения по смс)

Получили ящик  на pochta2sms, далее открываем файл
/administrator/components/com_virtuemart/classes/ps_checkout.php

Находим строку:
$vendor_email = $from_email;

Меняем на:
$vendor_email = array($from_email,'ваш_ящик@pochta2sms.ru');

Это чтобы отправить два письма, первое на тот email, что указан в Магазин\Информация о магазине и на второй для получения SMS уведомления.

Всё готово!

Метод второй:

В этом методе намного больше возможностей, можно брать переменные (данные покупателя, товара) и отправлять их в заголовке или в самом SMS.
У меня SMS дошли почти мгновенно ( в первом методе в течение пару минут)
СМС получились дешевле (копеек на 20)
В качестве отправителя можно указывать любой номер или имя (подмена номера, но за это вроде плата дополнительная)

1) Регистрируемся в сервисе по ссылке http://smsc.ru/?pp259144 (реф. ссылка. если я вам помог, оставьте ссылку, мне будет приятно)
2) В разделе api скачиваем файл для своего сервера, например для php скачиваем  http://smsc.ru/api/php/
3) В этом файле прописываете ваш логин и пароль от сервиса smsc

Например:
define("SMSC_LOGIN", "bork");
define("SMSC_PASSWORD", "1234");

4) Заливаете этот файл с вашими логином и паролем в папку /administrator/components/com_virtuemart/html
5) В этой же папке находите файл checkout.index.php

В файле находим (273 строка):
<input type="hidden" name="payment_method_id" value="'. $payment_method_id .'" />

После добавляем (номер телефона вписать свой):
        <input type="hidden" name="phone" value="79012345678"/>
        <input type="hidden" name="message" value="Поступил новый заказ"/>

В итоге в файле это выглядит так:

Код
<input type="hidden" name="payment_method_id" value="'. $payment_method_id .'" />
<input type="hidden" name="phone" value="79012345678"/>
<input type="hidden" name="message" value="Поступил новый заказ"/>
<input type="hidden" name="checkout_last_step" value="'. $current_stage .'" />';

6) В этой же папке открываем файл checkout.thankyou.php - это страница, которую пользователь видит, когда подтвердил свой заказ

В самом начале прописываем
Код
<? 
    include_once "smsc_api.php";
    $r = send_sms($_POST["phone"], $_POST["message"]);
?>

7) Проверяем работу

Мне нужно было просто на SMS получить  уведомление, что поступил заказ, но вместо value="Поступил новый заказ", можно подсунуть переменные VM
Если вам нужны дополнительные параметры, то смотрите примеры в библиотеке smsc.ru.

Пользуйтесь на здоровье!
Если у кого-то есть предложения по доработке, пожалуйста пишите в этой ветке.

Метод третий: (добавлено 22 марта)

На блоге одного сервиса по СМС услугам нашёл ещё один метод.
Особо не разбирался, просто для коллекции выкладываю ссылку http://blogs.sms-uslugi.ru/?p=143

Их тарифы http://sms-uslugi.ru/price
« Последнее редактирование: 22.03.2012, 03:42:36 от bork »

*

Оффлайн bork

Бугага, а ничего что Яндекс бесплатно писылает? про mаil.ru вообще само-собой...  ;D
Наверное, я не зря весь день на это убил

mail.ru


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

Просьба в теме не сорить.
Писать по делу.


« Последнее редактирование: 15.09.2011, 04:14:09 от bork »

*

Оффлайн afon9l

на pochta2sms есть функция перенаправлять письмо на другой ящик, но у меня текст карявый приходит в SMS. И за 1 смску сняли сразу 5 рублей тестовых.

*

Оффлайн Dimir

А через сборщика почты нельзя?Допустим mail.ru или yandex у них же есть сервис SMS и сборщика писем?или я не так понел
-==Dimir==-

*

Оффлайн nroman

Воспользовался вторым методом-все супер, спасибо
Только вот не могу разобраться как установить переменные VM (содержание заказа), можете помочь?
Заранее тысяча благодарностей!
« Последнее редактирование: 20.01.2012, 22:29:41 от nroman »

*

Оффлайн Sergun42

Все получилось по второму способу,только SMS приходит с квакозяброй, пробывал utf-8 без bom не получилось, в чем может быть проблема?

*

Оффлайн bork

А через сборщика почты нельзя?Допустим mail.ru или yandex у них же есть сервис SMS и сборщика писем?или я не так понел

Там лимит на сообщения и задержки по SMS. Если продаж не много, то  mail.ru нормально будет.

Воспользовался вторым методом-все супер, спасибо
Только вот не могу разобраться как установить переменные VM (содержание заказа), можете помочь?
Заранее тысяча благодарностей!
Там всё очень просто, пользователь ведь сначала заполняет, что ему нужно, а потом попадает на страницу. где видит что он собирается заказывать.
Особо не помню, но смысл в том, что имена переменных можно увидеть либо из первого файла checkout.index.php, либо посмотреть имена на следующей странице, где
пользователь видит свой заказ.
Но, хочу сказать, что меня тоже сначала просили сделать, чтобы в SMS были доп. данные, но реально данных много, а SMS с кириллицей ограничена 140 символами.
По-любому придётся содится за компьютер и смотреть весь заказ, поэтому я ограничелся сообщением о том, что пришёл заказ.


Все получилось по второму способу,только SMS приходит с квакозяброй, пробывал utf-8 без bom не получилось, в чем может быть проблема?

Сообщение передаётся с файла, где размещён конечный скрипт с передачей SMS, а это в примере должен быть smsc_api.php
Просто добавь туда
<meta content="text/html; charset=windows-1251" http-equiv="Content-Type" />
или
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />

если не поможет, то добавь в эту же папку файл .htaccess
и там укажи кодировку.
« Последнее редактирование: 11.03.2012, 05:04:56 от bork »

*

Оффлайн Sergun42

bork, спасибо за подсказку.
В php я не силен, как правильно объявить переменные VM в checkout.index.php в <input type="hidden" name="message" value="пришел заказ"/> вместо "пришел заказ" мне необходимо вывести название товара, кр. характеристика и цена? в 140 символов укладываюсь с запасом.

Нашел в ps_checkout.php переменную названия товара $product_name = ps_product::get_field($cart[$i]["product_id"], 'product_name');
Если не затруднит, можете правильно ее прописать в виде примера?

Просто подстановка в виде <input type="hidden" name="message" value='$product_name'/> не работает..
Еще раз повторюсь в php я не силен..(

*

Оффлайн bork

Sergun42, ну да, всё правильно делаешь, просто будь повнимательнее, смотри примеры в самом файле.

Нужно так:
<input type="hidden" name="message" value="'. $product_name .'" />;

Что бы до отправки SMS посмотреть, что передаёт переменная, отключаем отправку на SMS и выводим переменную

Вместо:
<?
    include_once "smsc_api.php";
    $r = send_sms($_POST["phone"], $_POST["message"]);
?>


Пишем:
<hr>
Выводим значение:
<? echo $_POST["message"]; ?>
<hr>

ps: я php сам никогда не изучал, пишу чисто интуитивно и по примерам. ))
« Последнее редактирование: 12.03.2012, 01:48:34 от bork »

*

Оффлайн Sergun42

bork, все вроде бы логично, все сделал как вы написали, но при выводе "Выводим значение: (пусто)   ", если настроить на SMS, то SMS в таком случае не приходит...может еще какие то ньансы тут есть, ведь у вас получалось?
уже голову сломал(

*

Оффлайн softman_xp

  • ****
  • 320
  • [+]31 / [-]0
  • Разработка для Joomla
    • Просмотр профиля
    • JoomPoint
Странное решение... Было актуально 4-6 лет назад, а сейчас практически в любом современном телефоне за 2-3 тысячи есть встроенный почтовый клиент :)
Компоненты/модули/плагины для Joomla
(skype: navipoint)(mail: softman(собака)inbox(точка)ru)

*

Оффлайн Sergun42

softman_xp смской быстрее и удобнее, а также клиент хочет именно так..

*

Оффлайн rewuxiin

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

*

Оффлайн rewuxiin

пытался освоить второй метод - так и не получил SMS.


решено. забыл убрать <> в логине и  пароле

а вот 
Цитировать
параметр $phone заменил на $phones
  необходимо
« Последнее редактирование: 20.03.2012, 14:51:26 от rewuxiin »

*

Оффлайн rewuxiin

bork, все вроде бы логично, все сделал как вы написали, но при выводе "Выводим значение: (пусто)   ", если настроить на SMS, то SMS в таком случае не приходит...может еще какие то ньансы тут есть, ведь у вас получалось?
уже голову сломал(
переменная не передается на страницу поэтому не может быть выдана.
нужно вывести на финальную страницу заказ - тогда цеплять переменные.

самому необходимо както заняться..

*

Оффлайн rewuxiin

Решение для отправки с информацией о заказе.

немного подсмотрено и допилено мной.

предыдущие настройки удаляем и идем в /administrator/components/com_virtuemart/classes/ файл ps_checkout.php

ищем
Код
$sub_total = 0.00;

добавляем после
Код
        
        $sms_message = $dbbt->f("phone_1");

ниже ищем
Код
				$shopper_message .= $CURRENCY_DISPLAY->getFullValue($dboi->f("product_item_price"), '', $db->f('order_currency'));
}

добавляем после
Код
			$sms_message .= "; || Name: ";
$sms_message .= $dboi->f("product_name");
$sms_message .= "; || Sku: ";
$sms_message .= $dboi->f("order_item_sku");
$sms_message .= "; || Kolichestvo: ";
$sms_message .= $dboi->f("product_quantity");
$sms_message .= "; || Cena za 1sht: ";
$sms_message .= $CURRENCY_DISPLAY->getFullValue($dboi->f("product_final_price"));
         

ищем
Код
$shopper_html = $template->fetch('order_emails/confirmation_email.tpl.php');

добавляем после
Код
   		            $sms_message .= "; || Cena vsego: ";
$sms_message .= $CURRENCY_DISPLAY->getFullValue($order_total);

            $message = $sms_message;
            $phones = "79261234567";

            include_once "smsc_api.php";
            $r = send_sms($phones, $message);

если что нибудь не получается попробуйте для начала вывести на странице собранную информацию при помощи
Код
echo $sms_message;
текст с сообщением должно показать на странице "Спасибо за Ваш заказ."

файлик smsc_api.php не забываем бросать  в /administrator/components/com_virtuemart/classes/

вот и всё.


чуть не забыл. решение делал для магазина без регистрации пользователей - не тестировал в остальных вариантах.
« Последнее редактирование: 22.03.2012, 01:12:06 от rewuxiin »

*

Оффлайн bork

Добавил в первый пост Третий Метод от компании "СМС услуги"
Тарифы у них повыше, чем у приведённого мной сайта, но может кому-то пригодится.
На сайте много комментариев, так что с установкой не должно быть проблем

*

Оффлайн Sergun42

rewuxiin, для опробывания локально echo $sms_message; надо вывести в checkout.thankyou.php или в ps_checkout.php после 
$message = $sms_message;
$phones = "79261234567";

*

Оффлайн rewuxiin

Sergun42 в ps_checkout.php - перед $message = $sms_message;
$phones = "79261234567";

*

Оффлайн rewuxiin

bork я бы не сказал что там тарифы повыше.
у них система с оплатой интересная. кладешь 500р на счет и получаешь 50коп за SMS.
вчера там регистрировался для проверки их кода.

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

также поддержка была офлайн постоянно - ничего не спросить.
« Последнее редактирование: 22.03.2012, 13:50:32 от rewuxiin »

*

Оффлайн Sergun42

rewuxiin, все работает. Большое спасибо!

*

Оффлайн bork

bork я бы не сказал что там тарифы повыше.
у них система с оплатой интересная. кладешь 500р на счет и получаешь 50коп за SMS.

Да, тарифы нормальные.
Я сначала быстро глянул, подумал, что цена зависит от оборота SMS, а это оказывается сколько кинешь, такая и цена за SMS.
Нормально придумали.

Ребята подскажите пожалуйста решение двух вопросов.
1) SMS-ки приходят в количестве 2 штук на один заказ, на сайте?
2) Приходят SMS-ки крякозябрами.
Я так и не понял куда именно (в каком месте) нужно прописать кодировку?

*

Оффлайн Riddon

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

*

Оффлайн rewuxiin

смотри настройки smsc_api.php или конфиг какого ты там провайдера выбрал
Код
define("SMSC_CHARSET", "utf-8");	// кодировка сообщения: utf-8, koi8-r или windows-1251 (по умолчанию)
там всё подробно закомментировано.

*

Оффлайн Riddon

Спасибо! Помогло  ;)

*

Оффлайн Riddon

А не подскажите? Возможно ли сюда добавить номер телефона клиента(чтоб приходило вместе с заказом товара)? Номер клиент указывает при регистрации, и после регистрации возможно только совершить заказ  !
« Последнее редактирование: 10.06.2012, 21:50:24 от Riddon »

*

Оффлайн rewuxiin

ну так вместо вашего номера вставьте переменную которая цепляет номер телефона.

*

Оффлайн bork

А не подскажите? Возможно ли сюда добавить номер телефона клиента(чтоб приходило вместе с заказом товара)? Номер клиент указывает при регистрации, и после регистрации возможно только совершить заказ  !

Уже ответили -  найти и вставить переменную с телефоном пользователя.
Так же в документации скрипта отправки SMS почитать об отправке сообщения на несколько номеров.
Уверен, что можно. т.е. одну на свой, вторую пользователю, хотя считаю, что отправка сообщения на почту более логичнее.

*

Оффлайн xlite

никто не сталкивался сделать проверку префикса номера.. а то в Украине все пишут ноль впереди , чтобы проверка была и рассылать на два номера, краткую SMS админу и более полную покупателю но чтобы проверка номера была ..