Авторизация через WMLogin перед регистрацией
Авторизация через WMLogin перед регистрацией
Итак... За исходник я взял файл register.php из этого скрипта.

Поехали... Качаем новый сертификат WebMoney отсюда. Его льём в корень сайта.

Следующим шагом открываем наш register.php и находим:
if(isset($_SESSION["username"]) && isset($_SESSION["password"]))
{
    echo "<b><img src="images/error.png" align="middle">&nbsp;Вы уже зарегистрированы...</b>";
    include('footer.php');
    exit();
}

Следом добавляем код:

$urlid="RID сюда !!!";
if(isset($_POST['WmLogin_UrlID']))
{
$testticket=preg_match('/^[a-zA-Z0-9$!/]{32,48}$/i', $_POST['WmLogin_Ticket']);
if($_POST['WmLogin_UrlID']==$urlid && $testticket==1) {
$xml="
<request>
    <siteHolder>Сюда ваш вмид</siteHolder>
    <user>".$_POST['WmLogin_WMID']."</user>
    <ticket>".$_POST['WmLogin_Ticket']."</ticket>
    <urlId>".$urlid."</urlId>
    <authType>".$_POST['WmLogin_AuthType']."</authType>
    <userAddress>".$_POST['WmLogin_UserAddress']."</userAddress>
</request>
";
    $root=$_SERVER["DOCUMENT_ROOT"];
    $CertPath="$root/WMUsedRootCAs.cer";
function _GetAnswer($xml){
    global $CertPath;
    // Инициализируем сеанс CURL
    $ch = curl_init("https://login.wmtransfer.com/ws/authorize.xiface");
    // В выводе CURL http-заголовки не нужны
    curl_setopt($ch, CURLOPT_HEADER, 0);
    // Возвращать результат, а не выводить его в браузер
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    // Метод http-запроса - POST
    curl_setopt($ch, CURLOPT_POST,1);
    // Что передаем?
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
    // Задаем корневой сертификат для проверки
    curl_setopt($ch, CURLOPT_CAINFO, $CertPath);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
    // Выполняем запрос, ответ помещаем в переменную $result;
    $result=curl_exec($ch);
    if(curl_errno($ch)) echo "Curl Error number = ".curl_errno($ch).", Error desc = ".curl_error($ch)."<br>";
    curl_close($ch);
    return $result;
}
$resxml=_GetAnswer($xml);
$xmlres = simplexml_load_string($resxml);
if(!$xmlres) echo "Не получен XML-ответ";
$result=strval($xmlres->attributes()->retval);
if($result=='0')
{



    $wmid=$_POST["WmLogin_WMID"];
    $_SESSION[regwmid]=$wmid;
}else{
    echo "Произошла ошибка при попытке авторизоваться...<br>
    <a href="https://login.wmtransfer.com/GateKeeper.aspx?RID=$urlid">Пройти авторизацию повторно...</a>";
    include('footer.php');
    exit;
}
    }else{
        echo "Произошла ошибка при попытке авторизоваться...<br>
    <a href="https://login.wmtransfer.com/GateKeeper.aspx?RID=$urlid">Пройти авторизацию повторно...</a>";
    include('footer.php');
    exit;
    }
    }
if(!isset($_SESSION[regwmid]))
{
    echo "Для продолжения регистрации пройдите авторизацию через Login.wmtransfer.com.<br>
    <a href="https://login.wmtransfer.com/GateKeeper.aspx?RID=$urlid">Пройти авторизацию...</a>";
    include('footer.php');
    exit;
}

Не забываем, что код необходимо поправить, а именно: ввести свой WMID в нужное место и ввести rid ссылки. Как его получить описано тут.

Продолжим... Опустимся ниже и найдём код:
$wmid=$_POST["wmid"];

Поскольку после авторизации WMID задаётся сессией - принимать его нам уже с POST запроса не нужно. Меняем код выше на:
$wmid = $_SESSION[regwmid];

Спускаемся ниже... В принципе шаг можно опустить, однако можно и сделать. Если мы хотим,чтобы после регистрации сессия обнулялась - после запроса примерно такого вида:
$query = "INSERT INTO tb_users (username, password, ip, pemail, referer, country, joindate, wmid, buying) VALUES('$username','$password','$laip','$pemail','$referer','$country','$joindate','$wmid','$buying')";
                        mysql_query($query) or die(mysql_error());

Добавим:
unset($_SESSION[regwmid]);

Однако, это тоже не всё. Спустимся ещё ниже в чистый HTML и найдём строки примерно такого вида:
<input type="text" size="25" maxlength="12" name="wmid" autocomplete="off" class="field" value="" tabindex="1" />

В принципе, можно вообще эту строку удалить и вместо неё вставить:
<?=$_SESSION[regwmid]; ?>

Тогда будет выводить просто WMID. А можно видоизменить строчку на:
<input type="text" size="25" maxlength="12" name="wmid" autocomplete="off" class="field" value="<?=$_SESSION[regwmid]; ?>" tabindex="1" readonly />

В этом случае мы получим просто заблокированное для редактирования поле с уже вставленным WMID.

Код у вас может отличаться. Я всего лишь привёл пример...

В принципе, всё. Жду комментариев.


Рубрика: Бесплатное » Плагины   |   Автор: Alex   |   Просмотры: 9678
Комментариев: 338
Публикаций: 169
ICQ: 650073308
- 291 +
  Автор: Alex   |   Группа: Пользователи   |   Дата: 29 июля 2011  
по-моему всё учёл.жаль протестировать не удалось,но получиться должно
Комментариев: 0
Публикаций: 0
ICQ: --
- 0 +
  Автор: Hamit   |   Группа: Гости   |   Дата: 29 июля 2011  
Это доступно для всех видов аттестатов?
Комментариев: 338
Публикаций: 169
ICQ: 650073308
- 291 +
  Автор: Alex   |   Группа: Пользователи   |   Дата: 29 июля 2011  
ХЗ не помню уже...вроде ток для продавцов не помню...мож и для всех)) там у вм читать надо)
Комментариев: 129
Публикаций: 9
ICQ: 646895
- 178 +
  Автор: SpawN   |   Группа: Дизайнеры   |   Дата: 29 июля 2011  
выше перса тока =) на персе проверил пашет winked
Спасибо Алекс
Комментариев: 23
Публикаций: 3
ICQ: --
- 11 +
  Автор: smoker024   |   Группа: V.I.P.   |   Дата: 01 августа 2011  
Вроде проверок нет, как же работает отсеивание аттестатов ниже перса? По ходу для всех это..
Комментариев: 338
Публикаций: 169
ICQ: 650073308
- 291 +
  Автор: Alex   |   Группа: Пользователи   |   Дата: 02 августа 2011  
какие проверки?? спрашивалось для какого аттестата - если вм логин позволяет формальным добавлять сайты и пользоваться их авторизацией,тогда подходит и для формального

в коде же проходит курл запрос,который выявляет наличие тикета и в отличие от старых плагинов,этот код не пропустит искусственный пост запрос (описывалось в дыре при авторизации)
Комментариев: 23
Публикаций: 3
ICQ: --
- 11 +
  Автор: smoker024   |   Группа: V.I.P.   |   Дата: 03 августа 2011  
Я думал речь о проверке аттестатов перед регистрацией.. типа запрет псевдонимам и тп.
Комментариев: 15
Публикаций: 0
ICQ: --
- 20 +
  Автор: GOODBEETLE   |   Группа: V.I.P.   |   Дата: 04 августа 2011  
А на МФС-е "пойдёт"?
Комментариев: 338
Публикаций: 169
ICQ: 650073308
- 291 +
  Автор: Alex   |   Группа: Пользователи   |   Дата: 04 августа 2011  
про мфс забудь уже.переделывать тебе под мфс его будут ток барыги.я более не занимаюсь постольку,поскольку всем побоку)
Комментариев: 29
Публикаций: 0
ICQ: --
- 50 +
  Автор: trdnepr   |   Группа: Пользователи   |   Дата: 10 августа 2011  
окно запускается с потом
POST method required
Комментариев: 7
Публикаций: 1
ICQ: 604533344
- 2 +
  Автор: grower   |   Группа: Пользователи   |   Дата: 03 октября 2011  
У меня МФС. Я не знаю, но при вставке кодов, как оиписано тут, видает ошибку
Комментариев: 78
Публикаций: 8
ICQ: 448957227
- 169 +
  Автор: LOZNEVOI   |   Группа: V.I.P.   |   Дата: 28 ноября 2011  
я делал намного проще!
Комментариев: 33
Публикаций: 0
ICQ: 403964898
- 12 +
  Автор: daranger   |   Группа: Пользователи   |   Дата: 14 января 2012  
тоже ошибка
Комментариев: 1
Публикаций: 0
ICQ: --
- 0 +
  Автор: sarancew   |   Группа: Пользователи   |   Дата: 25 апреля 2013  
ошибки в коде
Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.