SMS капча и проверка номера телефона для HostCMS
das_pivo
15 марта 2013 г.
SMS капча и проверка номера телефона с простой защитой от множественной отправки смс:
0. убедиться, что данная фишка точно нужна
1. в XLS шаблоне МагазинАдресДоставки заменить поля относящиеся к Телефон (или добавить):
(проверку можно организовать с помощью паттерна, нам ведь не нужны смс в Австралию? ну, если, кому нужны - то можно и не делать)
добавить поле
изменить
на
2. в ТДС Интернет-магазин корзина заменить case2 на
#подключаем класс сервиса (ахтунг! путь размещения)
require_once dirname(__FILE__).'\mainsms.class.php';
#включаем счетчик
if (!isset ($_SESSION['sms'])) {
$_SESSION['sms']=0;
}
# т.к. проверка на заполненность формы у меня реализована на javascript, если вдруг отключен проверим на заполненность
if ($_POST["phone"] == "")
{
echo ""
?><div style="parent_popuper">
<div id="popuper">
<h1 style="color:#ff6c36">«Ахтунг!»</h1>
</br>Не указан номер телефона.</br>Чтобы редактировать номер нажмите на кнопку
<div align="center"> </br><input type="button" onclick="history.back()" value="Закрыть" /></div>
<a class="closeer"title="Закрыть" onclick="history.back().style.display='none';"></a>
</div>
</div><?php
break;
}
if (isset($_POST["chekph"]))
{
#здесь 3 кол-во разрешенных попыток потратить ваши деньги
if ($_SESSION['sms']>=3)
{
echo ""
?><div style="parent_popuper">
<div id="popuper">
<h1 style="color:#ff6c36">«Ахтунг!»</h1>
</br>У вас заела кнопка "отправить код", или вы решили потратиь наши деньги. IP записан, наряд выехал.
<div align="center"> </br><input type="button" onclick="history.back()" value="Закрыть" /></div>
<a class="closeer"title="Закрыть" onclick="history.back().style.display='none';"></a>
</div>
</div><?php
break;
}
#заполняем данными которые выдал сервис при регистрации, два последних зачения true/false, или перепишите под ваш сервис
$api = new MainSMS('имя_проекта', 'апи_проекта', использовать_SSL, тестовый_режим);
#генерируем код
$pin_s = hexdec(substr(md5($_POST["phone"]."ваше_произвольное_значение"), 7, 5)); //
#отправляем
$api->sendSMS($_POST["phone"], "код:".$pin_s, 'имя_отправителя');
# увеличиваем счетчик попыток
$_SESSION['sms']++;
echo ""
?><div style="parent_popuper">
<div id="popuper">
<h3>«Щяз придет SMS»</h3>
</br> на номер телефона: <?php echo $_POST["phone"] ?>.
<div align="center"> </br><input type="button" onclick="history.back()" value="Закрыть" /></div>
<a class="closeer"title="Закрыть" onclick="history.back().style.display='none';"></a>
</div>
</div><?php
break;
}
else
{
#проверяем не изменился ли номер в форме и совпал ли код
if ($_POST["ok_ph"])
{
$oc = hexdec(substr(md5($_POST["phone"]."ваше_произвольное_значение"), 7, 5));
if ($oc == $_POST["code"])
{
#все совпало
$_SESSION['hostcmsOrder']['shop_country_id'] = intval(Core_Array::getPost('shop_country_id', 0));
$_SESSION['hostcmsOrder']['shop_country_location_id'] = intval(Core_Array::getPost('shop_country_location_id', 0));
$_SESSION['hostcmsOrder']['shop_country_location_city_id'] = intval(Core_Array::getPost('shop_country_location_city_id', 0));
$_SESSION['hostcmsOrder']['shop_country_location_city_area_id'] = intval(Core_Array::getPost('shop_country_location_city_area_id', 0));
$_SESSION['hostcmsOrder']['postcode'] = strval(Core_Array::getPost('postcode'));
$_SESSION['hostcmsOrder']['address'] = strval(Core_Array::getPost('address'));
$_SESSION['hostcmsOrder']['surname'] = strval(Core_Array::getPost('surname'));
$_SESSION['hostcmsOrder']['name'] = strval(Core_Array::getPost('name'));
$_SESSION['hostcmsOrder']['patronymic'] = strval(Core_Array::getPost('patronymic'));
$_SESSION['hostcmsOrder']['company'] = strval(Core_Array::getPost('company'));
$_SESSION['hostcmsOrder']['phone'] = strval(Core_Array::getPost('phone'));
$_SESSION['hostcmsOrder']['fax'] = strval(Core_Array::getPost('fax'));
$_SESSION['hostcmsOrder']['email'] = strval(Core_Array::getPost('email'));
$_SESSION['hostcmsOrder']['description'] = strval(Core_Array::getPost('description'));
$Shop_Delivery_Controller_Show = new Shop_Delivery_Controller_Show($oShop);
$Shop_Delivery_Controller_Show
->shop_country_id($_SESSION['hostcmsOrder']['shop_country_id'])
->shop_country_location_id($_SESSION['hostcmsOrder']['shop_country_location_id'])
->shop_country_location_city_id($_SESSION['hostcmsOrder']['shop_country_location_city_id'])
->shop_country_location_city_area_id($_SESSION['hostcmsOrder']['shop_country_location_city_area_id'])
->couponText(Core_Array::get(Core_Array::get($_SESSION, 'hostcmsOrder', array()), 'coupon_text'))
->setUp()
->xsl(
Core_Entity::factory('Xsl')->getByName(
Core_Array::get(Core_Page::instance()->libParams, 'deliveryXsl')
)
)
->show();
break;
}
else
# не совпало :(((
{
echo ""
?><div style="parent_popuper">
<div id="popuper">
<h1>«Ахтунг!»</h1>
<p>Проверь номер телефона или проверочный код.</p>
<p>Чтобы исправить данные жми кнопку </p>
<div align="center"><input type="button" onclick="history.back()" value="Исправить" /></div>
<a class="closeer"title="Закрыть" onclick="history.back().style.display='none';"></a>
</div>
</div><?php
break;
}
}
break;
}
3. не забыть обнулить счетчик
например в case 4
4. в качестве "спасибы" принимаются регистрации на сервисеhttp://mainsms.ru/users/sign_up?ref=2402 . 15коп/смс, 50 в подарок
0. убедиться, что данная фишка точно нужна
1. в XLS шаблоне МагазинАдресДоставки заменить поля относящиеся к Телефон (или добавить):
<div class="row">
<div class="caption">Мобильный телефон:</div>
<div class="field">
<input type="text" name="phone" value="{/shop/siteuser/phone}" class="width2" />
</div>
</div>
<div class="caption">Мобильный телефон:</div>
<div class="field">
<input type="text" name="phone" value="{/shop/siteuser/phone}" class="width2" />
</div>
</div>
(проверку можно организовать с помощью паттерна, нам ведь не нужны смс в Австралию? ну, если, кому нужны - то можно и не делать)
добавить поле
<div class="row">
<div class="caption">Проверочный код</div>
<div class="field">
<input name="step" value="2" type="hidden" />
<input type="text" size="7" name="code" class="width2" /><input value="Получить код" type="submit" class="button" name="chekph" />
</div>
</div>
<div class="caption">Проверочный код</div>
<div class="field">
<input name="step" value="2" type="hidden" />
<input type="text" size="7" name="code" class="width2" /><input value="Получить код" type="submit" class="button" name="chekph" />
</div>
</div>
изменить
<input value="Далее →" type="submit" class="button" />
на
<input value="Далее →" name="ok_ph" type="submit" class="button" />
2. в ТДС Интернет-магазин корзина заменить case2 на
#подключаем класс сервиса (ахтунг! путь размещения)
require_once dirname(__FILE__).'\mainsms.class.php';
#включаем счетчик
if (!isset ($_SESSION['sms'])) {
$_SESSION['sms']=0;
}
# т.к. проверка на заполненность формы у меня реализована на javascript, если вдруг отключен проверим на заполненность
if ($_POST["phone"] == "")
{
echo ""
?><div style="parent_popuper">
<div id="popuper">
<h1 style="color:#ff6c36">«Ахтунг!»</h1>
</br>Не указан номер телефона.</br>Чтобы редактировать номер нажмите на кнопку
<div align="center"> </br><input type="button" onclick="history.back()" value="Закрыть" /></div>
<a class="closeer"title="Закрыть" onclick="history.back().style.display='none';"></a>
</div>
</div><?php
break;
}
if (isset($_POST["chekph"]))
{
#здесь 3 кол-во разрешенных попыток потратить ваши деньги
if ($_SESSION['sms']>=3)
{
echo ""
?><div style="parent_popuper">
<div id="popuper">
<h1 style="color:#ff6c36">«Ахтунг!»</h1>
</br>У вас заела кнопка "отправить код", или вы решили потратиь наши деньги. IP записан, наряд выехал.
<div align="center"> </br><input type="button" onclick="history.back()" value="Закрыть" /></div>
<a class="closeer"title="Закрыть" onclick="history.back().style.display='none';"></a>
</div>
</div><?php
break;
}
#заполняем данными которые выдал сервис при регистрации, два последних зачения true/false, или перепишите под ваш сервис
$api = new MainSMS('имя_проекта', 'апи_проекта', использовать_SSL, тестовый_режим);
#генерируем код
$pin_s = hexdec(substr(md5($_POST["phone"]."ваше_произвольное_значение"), 7, 5)); //
#отправляем
$api->sendSMS($_POST["phone"], "код:".$pin_s, 'имя_отправителя');
# увеличиваем счетчик попыток
$_SESSION['sms']++;
echo ""
?><div style="parent_popuper">
<div id="popuper">
<h3>«Щяз придет SMS»</h3>
</br> на номер телефона: <?php echo $_POST["phone"] ?>.
<div align="center"> </br><input type="button" onclick="history.back()" value="Закрыть" /></div>
<a class="closeer"title="Закрыть" onclick="history.back().style.display='none';"></a>
</div>
</div><?php
break;
}
else
{
#проверяем не изменился ли номер в форме и совпал ли код
if ($_POST["ok_ph"])
{
$oc = hexdec(substr(md5($_POST["phone"]."ваше_произвольное_значение"), 7, 5));
if ($oc == $_POST["code"])
{
#все совпало
$_SESSION['hostcmsOrder']['shop_country_id'] = intval(Core_Array::getPost('shop_country_id', 0));
$_SESSION['hostcmsOrder']['shop_country_location_id'] = intval(Core_Array::getPost('shop_country_location_id', 0));
$_SESSION['hostcmsOrder']['shop_country_location_city_id'] = intval(Core_Array::getPost('shop_country_location_city_id', 0));
$_SESSION['hostcmsOrder']['shop_country_location_city_area_id'] = intval(Core_Array::getPost('shop_country_location_city_area_id', 0));
$_SESSION['hostcmsOrder']['postcode'] = strval(Core_Array::getPost('postcode'));
$_SESSION['hostcmsOrder']['address'] = strval(Core_Array::getPost('address'));
$_SESSION['hostcmsOrder']['surname'] = strval(Core_Array::getPost('surname'));
$_SESSION['hostcmsOrder']['name'] = strval(Core_Array::getPost('name'));
$_SESSION['hostcmsOrder']['patronymic'] = strval(Core_Array::getPost('patronymic'));
$_SESSION['hostcmsOrder']['company'] = strval(Core_Array::getPost('company'));
$_SESSION['hostcmsOrder']['phone'] = strval(Core_Array::getPost('phone'));
$_SESSION['hostcmsOrder']['fax'] = strval(Core_Array::getPost('fax'));
$_SESSION['hostcmsOrder']['email'] = strval(Core_Array::getPost('email'));
$_SESSION['hostcmsOrder']['description'] = strval(Core_Array::getPost('description'));
$Shop_Delivery_Controller_Show = new Shop_Delivery_Controller_Show($oShop);
$Shop_Delivery_Controller_Show
->shop_country_id($_SESSION['hostcmsOrder']['shop_country_id'])
->shop_country_location_id($_SESSION['hostcmsOrder']['shop_country_location_id'])
->shop_country_location_city_id($_SESSION['hostcmsOrder']['shop_country_location_city_id'])
->shop_country_location_city_area_id($_SESSION['hostcmsOrder']['shop_country_location_city_area_id'])
->couponText(Core_Array::get(Core_Array::get($_SESSION, 'hostcmsOrder', array()), 'coupon_text'))
->setUp()
->xsl(
Core_Entity::factory('Xsl')->getByName(
Core_Array::get(Core_Page::instance()->libParams, 'deliveryXsl')
)
)
->show();
break;
}
else
# не совпало :(((
{
echo ""
?><div style="parent_popuper">
<div id="popuper">
<h1>«Ахтунг!»</h1>
<p>Проверь номер телефона или проверочный код.</p>
<p>Чтобы исправить данные жми кнопку </p>
<div align="center"><input type="button" onclick="history.back()" value="Исправить" /></div>
<a class="closeer"title="Закрыть" onclick="history.back().style.display='none';"></a>
</div>
</div><?php
break;
}
}
break;
}
3. не забыть обнулить счетчик
$_SESSION['sms']=0;
например в case 4
4. в качестве "спасибы" принимаются регистрации на сервисе
Авторизация