Авторизация через WMLogin перед регистрацией

Где-то на шопе в своё время валялась статья, её я не нашёл. Зато понял, что раз статьи такой нету — то люди начинают на ней делать деньги. Сегодня опишу, как заставлять пользователя авторизовываться при помощи WMID\’а перед регистрацией. Подробнее читаем в полной новости…Итак… За исходник я взял файл 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.

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

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

Автор публикации

не в сети 14 лет

Alex

Комментарии: 0Публикации: 166Регистрация: 19-02-2011

Понравилась статья? Поделись в соц. сетях:

Похожие новости

Отправить комментарий

wpDiscuz
Авторизация
*
*
Регистрация
*
*
*
Генерация пароля