Здравствуйте. Возникла небольшая проблемка, Wm просят прислать им пример XML запроса, которым производится выплаты и соответственно ответ. Помогите пожалуйста (Подключение Х2 интерфейса дял Автовыплат БЕЗ участия админа, т.е. обычные автовыплаты не через кнопку из админки а сразу по запросу) Благодарю
Подключение Интерфейсов
Сообщений 1 страница 10 из 68
Поделиться22010-04-03 08:34:17
Проверка работоспособности WMSigner
Модуль WMSigner используется при подписи запроса ключом WM Keeper Classic. Ознакомьтесь с подробной информации о модуле WMSigner, получении ключей и настройке. Ниже описывается, как можно проверить его работоспособность из PHP. Вызов модуля происходит из функции wm_GetSign(), на вход она получает строку для подписи, возвращает строку из 132-х символов, либо текст ошибки, либо пустую строку в случае когда невозможно вызвать модуль WMSigner.
<? echo wm_GetSign('123'); ?>
Формирование XML-запроса
Формировать XML-запрос можно любым способом, главное чтобы результат соответствовал синтаксису XML и формату запроса. Воспользуемся функциями DOM XML.
<? $reqID = wm_ReqID(); $doc = domxml_new_doc('1.0'); $root = $doc->create_element('w3s.request'); $root = $doc->append_child($root); $tmp = $doc->create_element('reqn'); $tmp->set_content($reqID); $root->append_child($tmp); $tmp = $doc->create_element('wmid'); $tmp->set_content($wmWMID); $root->append_child($tmp); $getpurses = $doc->create_element('getpurses'); $root->append_child($getpurses); $tmp = $doc->create_element('wmid'); $tmp->set_content($wmWMID); $getpurses->append_child($tmp); $request = $doc->dump_mem(TRUE); ?>
Функция wm_ReqID() генерирует уникальный идентификатор запроса, основываясь на функциях времени.
Выполнение запросов к сертификационному центру
Запросы к разным интерфейсам похожи друг на друга и отличаются лишь URL-ом, форматом XML-запроса и возвращаемым результатом. Приведем код функции осуществляющей вызов CURL:
<? function wm_xmlHttpsReq($addr, $xml){ # Использовать переменные из конфигурационного файла config.php global $wmURL, $wmCAcert, $wmType, $wmKey, $wmCert, $wmPass; # Инициализируем CURL нужным URL $ch = curl_init($wmURL.$addr); # В выводе CURL http-заголовки не нужны curl_setopt($ch, CURLOPT_HEADER, 0); # Возвращать результат, а не выводить его в stdout curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); # Метод http-запроса POST curl_setopt($ch, CURLOPT_POST,1); # Данные запроса curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); # Укажем путь к корневому сертификату WebMoney CA: curl_setopt($ch, CURLOPT_CAINFO, $wmCAcert); # Внимание! Не используйте curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE)! # Это дает возможность осуществить атаку с подменой DNS. # Выполнить запрос $result=curl_exec($ch); # Обработаем возможные ошибки if( curl_errno($ch) != 0 ) { die('CURL_error: ' . curl_errno($ch) . ', ' . curl_error($ch)); }; # Закроем обработчик curl_close($ch); return $result; } ?>
Разбор полученного ответа
Ниже приведена структура ответа сервера:
<w3s.response> <reqn></reqn> - номер запроса, на который высылается ответ <retval></retval> - код ошибки выполнения запроса: 0 - выполнен успешно <retdesc></retdesc> - описание ошибки если retval != 0 <тип_ответа> ... - параметры ответа </тип_ответа> </w3s.response>
Осуществлять разбор XML-ответа можно любым удобным методом (SAX, DOM, Regexp и т.д.) В данном случае был использован способ через функцию PHP xml_parse_into_struct():
<? $xml_parser = xml_parser_create('UTF-8'); # Парсим XML в переменные $vals, $index xml_parse_into_struct($xml_parser, $result, $vals, $index); xml_parser_free($xml_parser);
# Проверим ответ на корректность
$check = wm_CheckResp($vals,$index); if( $check != 0) die($check);
# Поместим список кошельков, их описаний, и сумм на них в переменную $purses
$purses = array(); $pursename = ''; $amount = ''; $desc = ''; for($n = 0; $n < count($vals); ++$n){ $e = $vals[$n]; switch ($e['tag']){ case 'PURSE': switch ($e['type']){ case 'open': $pursename = ''; $amount = ''; $desc = ''; break; case 'close': $purses[$pursename] = array('amount' => $amount, 'desc' => $desc); break; } break; case 'PURSENAME': $pursename = $e['value']; break; case 'AMOUNT': $amount = $e['value']; break; case 'DESC': $desc = $e['value']; break; } } ?>
Более подробная информация по интерфейсу х2 здесь.
Поделиться32010-04-03 08:51:19
Благодарю!
Поделиться42010-04-03 15:00:52
И это всё им надо??
Поделиться52010-04-03 15:08:06
И это всё им надо??
Если просят, значит надо.
Щас все кто подают заявку на подключение х2 проходят проверку, и на знание PHP тоже.
Поделиться62010-04-03 15:59:13
Да. С этим вообще жесть, куча вопросов сыпится. Жаль, что отвечают они раз в сутки... Так же нужно писать Бизнес-план им расписывать, по мимо всего прочего..
Поделиться72010-04-03 17:54:58
У меня вот попросили пример запроса в XML формате, которым бы вы выполнили перевод с одного кошелька на другой. Мне нужно всё, написанное выше, прислать им?
У меня раньше автовыплаты работали без проблем, 1 раз перезжал на новый хост за 2 дня обновили ip, а тут на свой сервер переехал и выдали своё((, хорошо что Ваш проект прошел проверку.
Но с запросами я думаю, явно перегнули
Отредактировано web669 (2010-04-03 18:01:50)
Поделиться82010-04-03 18:55:16
Мне нужно всё, написанное выше, прислать им?
Все написанное выше - это пример запросов, подстраивать нужно именно к своему сайту и IP.
Поделиться92010-04-04 15:44:10
Супер.. Это не те запросы, мне отказали.. Вообще весело теперь ждать месяц
Поделиться102010-04-05 00:41:39
Народ, помогите пожалуйста. Кто знает что конкретно ответить им