СМС оповещение о статусе заказа для CMS Битрикс
Стояла следующая задача — организовать уведомления по SMS о статусе заказа в интернет-магазине, работающем под управлением 1С-Битрикс ниже представлена информация о том, как можно реализовать подобный функционал.
Необходимо сделать функцию отправки sms-сообщения и положить ее в файл /bitrix/php_interface/init.php
Эта функция будет выглядеть так:
function sendSMS($phone, $text)
{
$sender = "Sender";
$login = "login";
$pass = "password";$src = '
'.$sender.'
'.$login.'
'.$pass.'
send
'.$text.'';
$res = ";
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: text/xml;
charset=utf-8′));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CRLF, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_SSLVERSION,3);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_POSTFIELDS, $src);
curl_setopt($ch, CURLOPT_URL, 'http://lcab.sms-sending.ru/API/XML/send.php');
$result = curl_exec($ch);
$res = $result;
curl_close($ch);
return $res;
}Видно, что функция принимает номер телефона и текст sms.
Затем стоит продумать, как вы хотите хранить тексты sms. Можно их хранить в файлах, но возможно администратору интернет-магазина будет неудобно их так хранить. Лучше всего сделать выделить под хранение текста sms какой-нибудь инфоблок. Только стоит не забыть сделать поле статус — по нему мы будем идентифицировать какой именно текст требуется отправить.
Итак функция для отправки у нас есть, тексты sms мы храним в инфоблоке и по свойству Статус мы можем получить текст посредством API Битрикс. Осталось организовать отправку sms по событию. Событие у нас будет — смена статуса заказа. Подрубиться к нему очень просто:
// файл /bitrix/php_interface/init.php
AddEventHandler("sale", "OnStatusUpdate", "StatusUpdate");
function StatusUpdate(&$ID, &$val)
{
// обработка
}
Для отправки sms нам нужно знать: номер телефона клиента, текст sms. В свою очередь, чтобы узнать текст sms нужно знать статус заказа. Статус заказа хранится в элементе массива $val['STATUS_ID'] .
Текст sms элементарно можно узнать посредством метода CIBlockElement::GetList:
$arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array(), Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE"=>"Y" , "PROPERTY_STATUS"=>$val['STATUS_ID']), false, Array("nPageSize"=>1));
while($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields();
}
Если текст sms мы записали в детальном описании элемента инфоблока, то у нас он в коде оказывается в элементе массива $arFields["DETAIL_TEXT"].
* Не забудьте $IBLOCK_ID заменить на свой ID инфоблока, где хранятся тексты sms!
Теперь узнаем номер телефона. Он у нас хранится в свойстве заказа, т.к. номер телефона покупатель вводит в процессе оформления заказа.
Для того, чтобы было удобно доставать свойства заказа я сделал такую функцию:
function getOrderPropValue($ORDER_ID, $PROPS_ID)
{
CModule::IncludeModule('sale');
$db_order = CSaleOrder::GetList(
array(),
array("ID" => $ORDER_ID)
);
while ($arOrder = $db_order->Fetch())
{
$db_props = CSaleOrderProps::GetList(
array("SORT" => "ASC"),
array(
"PERSON_TYPE_ID" => $arOrder["PERSON_TYPE_ID"],
)
);
while ($arProps = $db_props->Fetch())
{
$db_vals = CSaleOrderPropsValue::GetList(
array(),
array(
"ORDER_ID" => $ORDER_ID,
"ORDER_PROPS_ID" => $PROPS_ID
)
);
if ($arVals = $db_vals->Fetch())
return $arVals["VALUE"];
}
}
}
Предположим, свойство заказа «Номер телефона» имеет код в системе 3. Тогда мы можем узнать номер телефона, указанный в заказе следующим кодом:
$phone = getOrderPropValue($ID, 3);
Все составляющие известны — отправляем sms!
sendSMS($phone, $arFields["DETAIL_TEXT"]);
В итоге у нас получился такой код обработчика:
// файл /bitrix/php_interface/init.php
AddEventHandler("sale", "OnStatusUpdate", "StatusUpdate");
function StatusUpdate(&$ID, &$val)
{$arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array(), Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE"=>"Y" , "PROPERTY_STATUS"=>$val['STATUS_ID']), false, Array("nPageSize"=>1));
while($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields();
}$phone = getOrderPropValue($ID, 3);
sendSMS($phone, $arFields["DETAIL_TEXT"]);}
Готовый модуль отправки СМС для интернет-магазинов на платформе 1С Битрикс.
Скачать модуль можно на здесь
Возможности:
1) Позволяет организовать SMS уведомление клиентов, без навыков программирования!
2) Простой интерфейс, работа с любыми событиями и статусами модуля интернет-магазина.
3) Наиболее полный комплект шаблонов для вставки в сообщения, вплоть до службы доставки. (ВНИМАНИЕ: для получения шаблонов вставки свойств заказа, у них должен быть указан «мнемонический код» или просто «код»)
4) Не требует специального формата телефона, ваши клиенты могут заполнять поле "телефон" как они привыкли без специального форматирования!
5) Имеет справку по функционалу и описание API в настройках модуля! С помощью простого API можно организовать рассылку не только в редакциях с интернет-магазином.
6) Позволяет отсылать дополнительные сообщения на дополнительный телефон, теперь не нужно заниматься мониторингом почты и сайта для отслеживания заказов, вам придёт сообщение если вы укажете телефон и напишите соответствующее сообщение!
Пример форматированного смс на новый заказ (подробнее в настройках модуля):
Спасибо! Ваш заказ №#ORDER_NUMBER# принят. Стоимость заказа #ORDER_SUMM# р., стоимость доставки #PRICE_DELIVERY# р., сумма заказа с учётом доставки: #PRICE# р. SITE.RU
УСТАНОВКА:
1. Установите модуль «SMS для интернет-магазина» из Маркетплейса.
2. Зарегистрируйтесь на нашем шлюзе.
3. Настройте доступ к шлюзу на вкладке настроек модуля "SMS для интернет-магазина". Зарегистрируйте свое имя отправителя в личном кабинете СМС шлюза.
4. Выберете свойство заказа содержащее телефон.
5. Добавьте текст сообщения, можно использовать по шаблону #ORDER_NUMBER# - номер заказа, #ORDER_SUMM# - сумма заказа, #PRICE_DELIVERY# - стоимость доставки, #PRICE# - полная стоимость
6. Сделайте заказ и убедитесь в работоспособности сервиса.