© Никита Сенченко Мы о сервисе автоматического приема платежей WebMo
XML-интерфейсы WebMoney. Часть 1. WMSigner.

© Никита Сенченко Мы в рассуждении сервисе автоматического приема платежей WebMoney Merchant. Напомним, он позволяет организовать прием WM-платежей на сайте без участия человека. Однако, около интернет-бизнесменов часто возникает необходимость автоматизировать другие операции со своими WebMoney-кошельками. Например, автоматически отправлять покупателю сообщение по внутренней WM-почте, делать выплаты по партнерской программе или выплачивать выигрыши в течение онлайн-играх, запрашивать баланс своих кошельков, проверять правильность введенного пользователем WM-идентификатора равным образом т.д.

Любая автоматизация упрощает жизнь, позволяет не отвлекаться на рутину, избежать человеческих ошибок. Еще Генри Форд понял, что там, где людей можно заменить роботами, - это нужно делать обязательно.

WebMoney на этом смысле дает нам отличнейшие да не имеющие аналогов инструменты. Почти все процессы, происходящие на вашем web-сервисе равным образом связанные от WebMoney, можно авторматизировать, сделать моментальными, заставить их работать круглые сутки равным образом без какого-либо вашего вмешательства. Для этого нужно всего лишь "научить" ваш сайт "общаться" почти сервером WebMoney да отдавать ему команды.

Этот язык общения равным образом команд описывается специальными правилами, которые называются

. Данным материалом мы открываем цикл статей, в течение которых научим вас использовать XML-интерфейсы WebMoney во благо вашего интернет-бизнеса. Немного терпения, немного практики веб-программирования - да через некоторое время работать за вас будут уже роботы. А освободившееся время предлагаю уделить любви или спорту, либо тому равно другому сразу :-)

Что понадобится для работы?

Итак, первый вопрос на повестке дня - что нужно знать равным образом уметь, чтобы разобраться на XML-интерфейсах? Безусловно, нужно уметь программировать на одном из серверных языков (PHP, ASP, Perl да т.д.) Нно каком уровне? Пожалуй, на среднем или даже ниже среднего. Там, где ваших знаний будет не хватать - вам помогут примеры, которыми наш материал будет обильно сдобрен.

Гораздо важнее, чтобы вы понимали: как устроено дерево каталогов на сервере, что такое права доступа для файлам, что такое FTP равно shell, как передается информация между серверами в течение интернете, что такое методы POST также GET, наконец, что такое XML. Конечно, мы будем давать комментарии некоторым понятиям, но тем, кто всё это уже знает, - будет намного проще.

Все программные примеры мы будем приводить на языке PHP. Платформа - ОС FreeBSD. Сегодня это наиболее распространенная "связка". Информацию по работе из WMSigner на платформе .Net вы сможете найти на сайте

Важное замечание! Для работы XML-интерфейсов нужен персональный аттестат. Если около вас его еще нет -

. Для первой статьи (которую вы сейчас читаете) аттестат не понадобится, же вот для следующих уже будет нужен.

Еще одно замечание перед тем, как мы начнем. При работе из XML-интерфейсами могут использоваться ключи Keeper Classic или сертификаты Keeper Light - на ваш выбор. Результат один да тот же, но вот конкретная реализация немного отличается. Мы будем демонстрировать реализацию XML-интерфейсов на примерах начиная с ключами Keeper Classic. Тот, кто пользуется Лайтом, как вариант, может зарегистрировать новый WMID на Keeper Classic также присоединить его для своему аттестату.

В этой статье нам предстоит познакомиться из модулем аутентификации WMSigner . Он понадобится для работы XML-интерфейсов.

Отыщите ваш файл ключей .kwm. Как вы знаете, он был создан при регистрации Keeper Classic. Отыскали? Теперь вспомните код доступа для файлу ключей. И то, также другое нам понадобится. Те, кто не смог найти файл или вспомнить код доступа - войдите на Кипер да нажмите

Инструменты - Параметры программы - Безопасность - Сохранить ключи на файл , сохраните файл ключей, назначьте пароль доступа. И больше их не теряйте.

Файл .kwm имеет размер 164 байта. В нем содержится закрытый ключ пользователя WebMoney. Информация шифруется закрытым ключем, передается на таком виде на сервер WebMoney, где расшифровывается открытым ключем. Так WebMoney проверяет авторство информации также убеждается в течение том, что она передана верно, без искажений. Это принцип

ассиметричного шифрования .

При работе почти Keeper Classiс сообщения, посылаемые для WebMoney, шифрует сам Кипер. В случае почти XML-интерфейсами обмен информацией происходит по принципу "сервер-сервер", только не "Кипер-сервер", но в качестве шифровальщика выступает модуль WMSigner.

Скомпилируем WMSigner на сервере. Для этого скачаем последнюю версию WMSigner (на момент написания статьи это версия 2.0)

, например, в течение zip-архиве. Распакуем содержимое архива равным образом зальем его по FTP в течение любое место на сервере.

Приступим для компиляции. Для этого нам понадобится доступ для shell.

Примечание!

Для доступа для серверной консоли (shell) рекомендуем использовать программу . Доступ для shell должен быть предоставлен вашим хостинг-провайдером. Если провайдер не предоставил доступ, попросите его скомпилировать модуль WMSigner за вас.

Напомним основные shell-команды в течение FreeBSD, которые, возможно, понадобятся вам для работы:

cd ..

- просмотр пути для текущему каталогу.

Войдем на shell, начиная с помощью команды

доберемся до каталога, куда мы только что залили исходники WMSigner'только. Наберем на командной строке:

Через пару секунд компиляция завершена. В том же каталоге появился файл wmsigner. Все файлы равным образом подкаталоги от исходниками WMSigner'же теперь можно удалить, они своё отработали равным образом нам больше не понадобятся.

Прежде чем двигаться дальше, давайте разберемся со структурой каталогов на сервере. Пусть на нашем условном сервере файлы, доступные через web, лежат на каталоге /home/site.ru/data/htdocs/. Там же будут находиться да php-скрипты, работающие от XML-интерфейсами. Из соображений безопасности очень желательно разместить WMSigner таким образом, чтобы он не был недоступен из web'a. Поэтому создадим, например, каталог /home/site.ru/data/signer/. Сделать это можно через FTP или shell.

Если по какой-то причине около вас нет возможности создавать каталоги выше директории web-документов, то вы можете создать подкаталог /home/site.ru/data/htdocs/что-то/, где вместо "что-то" - директория почти очень сложным именем, чтобы его было тяжело определить методом подбора. Кроме того, обязательно поместите на эту директорию файл .htaccess, запрещающий web-доступ для содержимому директории. В противном случае, ваши секретные файлы, которые будут находиться на этом каталоге, могут быть скачаны злоумышленником прямо от вашего сайта. Приводим текст файла .htaccess для такого случая. Он состоит всего из 2-х строк:

Order Allow,Deny

Deny from All

Скопируем WMSigner на только что созданную директорию /home/site.ru/data/signer/

Поместим в течение тот же каталог файл ключей .kwm.

Создадим в течение той же директории /home/site.ru/data/signer/ файл

wmsigner.ini

ваш WMID

код доступа для ключам

путь для файлу .kwm

Пусть, наш WMID - 123456789012, код доступа - akwru3kdn, однако файл ключей называется 123456789012.kwm. Тогда содержимое wmsigner.ini должно быть таким:

123456789012

akwru3kdn

123456789012.kwm

123456789012

akwru3kdn

/home/site.ru/data/signer/123456789012.kwm

Итак, в течение каталоге /home/site.ru/data/signer/ находится 3 файла: модуль подписи wmsigner, файл ключей .kwm, файл wmsigner.ini. Если они попадут в течение руки злоумышленника, он сможет подключиться для вашим кошелькам. Поэтому эти файлы нужно тщательно беречь. И именно поэтому мы не стали помещать их на каталог почти web-документами, откуда они могли быть скачаны кем-угодно прямо от вашего сайта, же разместили их выше на древе каталогов сервера.

Примечание!

123456789012.kwm может находиться равным образом в другой директории, лежать отдельно от wmsigner.ini да wmsigner. Вам всего лишь нужно прописать правильный путь для нему на wmsigner.ini. Однако, где бы ни находился .kwm, вы должны помнить, что он содержит секретный ключ, равным образом применять для нему меры защиты, на том числе те, которые мы описали выше.

Wmsigner равным образом wmsigner.ini должны обязательно находиться на одном каталоге.

Наконец, установим правильные атрибуты на файлы wmsigner, wmsigner.ini равным образом 123456789012.kwm. Сделать это можно из FTP-менеджера (Total Commander, FAR равно др.), либо через shell. Для wmsigner нужно разрешить выполнение. Для wmsigner.ini равным образом 123456789012.kwm будет достаточным разрешение только на чтение да только владельцем. Для установки таких прав доступа через shell перейдите в течение каталог /home/site.ru/data/signer/ равным образом выполните там команды:

$ chmod 111 wmsigner

$ chmod 400 wmsigner.ini

$ chmod 400 123456789012.kwm

Перейдем для тестированию. Чтобы убедиться на работоспособности скомилированного только что модуля WMSigner, дадим ему на вход строку, которую он должен подписать. Ноднако выходе получим строку, сформированную на результате подписывания входной строки вашим закрытым ключем. Формат входной строки такой:

Примечание!

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

Продемонстрируем. В shell'e перейдем в течение каталог /home/site.ru/data/signer/ да выполним команду:

$ echo -ne "TestString123\004\r\n" | ./wmsigner

Если на ответ получена длинная цифр также букв - значит всё на порядке, wmsigner работает правильно. Если получена ошибка - значит что-то не так. Перечень возможных ошибок:

Error 20 - Невозможно загрузить конфигурационный файл wmsigner.ini. Возможно, он отсутствует на той же директории, что также wmsigner.

!LoadKeys Error 2 - Невозможно загрузить файл ключей. Возможно, он отсутстует по тому пути, который указан в течение wmsigner.ini, или имеет другое название.

Error -3 - Код доступа неверный. Возможно, Вы используете пароль на вход в течение Кипер, но не код доступа.

Error -4 - Не задан WMID.

Error -5 - Не задан код доступа.

Error -6 - Не задан файл ключей.

Что происходит при формировании строки подписи?

1) wmsigner ищет файл wmsigner.ini в течение том же каталоге, где лежит он сам;

2) wmsigner берет из wmsigner.ini WMID, код доступа также путь для файлу .kwm;

3) wmsigner обращается для файлу kwm, чтобы подписать строку.

Теперь то же самое сделаем из PHP. Создадим файл wmxml.inc.php, куда будем складывать все функции, необходимые нам для работы начиная с XML-интерфейсами WebMoney. Этот файл будем вызывать ("инклудить") из наших php-скриптов там, где это нужно. Первой функцией, которую мы создаем на wmxml.inc.php, будет функция _GetSign(). Она будет делать то же самое, что мы только что проделали через shell: получать на вход строку для подписи, вызывать WMSigner, получать результаты его работы да отдавать на выходе строку от результатом подписывания.

array("pipe", "r"),

1 => array("pipe", "w"),

2 => array("pipe", "r") );

$process = proc_open($Path_Signer, $descriptorspec, $pipes);

fwrite($pipes[0], "$inStr\004\r\n");

fclose($pipes[0]);

$s = fgets($pipes[1], 133);

fclose($pipes[1]);

$return_value = proc_close($process);

return $s;

}

?>

Создадим также скрипт test.php, подключающий wmxml.inc.php равным образом вызывающий функцию _GetSign():



Оба файла поместим в течение каталог web-документов /home/site.ru/data/htdocs/, запустим test.php. Если строка начиная с подписью отобразилась, значит всё работает нормально.

Теперь остановимся равно обратим внимание на два момента. Момент первый. Зачем эта строка на функции _GetSign():

Дело в течение том, что когда запускается скрипт test.php, то текущим рабочим каталогом является каталог, в течение котором находится сам скрипт, то есть /home/site.ru/data/htdocs/. Вызваный функцией _GetSign() WMSigner находит на своем каталоге wmsigner.ini, считывает из него путь для ключам 123456789012.kwm да пытается найти его начиная от текущего рабочего каталога, то есть по адресу /home/site.ru/data/htdocs/123456789012.kwm. Там он его, естественно, не обнаруживает.

Для того, чтобы WMSigner правильно нашел файл ключей, мы начиная с помощью php-функции

принудительно установливаем на качестве текущего каталога директорию, на которой находится 123456789012.kwm. Директорию эту мы заранее прописываем на переменную $Path_Folder.

Другой вариант решения вопроса: в течение wmsigner.ini сразу прописывать полный путь для файлу .kwm начиная от корня сервера (

).