Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #81, СЕНТЯБРЬ 2005 г.

Механика wm-процессинга

nikitozz

Хакер, номер #081, стр. 081-128-5


<datefinish>$datefinish</datefinish>#обязательно: окончание временного промежутка создания счета

</getoutinvoices>

</w3s.request>

Цифровая подпись для этого запроса изготавливается из строки $storepurce.$reqn, но есть из склеенного номера кошелька и номера запроса. После того, как мы составили данные POST-запроса, необходимо создать сам заголовок, который будет отправлен web-серверу. Это обыкновенная строка, которая начинается так:

$header = "POST ".$page." HTTP/1.0 \r\n";

$header .= "MIME-Version: 1.0 \r\n";

Она представляет собой набор заполненных, согласно RFC, стандартных полей. Я не буду об этом подробно рассказывать – на нашем диске в моем примере ты увидишь, как это делается. Или можешь легко найти в инете любой пример. После того, как заголовок создан, необходимо при помощи функций cURL отправить его серверу:

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header);

$data = curl_exec($ch);

После этого в $data будет помещен результат выполнения запроса – документ следующего вида:

[формат ответа сервера]

<w3s.response>

<reqn></reqn>

<retval></retval>

<retdesc></retdesc>

<outinvoices cnt="n" >

<outinvoice id="n1" ts="n2">

#здесь куча полей с инфой о счетах. Нас интересует только state – состояние счета

</outinvoice>

<outinvoice>...</outinvoice>

</outinvoices>

</w3s.response>

Соответственно, для обработки этого XML-документа нужно использовать встроенный в PHP парсер:

$parser=xml_parser_create();

xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);

xml_set_element_handler($parser, "startElement", "endElement");

xml_set_character_data_handler($parser, "characterData");

xml_parse($parser,$data);

Как видно из этого кода, я объявил следующие функции для обработки открывающего и закрывающего тегов элементов: startElement и endElement. Анализ символьных данных будет реализовываться при помощи функции characterData. Чтобы не быть голословным и чтобы тебе все было предельно понятно, приведу здесь код этих функций:

[функции-обработчики XML’ного ответа сервера]

#во всех процедурах $fo,$currentTag и $res — глобальные

function startElement($parser, $name, $att)

{

$currentTag=$name;

if($name=="outinvoice" && $att["id"]==$_POST[wm_invc_n]) $fo=1;

}

function endElement($parser, $name) {

if($name==="outinvoice" && $fo===1) $fo=0;

}

function characterData($parser,$data) {

if($fo===1) {

if($currentTag=="amount") $res=$data;

}}

После парсинга данных в глобальной переменной $res окажется код результата запроса:

* 0 – счет не оплачен

* 1 – счет оплачен по протекции

* 2 – счет оплачен окончательно

* 3 – в оплате счета отказано

[чему мы научились]

Мы с тобой научились, в общем-то, всей несложной науке проведения автоматических транзакций в системе WM. По идее теперь для тебя не должно быть проблемой написать скрипт, который будет, скажем, отправлять сообщение по внутренней почте, или осуществлять прямой перевод денег. Все это реализуется абсолютно аналогично разобранным мной примерам – ты умеешь использовать как https, так и xml-интерфейсы системы и реализовать любую задачу для тебя будет несложно, пусть и подглядывая в эту статью. Если у тебя остались какие-то вопросы, советую обратиться к документации на нашем диске, или напрямую на сайт WM: www.webmoney.ru/pfdevelopers.shtml. Удачи. Если у тебя есть вопросы, которые ты никак не можешь решить, то, так уж и быть – пиши мне на nikitoz@real.xakep.ru. Только не забудь перед этим положить на Z557712535333 долларов 50, ok? :)

Назад на стр. 081-128-4  Содержание  Вперед на стр. 081-128-6