Часть вторая (или отправляем код подтверждения по SMS)
|
|
Автор: Петр Кушиков
Опубликовано: 355 дней назад (4 июня 2011)
Рубрика: Без рубрики
Редактировалось: 2 раза — последний 4 июня 2011
|
+12↑ Голосов: 12 |
В первой части своего блога я рассказал, как нам создать собственный SMS-сервис. Сегодня я хотел рассказать, как отправлять код регистрации по SMS, а также ввести новое определение ID_SMS, которое может использоваться для отправки личных сообщений по средством SMS... Но описание процесса регистрации оказалось довольно большим, поэтому, приношу свои извинения, но описание ID_SMS я перенесу на один из следующих блогов.
Ну что ж... начнем "приучать" к SMS-сервису InstantCMS. Блог получился большой и в некоторых файлах придется прописывать много параметров, поэтому я сначала опишу общий план действий, а потом уже буду прописывать: что, где и для чего мы будем менять.
Общий план:
1. Прописать обработчик параметров, получаемых от InstantCMS (обработчик лежит на том же серваке, где и Ваш SMS-сервис).
2. Ввести новое поле "Номер телефона" в профиль (делаем его доступным при регистрации, а также для редактирования. Я в своем проекте не отображаю это поле в профиле, т.к. это "Конфиденциальная/личная информация", которая охраняется законом).
3. Изменяем систему регистрации и редактирования профиля.
4. Изменяем систему активации профиля (меняем механизм генерации и отправки кода подтверждения).
ОБРАЩАЮ ВАШЕ ВНИМАНИЕ, ЧТО ПЕРЕД НАЧАЛО ВСЕХ ДЕЙСТВИЙ РЕКОМЕНДУЕТСЯ СОХРАНИТЬ BACKUP ВСЕХ ДАННЫХ!!!
1. Самым простым будет прописать обработчик. Создаем в корневой директории Вашего веб-сервера (где настроен SMS-сервис) папку SMS. И создаем там файл, например, registration.php со следующим содержимым:
2. Вводим новое поле в профиль.
В БД в таблице cms_users после столбца ICQ добавляем новый столбец NUMBER (text, cp1251_general_ci). В нем мы будем хранить номер телефона пользователя.
Далее я буду описывать в каких файлах и что будем менять (изменения будут относится как ко 2-му пункту, так и к 3-му, и к 4-му пунктам).
Открываем файл components/registration/frontend.php
1. Изменяем функцию генерации кода подтверждения:
Находим сроки:
Находим строки:
Ищем:
Ищем:
Открываем файл components/registration/router.php
Здесь мы поменяем количество символов в коде при проверке.
Ищем:
Открываем файл components/users/frontend.php
1. Ищем секцию /////EDIT PROFILE////
Находим здесь следующие строки:
С "внутренностями" системы покончено.
Теперь поправим все шаблоны.
Открываем файл templates/ВАШ_ШАБЛОН/components/com_registration.tpl
1. Добавим в форму регистрации новое поле.
Ищем такие строки:
Открываем файл templates/ВАШ_ШАБЛОН/components/com_users_edit_profile.tpl
1. Добавим поле "Номер телефона" в редактирование профиля.
Ищем код:
Теперь поправим шаблон активации пользователя:
Открываем файл templates/_default_/special/regactivate.php
В самом начале файла, до тега <html> добавляем:
Ну что ж... начнем "приучать" к SMS-сервису InstantCMS. Блог получился большой и в некоторых файлах придется прописывать много параметров, поэтому я сначала опишу общий план действий, а потом уже буду прописывать: что, где и для чего мы будем менять.
Общий план:
1. Прописать обработчик параметров, получаемых от InstantCMS (обработчик лежит на том же серваке, где и Ваш SMS-сервис).
2. Ввести новое поле "Номер телефона" в профиль (делаем его доступным при регистрации, а также для редактирования. Я в своем проекте не отображаю это поле в профиле, т.к. это "Конфиденциальная/личная информация", которая охраняется законом).
3. Изменяем систему регистрации и редактирования профиля.
4. Изменяем систему активации профиля (меняем механизм генерации и отправки кода подтверждения).
ОБРАЩАЮ ВАШЕ ВНИМАНИЕ, ЧТО ПЕРЕД НАЧАЛО ВСЕХ ДЕЙСТВИЙ РЕКОМЕНДУЕТСЯ СОХРАНИТЬ BACKUP ВСЕХ ДАННЫХ!!!
1. Самым простым будет прописать обработчик. Создаем в корневой директории Вашего веб-сервера (где настроен SMS-сервис) папку SMS. И создаем там файл, например, registration.php со следующим содержимым:
Код PHP:
Данный обработчик получает из InstantCMS номер пользователя и код подтверждения регистрации и отправляет SMS.
<?php
$num=$_GET['to']; //получаем номер телефона, кому отправим смс
$pin=$_GET['msg']; //получаем код подтверждения
$datas="app=webservices&u=ВАШ_ЛОГИН_К_SMS-СЕРВИСУ&p=ВАШ_ПАРОЛЬ_К_SMS-СЕРВИСУ&ta=pv&to=$num&unicode=1&msg=Vash+kod+podtverzhdeniya+registracii:+$pin"; //формируем строку запроса в SMS-сервис
$fp = fsockopen("localhost", 80, $errno, $errstr, 10); //хост, где находится SMS-сервис
$out = "POST / HTTP/1.1\n";
$out .= "Host: localhost\n";
$out .= "Referer: localhost/\n";
$out .= "User-Agent: Opera\n";
$out .= "Content-Type: application/x-www-form-urlencoded\n";
$out .= "Content-Length: ".strlen($datas)."\n\n";
$out .= $datas."\n\n";
fputs($fp, $out); //отправляем запрос
fclose($fp);
?>
2. Вводим новое поле в профиль.
В БД в таблице cms_users после столбца ICQ добавляем новый столбец NUMBER (text, cp1251_general_ci). В нем мы будем хранить номер телефона пользователя.
Далее я буду описывать в каких файлах и что будем менять (изменения будут относится как ко 2-му пункту, так и к 3-му, и к 4-му пунктам).
Открываем файл components/registration/frontend.php
1. Изменяем функцию генерации кода подтверждения:
Находим сроки:
Код PHP:
и меняем их на:
$code = md5($user['email'].substr(md5(rand(0,9999)), 0, 8));
$codelink = 'http://'.$_SERVER['HTTP_HOST'].'/activate/'.$code;
Код PHP:
2. Заменяем функцию отправки письма, на функцию отправки SMS:
$alf="abcdefghijklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ";
$cntalf=strlen($alf);
$code="";
for($i=0;$i<6; $i++){
$code.=$alf[rand(0,$cntalf)];
}
Находим строки:
Код PHP:
и меняем их на:
$letter_path = PATH.'/includes/letters/activation.txt';
$letter = file_get_contents($letter_path);
foreach($user as $key=>$value){
$letter= str_replace('{'.$key.'}', $value, $letter);
}
$letter= str_replace('{sitename}', $inConf->sitename, $letter);
$letter= str_replace('{codelink}', $codelink, $letter);
$inCore->mailText($user['email'], $_LANG['ACTIVATION_ACCOUNT'].' - '.$inConf->sitename, $letter);
Код PHP:
3. Добавляем поле Номер телефона в форму регистрации:$n=$user['number']; //номер куда будем отправлять SMS $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://ВАШ_IP/sms/registration.php?to=$n&msg=$code"); //IP-адрес Вашего SMS-сервиса и переменные отправляемые ему curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_USERAGENT, 'PHP Bot (http://mysite.ru)'); $data = curl_exec($ch); curl_close($ch);
Ищем:
Код PHP:
И сразу после него вставляем:
if ($cfg['ask_icq']){
$icq = $inCore->request('icq', 'str', '');
$icq = preg_replace('/([^0-9])/i', '', $icq);
} else {
$icq = '';
}
Код PHP:
4. Изменяем запрос в базу данных при регистрации пользователя:
if($inCore->request('number', 'str', '')) { $number = $inCore->request('number', 'str', ''); } else { $msg .= 'Укажите номер телефона в формате 79ххуууууу'; }
Ищем:
Код PHP:
заменяем на:
$sql = "INSERT INTO cms_users (group_id, login, nickname, password, email, icq, regdate, logdate, birthdate, is_locked, is_logged_once, invited_by)
VALUES ('$group_id', '$login', '$nickname', '$pass', '$email', '$icq', NOW(), NOW(), '$birthdate', '$is_locked', 0, '{$invited_by}')";
Код PHP:
сохраняем файл components/registration/frontend.php .
$sql = "INSERT INTO cms_users (group_id, login, nickname, password, email, icq, number, regdate, logdate, birthdate, is_locked, is_logged_once, invited_by)
VALUES ('$group_id', '$login', '$nickname', '$pass', '$email', '$icq', '$number', NOW(), NOW(), '$birthdate', '$is_locked', 0, '{$invited_by}')";
Открываем файл components/registration/router.php
Здесь мы поменяем количество символов в коде при проверке.
Ищем:
Код PHP:
И заменяем на:
$routes[] = array(
'_uri' => '/^registration\/activate\/([a-z0-9]{32})$/i',
'do' => 'activate',
1 => 'code'
);
Код PHP:
с этим файлом тоже закончили работать...
$routes[] = array(
'_uri' => '/^registration\/activate\/([a-z0-9]{6})$/i',
'do' => 'activate',
1 => 'code'
);
Открываем файл components/users/frontend.php
1. Ищем секцию /////EDIT PROFILE////
Находим здесь следующие строки:
Код PHP:
и сразу поле них добавляем:
if ($opt == 'save'){
$errors = false;
Код PHP:
2. Теперь обновим запрос в БД. Ищем строки
$number = $inCore->request('number', 'str');
Код PHP:
и сразу после строки icq добавляем$sql = "UPDATE cms_users SET birthdate='$birthdate', email='$email', icq='$icq',
Код PHP:
сохраняем файл components/users/frontend.php .number='$number',
С "внутренностями" системы покончено.
Теперь поправим все шаблоны. Открываем файл templates/ВАШ_ШАБЛОН/components/com_registration.tpl
1. Добавим в форму регистрации новое поле.
Ищем такие строки:
Код PHP:
и сразу после них добавляем:
{if $cfg.ask_icq}
<tr>
<td valign="top" class=""><strong>ICQ:</strong></td>
<td valign="top" class="">
<input name="icq" type="text" class="text-input" id="icq" value="{$icq}" size="30"/>
</td>
</tr>
{/if}
Код PHP:
сохраняем файл templates/ВАШ_ШАБЛОН/components/com_registration.tpl
<tr>
<td valign="top" class=""><div><strong>Номер телефона :</strong></div><div><small>Внимание!!! Необходимо указать 11 цифр Вашего мобильного телефона начиная с 7. Например, <strong>79511234567.</strong></small></div></td>
<td valign="top" class=""><input name="number" type="text" id="number" size="30" value="{$number}"/><span class="regstar">*</span></td>
</tr>
Открываем файл templates/ВАШ_ШАБЛОН/components/com_users_edit_profile.tpl
1. Добавим поле "Номер телефона" в редактирование профиля.
Ищем код:
Код PHP:
и сразу после этих строк дописываем:
<tr>
<td valign="top"><strong>{$LANG.NUMBER_ICQ} :</strong></td>
<td valign="top"><input name="icq" class="text-input" type="text" id="icq" style="width:300px" value="{$usr.icq}"/></td>
</tr>
Код PHP:
сохраняем файл templates/ВАШ_ШАБЛОН/components/com_users_edit_profile.tpl
<tr>
<td valign="top"><div><strong>Номер телефона :</strong></div><div><small>Внимание!!! Необходимо указать 11 цифр Вашего мобильного телефона начиная с 7. Например, <strong>79511234567.</strong></small></div></td>
<td valign="top"><input name="number" type="text" id="number" style="width:300px" value="{$usr.number}"/></td>
</tr>
Теперь поправим шаблон активации пользователя:
Открываем файл templates/_default_/special/regactivate.php
В самом начале файла, до тега <html> добавляем:
Код PHP:
Удаляем код автоматической переадресации через 25 секунд, а именно вот эту строку:
<?php
if (isset($_POST['subm'])) { //проверяем нажималась ли кнопка Sumbit, если нет, то показываем шаблон; если да, то уходим на активацию...
$ur = $_POST['key']; //получаем код активации, введенный пользователем
$URL="http://АДРЕС_ВАШЕГО_САЙТА/activate/$ur"; //здесь прописываем где проходит активация
header ("Location: $URL"); //сама переадресация на активацию
}
else {
?>
Код PHP:
Заменяем все, что идет после кода:<meta http-equiv="refresh" content="25;URL=/">
Код PHP:
на следующий код:<h2>Регистрация завершена</h2>
Код PHP:
Путем таких вот "несложных" доработок, мы добавили новое поле в профиль, а также научили IstantCMS отправлять код подтверждения путем отправки SMS. В следующем блоге, я расскажу, как с помощью SMS можно поменять стаусное сообщение, отображаемое в Профиле пользователя.
<p>На указанный вами номер телефона выслано SMS-сообщение с кодом подтверждения.</p>
<p><form action='/templates/ВАШ_ШАБЛОН/special/regactivate.php' method='POST'> //форма для ввода кода активации
Код активации: <input name='key' type='text' />
<input type="submit" name="subm" value='Активировать учетную запись'>
</form></p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
<?php
}
?>
| # 6 июня 2011 в 17:32 0 | ||
|
| # 6 июня 2011 в 17:34 0 | ||
|
| # 16 июня 2011 в 22:56 0 | ||
|
| # 3 августа 2011 в 17:15 0 | ||
|
| # 3 августа 2011 в 17:28 0 | ||
|
| # 24 апреля 2012 в 18:12 0 | ||
|