Парсим инфу о WMID

В этой статье распишу этот парсер в двух вариантах его исполнения. Думаю, статья будет актуальна, т.к. старые парсеры перестали работать…В этой статье распишу этот парсер в двух вариантах его исполнения. Думаю, статья будет актуальна, т.к. старые парсеры перестали работать из-за изменений в коде страниц на passport.webmoney.ru

Итак, рассмотрим вариант функции, парсящий с исходника сервера webmoney:

<?PHP
# Вункция парсер #
function return_wmid($wm)
{
        $purse = file_get_contents("http://passport.webmoney.ru/asp/certview.asp?purse=".$wm);
        $parser = explode("WMID#",$purse);
        $parser = substr($parser[1],0,12);
        
        if(ereg("^[0-9]{12}$", $parser))
        {
        RETURN $parser;
        }else{
        RETURN FALSE;
        }

}
# ! Функция парсер #
?>


Он устарел. Даже вернее не он устарел, а изменился исходный код сервера. Изменился незначительно, просто исчез символ #. Вот вариант в принципе исправленной функции:

<?PHP
# Вункция парсер #
function return_wmid($wm)
{
        $purse = file_get_contents("http://passport.webmoney.ru/asp/certview.asp?purse=".$wm);
        $parser = explode("WMID",$purse);
        $parser = substr($parser[1],0,12);
        
        if(ereg("^[0-9]{12}$", $parser))
        {
        RETURN $parser;
        }else{
        RETURN FALSE;
        }

}
# ! Функция парсер #
?>


Сохраните в файл returnwmid.php и влейте на хост

Теперь, как её использовать:
1. В register.php ищем в коде $pemail=$_POST[\»pemail\»];
2. Рядом с кодом ищем $wmid=$_POST[\»wmid\»];
3. Меняем на:

require('returnwmid.php');
$wmid=return_wmid($pemail);


функция вернёт нам WMID. Значит следом в HTML коде можно просто убрать код поля для ввода WMID

Функция старая, взял копипастом с МФС\’а да и влом было накидывать парсер снова. Работать будет до тех пор, пока WM не поменяют исходник снова. Но это не дело — получать WMID по номеру кошелька с такими трудами вообще глупо, в частности, когда мы тупо парсим с HTML кода, имейте в виду — WM когда-нить психанут и запретят функцией парсить у них код.

А сейчас разберём более совершенный вариант. Даже наверное более быстрый. Использовать file_get_contents не будем. На денвере вариант не прокатит (прокатит на свежих версиях денвера, где есть CURL)

Итак, мы имеем URL: https://passport.webmoney.ru/xml/XMLGetWMIDInfo.aspx
Ну на неё нам надо отправить POST запрос с номером кошелька. Запрос будет передавать наши параметры. Имеет вид он:

<request><purse>номер кошелька</purse></request>


Отправить POST запрос нам поможет в данном случае CURL.

Распишем функцию (комментарии имеются)

function return_wmid($purse) {
$request="<request><purse>$purse</purse></request>"; //запрос
$url="https://passport.webmoney.ru/xml/XMLGetWMIDInfo.aspx"; //URL куда мы его посылаем
$ch = curl_init($url); //CURL запустись.Ниже мы его настроим…
curl_setopt($ch, CURLOPT_HEADER, 0); //заголовки не отправляем
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //вернём ответ
curl_setopt($ch, CURLOPT_POST,1); //запрос у нас POST а не GET
curl_setopt($ch, CURLOPT_POSTFIELDS, $request); //запрос то POST — но тут мы зададим что мы что либо передаём
$result=curl_exec($ch); //результат курлятской работы
$xmlres = simplexml_load_string($result); //симпл принимай эстафету
$wmid=$xmlres->certinfo->wmids->row[wmid];
return $wmid;
}


Что мы использовали:
1. simpleXML (в php 5 он выродился и о чудо — мы его использовали, правда всего лишь один раз, разобрав полученные XML теги в массив)
2. CURL — отправка запроса (ну на хостах без php 5 и курла вообще не вариант жить, поэтому у всех это есть.
3. Голову — если голова не варит — пьём ягуар. Если же не помогло — опустошаем вторую банку. Если вообще не помогает — кидаем пять банок мне (можно 3, смотря в каком состоянии я) и голова заработает у меня и работать будет на Вас.

Да и кстати, в скрипте использовать так же, как и использовали функцию с парсером из кода.

Всё… Чуток попозже распишу побольше функций, а сейчас напоследок можем внести изменения в функцию с курлом, это на сладкое, кто захочет…

Порядок изменения:
1. Переименуем функцию в её коде (для тех кто в танке) можно просто заменить return_wmid на return_bl или return_goods или же return_bads.
2. Переименовали функцию — ищем строку:

$wmid=$xmlres->certinfo->wmids->row[wmid];


Возник вопрос — нахера нам это? В это нам не нужно. Хотя если кто-то захочет замудрить что-либо — тогда пожалуйста. К примеру, запрет реги пользователям с претензией.Так вот для этого и распишу, что мы можем выудить из всех плясок с шаманским бубном.

Итак, строку выше мы можем поменять на:

$wmid=$xmlres->certinfo->wmids->row[level];


тогда обозванная новым именем(!) функция будет возвращать нам не WMID по кошельку, а BL.

Для записей в арбитраже уже повеселее.

Для положительных (зелёненьких):

$wmid=$xmlres->certinfo->claims->row[posclaimscount];


Ну и для отрицательных та же самая строка, только posclaimscount меняем на negclaimscount, соответственно, для вывода даты последней записи в арбитраже можем posclaimscount поменять на claimslastdate.

Ну для аттестата тоже не скучно. Строку, над которой в функции экспериментируем меняем на:

$wmid=$xmlres->certinfo->attestat->row[typename];


Так мы получим название аттестата, но увы, оно без заглавных букв. Тут уже ковыряйтесь сами.

Хотим тип аттестата? Да не проблема:

$wmid=$xmlres->certinfo->attestat->row[tid];


А далее полученный после функции результат просто через switch прогоните. Это пригодится:

<tid id="100">псевдонима</tid>
<tid id="110">формальный</tid>
<tid id="120">начальный</tid>
<tid id="130">персональный</tid>
<tid id="135">продавца</tid>
<tid id="136">capitaller</tid>
<tid id="140">разработчика</tid>
<tid id="150">регистратора</tid>
<tid id="170">гаранта</tid>
<tid id="190">сервиса wmt</tid>
<tid id="200">сервиса wmt</tid>
<tid id="300">оператора</tid>


Ну а для инфы о ФИО уже посложнее будет, т.к. если у WMID не показывается в passport.webmoney.ru, значит пользователь запретил показывать свои ФИО, следовательно XML вернёт нам пустоту.

Картинки аттестатов можно также спарсить, хотя хз зачем они нужны. Поэтому расписывать не буду, догадаться можно. Подсказка: либо парсим картинки с XML запроса, либо по tid аттестата тупо выводим через тот же свитч.

И на сладенькое — https://passport.webmoney.ru/asp/certcard.asp?id=WMID,вместо WMID вписать свой.

Можно запарсить и сделать в виде визитной карточки без надписи \»информация о WMID\», ну это уже чтобы не мучаться с XML парсерами.

В общем то всё, надеюсь, статья оказалась информативной… Ещё одну интересную и более познавательную получите позже, когда я уже решу, что она того стоит…

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

не в сети 14 лет

Alex

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

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

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

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

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