Помощь СМС для клиента после совершения заказа.

v.uljanov

Постоялец
Регистрация
5 Дек 2014
Сообщения
91
Реакции
50
Помогите решить проблему. Сам я в PHP понимаю мало.
Есть модуль sms_sending_prestashop
Модуль рабочий, смс отправляет. Только этот модуль берет информацию о номере заказа из таблицы "cart", эта таблица включает в себя так же и брошенные корзины (т.е заказ оформлен не был, смс не отправлялась а id увеличился на 1).
И получается так что номер реального заказа и просто корзины (например брошенной) разный. id корзины постоянно будет увеличиваться в зависимости от брошенных корзин.

Это не правильно, логичнее что бы модуль брал id заказа из таблицы "orders" там содержатся уже совершенные, законченные заказы. Как реализовать данный функционал в модуле?

Вот код модуля:
Код:
<?php

if (!defined('_CAN_LOAD_FILES_')) {
exit;
}

class sms_sending_prestashop extends Module
{
private $_html = '';

public function __construct()
{
$this->name = 'sms_sending_prestashop';
$this->tab = 'others';
$this->version = '1.0';
$this->author = 'SMS-sending.ru';
$this->need_instance = 0;


parent::__construct();

$this->displayName = $this->l('SMS-sending.ru');
$this->description = $this->l('SMS оповещение с помощью SMS-sending.ru');

$this->confirmUninstall = $this->l('Are you sure you want to uninstall?');

}


public function install()
{
if (!parent::install()
|| !$this->registerHook('actionValidateOrder')
|| !Configuration::updateValue('sms_sending_login', '')
|| !Configuration::updateValue('sms_sending_password', '')
|| !Configuration::updateValue('sms_sending_phone', '')
|| !Configuration::updateValue('sms_sending_zag', '')
|| !Configuration::updateValue('sms_sending_ToAdmin', 0)
|| !Configuration::updateValue('sms_sending_ToUser', 0)
|| !Configuration::updateValue('sms_sending_AdminTpl', "Поступил новый заказ №{NUM}, на сумму - {SUM}, от {FIRSTNAME} {LASTNAME}. Город - {CITY}")
|| !Configuration::updateValue('sms_sending_UserTpl', "Уважаемый, {FIRSTNAME}. Ваш заказ №{NUM} принят. Сумма заказа - {SUM}."))
{
return false;
}
return true;
}

public function uninstall()
{
if (!parent::uninstall() ||
!Configuration::deleteByName('sms_sending_login') ||
!Configuration::deleteByName('sms_sending_password') ||
!Configuration::deleteByName('sms_sending_phone') ||
!Configuration::deleteByName('sms_sending_zag') ||
!Configuration::deleteByName('sms_sending_ToUser') ||
!Configuration::deleteByName('sms_sending_ToAdmin') ||
!Configuration::deleteByName('sms_sending_AdminTpl') ||
!Configuration::deleteByName('sms_sending_UserTpl')) {
return false;
}
return true;
}

public function hookActionValidateOrder($params)
{
$settings = Configuration::getMultiple(array('sms_sending_login', 'sms_sending_password', 'sms_sending_phone', 'sms_sending_zag', 'PS_SHOP_NAME', 'sms_sending_ToAdmin', 'sms_sending_ToUser', 'sms_sending_AdminTpl', 'sms_sending_UserTpl'));
if(strlen($settings['sms_sending_login']) > 0 && strlen($settings['sms_sending_password']) > 0) {
$address = new Address(intval($params['cart']->id_address_delivery));
$currency = new Currency(intval($params['cart']->id_currency));
$orderCurrency = $currency->sign;
$phone = $address->phone_mobile;
$theCart = new Cart($params['cart']->id);
$total = $theCart->getOrderTotal(true, Cart::BOTH);
$total.=" ".$orderCurrency;
if($settings['sms_sending_ToAdmin'] == 1)
{
$tpl = $settings['sms_sending_AdminTpl'];
$tpl = str_replace('{FIRSTNAME}', $address->firstname, $tpl);
$tpl = str_replace('{LASTNAME}', $address->lastname, $tpl);
$tpl = str_replace('{CITY}', $address->city, $tpl);
$tpl = str_replace('{NUM}', $params['cart']->id, $tpl);
$tpl = str_replace('{SUM}', $total, $tpl);
$tpl = str_replace('{SHOP_NAME}', $settings['PS_SHOP_NAME'], $tpl);
file_get_contents("http://lcab.sms-sending.ru/lcabApi/sendSms.php?login=".$settings['sms_sending_login']."&password=".$settings['sms_sending_password']."&to=".$settings["sms_sending_phone"]."&source=".$settings['sms_sending_zag']."&txt=".urlencode($tpl));
}
if($settings['sms_sending_ToUser'] == 1)
{
$tpl = $settings['sms_sending_UserTpl'];
$tpl = str_replace('{FIRSTNAME}', $address->firstname, $tpl);
$tpl = str_replace('{LASTNAME}', $address->lastname, $tpl);
$tpl = str_replace('{CITY}', $address->city, $tpl);
$tpl = str_replace('{NUM}', $params['cart']->id, $tpl);
$tpl = str_replace('{SUM}', $total, $tpl);
$tpl = str_replace('{SHOP_NAME}', $settings['PS_SHOP_NAME'], $tpl);

file_get_contents("http://lcab.sms-sending.ru/lcabApi/sendSms.php?login=".$settings['sms_sending_login']."&password=".$settings['sms_sending_password']."&to=".$phone."&source=".$settings['sms_sending_zag']."&txt=".urlencode($tpl));
}
}
}

public function getContent()
{

$output = null;

if (Tools::isSubmit('submitLogin'))
{
$sms_sending_login = strval(Tools::getValue('sms_sending_login'));
$sms_sending_password = strval(Tools::getValue('sms_sending_password'));
$sms_sending_phone = Tools::getValue('sms_sending_phone');
$sms_sending_zag = Tools::getValue('sms_sending_zag');
$sms_sending_ToAdmin = Tools::getValue('sms_sending_ToAdmin') == "on"?1:0;
$sms_sending_ToUser = Tools::getValue('sms_sending_ToUser') == "on"?1:0;
$sms_sending_AdminTpl = Tools::getValue('sms_sending_AdminTpl');
$sms_sending_UserTpl = Tools::getValue('sms_sending_UserTpl');
if (!$sms_sending_login || empty($sms_sending_login))
$output .= $this->displayError( $this->l('Неверный формат логина') );
else if (!$sms_sending_password || empty($sms_sending_password))
{
$output .= $this->displayError( $this->l('Неверный формат пароля') );
}else if (!$sms_sending_phone || empty($sms_sending_phone)) {
$output .= $this->displayError( $this->l('Неверный формат телефона') );
}else {
Configuration::updateValue('sms_sending_login', $sms_sending_login);
Configuration::updateValue('sms_sending_password', $sms_sending_password);
Configuration::updateValue('sms_sending_ToAdmin', $sms_sending_ToAdmin);
Configuration::updateValue('sms_sending_ToUser', $sms_sending_ToUser);
Configuration::updateValue('sms_sending_phone', $sms_sending_phone);
Configuration::updateValue('sms_sending_zag', $sms_sending_zag);
Configuration::updateValue('sms_sending_AdminTpl', $sms_sending_AdminTpl);
Configuration::updateValue('sms_sending_UserTpl', $sms_sending_UserTpl);
$output .= $this->displayConfirmation($this->l('Настройки обновлены'));
}
}
return $output.$this->_displayForm();
}


public function _displayForm()
{
$html = "";
$html.="<h2>".$this->l('Настройки')."</h2>
<form style='background:#ffbc16;border-radius:5px;width:800px;padding:5px;' method='post' action='".Tools::safeOutput($_SERVER["REQUEST_URI"])."'>
<table>
<tr>
<td>".$this->l("Логин от sms-sending.ru")."</td>
<td><input type='text' value='".Configuration::get("sms_sending_login")."' name='sms_sending_login'></td>
</tr>
<tr>
<td>".$this->l("Пароль от sms-sending.ru")."</td>
<td><input type='password' value='".Configuration::get("sms_sending_password")."' name='sms_sending_password'></td>
</tr>
<tr>
<td>".$this->l("Имя отправителя")."</td>
<td><input type='text' value='".Configuration::get("sms_sending_zag")."' name='sms_sending_zag'></td>
</tr>
<tr>
<td>".$this->l("Телефон администратора")."</td>
<td><input type='text' value='".Configuration::get("sms_sending_phone")."' name='sms_sending_phone'></td>
</tr>
</table>
<table>
<tr>
<td>Сообщение администратору</td>
<td>Сообщение покупателю</td>
</tr>
<tr>
<td><textarea name='sms_sending_AdminTpl' cols='40' rows='5'>".Configuration::get("sms_sending_AdminTpl")."</textarea></td>
<td><textarea name='sms_sending_UserTpl' cols='40' rows='5'>".Configuration::get("sms_sending_UserTpl")."</textarea></td>
<td valign='top'>Макросы:
<br>{NUM} - номер заказа
<br>{SUM} - сумма заказа
<br>{FIRSTNAME} - Имя покупателя
<br>{LASTNAME} - Фамилия покупателя
<br>{CITY} - Город покупателя
<br>{SHOP_NAME} - Название магазина
</td>
</tr>
<tr>
<td colspan='2'><input type='checkbox' name='sms_sending_ToAdmin'";
if (Configuration::get("sms_sending_ToAdmin") == 1) $html.=" checked='checked'";
$html.="> - Отправлять администратору</td>
</tr>
<tr>
<td colspan='2'><input type='checkbox' name='sms_sending_ToUser'";
if (Configuration::get("sms_sending_ToUser") == 1) $html.=" checked='checked'";
$html.="> - Отправлять покупателю</td>
</tr>
<tr>
<td colspan='2'><input type='submit' class='button' name='submitLogin' value='Сохранить'></td>
</tr>
</table>
</form>
";
return $html;

}

}


Или посоветуйте нормальный модуль.
 
Последнее редактирование модератором:
Изначально рекомендовал бы прятать такие объёмы текста под спойлер. Это так, к слову.
А вообще - 2 варианта. Самый простой, как мне кажется - забить на "брошенные корзины". Посуди объективно: если человек уже ушёл, ему не понравилась цена или доставка на твоём сайте - скорее всего в ближайшие пару часов он закажет товар там, где дешевле, либо (если дешевле у тебя) пойдёт на следующий ценник по маркету.
Вариант посложней - искать все переменные в твоём варианте, содержащие слово CART, и там рыться.
Нужны тебе строки:
$theCart = new Cart($params['cart']->id);
и
$tpl = str_replace('{NUM}', $params['cart']->id, $tpl);
Как понимаю, выборка идёт по параметру cart id, соответственно тебе надо сделать, чтобы выборка и привязка поля {NUM} происходили по параметру заказа. В первой строке php выдирает из таблицы значение порядкового номера корзины, во второй строке - привязывает это значение к блоку {NUM} (обрати внимание, что таких строчки 2: одна настройка для клиента, другая - для админа.
А уж как у тебя называются таблицы с данными по заказу - постарайся найти сам. Копать надо здесь и очень рекомендую самому вникнуть в тему - php тебе пригодиться. Скачай видеоуроки.
 
Спасибо, за совет. (объем буду прятать). Но брошенные корзины нельзя забить. Дело в том что таблица "cart" нумерует все корзины брошенные и не брошенные (т.е с завершенным заказом). Если было три корзины и 1 из них брошенная то номер в таблице "cart" будет 3, а в таблице "orders" будет порядковый номер 2. Следующий клиент который оформит заказ получит письмо с номером заказа №3 и СМС с номером заказа №4.

Нужны тебе строки:
$theCart = new Cart($params['cart']->id);
и
$tpl = str_replace('{NUM}', $params['cart']->id, $tpl);

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

Этот модуль (Для просмотра ссылки Войди или Зарегистрируйся) я скачивал у них, вообще смс не пришло.
PRESTA-SMS.COM - Этот модуль сначала не отправлял смс ,Чешская техподдержка поковырялась там, теперь смс приходят и как надо с id_order номер берет. Правда приходит сообщение от TopStore, а не о моего магазина.
 
Проверь в профиле - возможно имя от которого ты пытался отправлять не одобрено было поддержкой на тот момент. У меня этот модуль работает ;)
 
PRESTA-SMS.COM - Этот модуль сначала не отправлял смс ,Чешская техподдержка поковырялась там, теперь смс приходят и как надо с id_order номер берет. Правда приходит сообщение от TopStore, а не о моего магазина.
Я пользуюсь этим модулем уже очень долго. Проблем с ним вообще никаких. На счет номера с которого приходят смс, так это настраивается на вкладке "Настройка СМС сообщений". Есть еще один нюансик, в некоторых странах (например, Украина, в России не знаю как с этим) текстовый номер отправителя нужно регить в операторов связи. Это было сделано из-за того, что любой мог отправить смс з номером от банка и таким путем получить нужную информацию. Я меня на регистрацию пошло примерно 1,5 месяца, но зато теперь только я могу отправлять смс со своего текстового номера.
Тех. поддержка хорошо общается на английском. На ответ приходится ждать 1-2 дня, но не более.
 
задача то несложная
скоро займусь подобным модулем, шлюз выбрали smsaero

код напишу нормально в правильных хуках, запросы библиотекой curl, добавлю проверку статуса смс, логи и т.д.
и более гибкая конфигурация (текст в смс исходя из типа доставки/статуса заказа), что вполне здраво

в планах далее -- реализация маркетинговых стратегий (определение клиента в группу, соответствующую его интересам (истории заказов))

если кому интересно -- пишите ЛС
 
Я использую PRESTA-SMS.COM. Все работает. Если у вас есть проблемы, вы можете написать на поддержки. Поддержка работает быстро.
 
Я использую PRESTA-SMS.COM. Все работает. Если у вас есть проблемы, вы можете написать на поддержки. Поддержка работает быстро.
Как долго смс отправляет? В какой стране?
 
Назад
Сверху