Где-то на шопе в своё время валялась статья, её я не нашёл. Зато понял, что раз статьи такой нету — то люди начинают на ней делать деньги. Сегодня опишу, как заставлять пользователя авторизовываться при помощи WMID\’а перед регистрацией. Подробнее читаем в полной новости…Итак… За исходник я взял файл register.php из этого скрипта.
Поехали… Качаем новый сертификат WebMoney отсюда. Его льём в корень сайта.
Следующим шагом открываем наш register.php и находим:
{
echo "<b><img src="images/error.png" align="middle"> Вы уже зарегистрированы…</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 запроса не нужно. Меняем код выше на:
Спускаемся ниже… В принципе шаг можно опустить, однако можно и сделать. Если мы хотим,чтобы после регистрации сессия обнулялась — после запроса примерно такого вида:
mysql_query($query) or die(mysql_error());
Добавим:
Однако, это тоже не всё. Спустимся ещё ниже в чистый HTML и найдём строки примерно такого вида:
В принципе, можно вообще эту строку удалить и вместо неё вставить:
Тогда будет выводить просто WMID. А можно видоизменить строчку на:
В этом случае мы получим просто заблокированное для редактирования поле с уже вставленным WMID.
Код у вас может отличаться. Я всего лишь привёл пример…
В принципе, всё. Жду комментариев.
Отправить комментарий
Вы должны быть зарегистрированы чтобы оставить комментарий.
Вы должны быть зарегистрированы чтобы оставить комментарий.