SMS капча и проверка номера телефона для HostCMS

#
SMS капча и проверка номера телефона для HostCMS
SMS капча и проверка номера телефона с простой защитой от множественной отправки смс:
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="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>

изменить
<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. в качестве "спасибы" принимаются регистрации на сервисе http://mainsms.ru/users/sign_up?ref=2402. 15коп/смс, 50 в подарок  
Авторизация