|
|
|||||||
|
о WebMoney / Материалы / XML-интрфейсы обменной биржи
XML-интрфейсы обменной биржи© Никита Сенченко, 17.11.2013
У биржи wm.exchanger.ru есть XML-интерфейсы, с помощью которых работу с Биржей можно автоматизировать, поручить роботам. Какую выгоду это дает? Роботы круглосуточно могут отслеживать обменные курсы, "ловить" наиболее выгодные заявки и совершать обмен по ним. Как известно, на Бирже WM Exchanger можно совершить обмен одного типа WM-денег на другой. Также известно, что менять здесь выгодно, поскольку обменные курсы формируются самими пользователями исходя из рыночной ситуации. У Биржи есть XML-интерфейсы, с помощью которых работу с Биржей можно автоматизировать, поручить роботам. Какую выгоду это дает? Роботы круглосуточно могут отслеживать обменные курсы, "ловить" наиболее выгодные заявки и совершать обмен по ним. WM Exchanger - это внутренний Форекс в WebMoney, и интерфейсы помогут зарабатывать на курсовых колебаниях и спекулировать на этом (я вам этого не говорил ;) Здесь мы рассмотрим эти интерфейсы и реализуем некоторые их них на PHP. Еще раз вспомним, как работает Биржа. Один пользователь ставит заявку на обмен, допустим, своих WMZ на WMR. А другой пользователь, которому нужно отдать WMR и получить WMZ, если его устраивают условия данной заявки - удовлетворяет её. Так происходит обмен. При этом Биржа гарантирует сделку, поскольку забирает с кошельков у обоих пользователей нужные суммы и передает их контрагентам по сделке. Из заявок, поданных пользователями, формируется листинг - список заявок на обмен в одинаковом направлении, где первой идет наиболее выгодная заявка, а последней - наименее выгодная. Скажем, вот так выглядит листинг заявок, по которым юзеры готовы отдать свои WME и получить WMZ. У каждой заявки есть 2 параметра: "Сумма, которую хочу отдать", "Сумма, которую хочу получить". Если поделить первое на второе - получится т.н. прямой курс обмена, а если поделить второе на первое - получится т.н. обратный курс обмена. Других существенных параметров у заявки нет, разве что её уникальный номер на Бирже. Как работают XML-интерфейсы БиржиВсе XML-интерфейсы описаны здесь. На данный момент их 10.Прежде, чем начать, есть одно замечание. Когда юзер удовлетворяет (принимает) чью-то существующую заявку, делая это через сайт Биржи, для него всё выглядит просто: выбрал направление, выбрал в нем заявку, отдал WM с кошелька, получил другие WM на кошелек. Если же мы делаем то же самое с помощью XML-интерфейсов, то процесс будет выглядеть по-другому: А) Найти подходящую заявку. Запомнить ее номер, "Сумму, которую хочу отдать", "Сумму, которую хочу получить" - см. интерфейс номер 2. В) Поставить свою заявку в противоположном направлении, зеркальную к заявке, которую только что нашли в п.А - см. интерфейс номер 8. С) "Купить" найденную в п.А заявку из денег своей заявки - см. интерфейс номер 9. Согласен, не очень очевидная модель (почему бы сразу не купить искомую заявку, не выставляя свою?), но так уж устроена Биржа. Собственно говоря, в статье мы и рассмотрим эти 3 основных интерфейса. Остальные интерфейсы менее важны и для большинства задач могут не понадобиться, поэтому вы разберетесь с ними сами. Допустим, нам нужно поменять наш 1 000 000 WMR на WMZ по наиболее выгодным на данный момент курсам. Понятное дело, встречной заявки ровно на такую огромную сумму на Биржи нет. Вариант 1 Находим заявку, по которой кто-то отдает 300 WMR и хочет получить 10 WMZ - используем для поиска ИНТЕРФЕЙС НОМЕР 2. Нас эти условия устраивают, и мы решаемся на обмен. Для этого выставляем свою заявку, по которой отдаем 10 WMZ и хотим получить 300 WMR - используем ИНТЕРФЕЙС НОМЕР 8. Затем покупаем ту заявку из своей - используем ИНТЕРФЕЙС НОМЕР 9. Так поступаем до тех пор, пока не потратим наш 1 000 000 WMR, всякий раз подавая свою заявку и "покупая" за нее чью-то чужую. Вариант 2 Ставим заявку, по которой отдаем 1 000 000 WMR и хотим получить WMZ - используем ИНТЕРФЕЙС НОМЕР 8. Теперь просматриваем встречный листинг (тех, кто отдает WMZ и хочет WMR) начиная от самой выгодной заявки - используем ИНТЕРФЕЙС НОМЕР 2. Покупаем каждую встречную заявку из денег собственной заявки до тех пор, пока не потратим весь 1 000 000 WMR - используем ИНТЕРФЕЙС НОМЕР 9. В первом случае мы ставили и удовлетворяли каждую встречную заявку отдельно, а во втором случае сначала поставили свою одну большую заявку и скупили по ней столько встречных заявок, сколько это было возможно. Механика в обоих случаях одинакова. XML-интерфейсы тоже используются одни и те же. В чем же разница? Только в наших потерях на комиссии 0.8%! Когда мы ставим заявку, мы отдаем WM с кошелька, при этом теряем 0.8%. За счет того, что минимальная комиссия в WebMoney = 0.01 WM , то на мелких суммах можно потерять больше, чем 0.8%. Наоборот, максимальная комиссия при переводе, допустим, WMR = 1500 WMR. Таким образом, переводя на Биржу сразу 1 000 000 WMR, мы теряем намного меньше, чем 0.8% Итак, намного выгоднее поставить одну большую заявку на всю сумму и скупать из нее встречные заявки одну за другой. Интерфейс 2. Получение списка заявокЭтот интерфейс простой, не требует наложения цифровой подписи. Просто читаете поток из определенного адреса и получаете XML, в котором содержится перечень текущих заявок, выставленных по заданному направлению, ровно такой же перечень, который вы можете видеть на сайте Биржи.Какой именно адрес должен запрашивать этот интерфейс? URL такой: https://wm.exchanger.ru/asp/XMLWMList.asp?exchtype=X В параметре exchtype вместо Х нужно передавать цифру, которая обозначает направление обмена. Вот их список этих цифр: Допустим, вы хотите получить список заявок, по которым вы сможете купить WMR в обмен на свои WMG - тогда вы запрашиваете https://wm.exchanger.ru/asp/XMLWMList.asp?exchtype=9 Что в ответе? XML со списком заявок, в каждой из которых есть такие атрибуты: Есть и другие параметры, но они маловажные. В частности, там есть и курс обмена, полученный путем деления amountin на amountout, но точность у него низкая - до 4 знака после запятой. Этого часто бывает недостаточно, поэтому этот курс мы легко вычислим сами (см. чуть ниже функцию GetOrders()). Кстати, заявки в ответе уже отсортированы от более выгодных к менее выгодным, так же, как они отображаются и на сайте Биржи. Как будем получать XML ответ? С помощью модуля curl. Напишем для этого короткую функцию: function GetAnswer($url, $method, $content) { Эта функция универсальная, с ее помощью можно запрашивать удаленный адрес ($url) как методом GET, так и методом POST с передачей необходимого содержимого. На выходе функции содержится XML, который мы получили в ответе от Биржи. Как будем обрабатывать этот XML? С помощью модуля SimpleXML и его возможностей. Напишем полностью функцию, реализующую интерфейс 2: function GetOrders($direction) { Итак, на вход функции надо подать $direction с цифрой, которая обозначает запрашиваемое направление обмена (см. большой список выше), а на выходе имеем массив $Arr, в который уложены все полученные заявки. Мы самостоятельно посчитали прямой и обратный курс ($DirectRate и $ReverseRate) с точностью до 8 знаков после запятой и тоже уложили их в $Arr. Содержимое $Arr можно посмотреть так: print_r($Arr). Теперь с этим массивом можно работать так, как это требуется для вашей задачи. Интерфейс 8. Выставление своей заявкиЕсли вы никогда раньше не работали с интерфейсами WebMoney, то тут вам придется остановится и прочитать вот эту статью. Данный интерфейс требует подписания запроса ключом от вашего WMID, поэтому нужно:Пользователи Keeper Light должны использовать браузерный сертификат. Те, кто используют только Keeper Mini, не смогут воспользоваться эти интерфейсом - нужно зарегистрироваться в Classic или Light и получить файл kwm, либо браузерный сертификат. А еще после этого нужно выдать доверенность для WMID 128984249415 на выполнение переводов от вашего кошелька. С этого кошелька Биржа будет списывать вебмани в момент выставления вами заявки с помощью данного интерфейса. Например, если вы планируете выставить заявку, по которой отдаете WMZ и хотите получить WMR, тогда выдайте доверенность от вашего Z-кошелька. Сделать это нужно 1 раз. Теперь еще нам понадобится функция, которая будет генерировать цифровую подпись с помощью wmsigner и вашего kwm. Вот она: function _GetSign($inStr) { В переменной $Path_Folder запишите полный путь на сервере до директории, где лежит ваш kwm-файл и файл WMID.ini (их желательно поместить в одну директорию, причем для безопасности эта директория должна быть выше директории с веб-документами). В переменной $Path_Signer запишите полный путь на сервере до файла wmsigner в той директории, куда он был скомпилирован. В переменной $MyWMID - запишите ваш WMID. Теперь, собственно, напишем функцию, которая отправит запрос на Биржу о постановке новой обменной заявки. Такой запрос нужно отправлять на адрес https://wm.exchanger.ru/asp/XMLTrustPay.asp function SetOrder($frompurse, $topurse, $fromamount, $toamount) { На входе функции следующие параметры: Внутри функции в $MyWMID - запишите ваш WMID. Внутри этой функции содержится вызов уже написанной ранее функции GetAnswer(). В данном случае мы передаем наш XML-запрос (он содержится в $xml) на адрес https://wm.exchanger.ru/asp/XMLTrustPay.asp методом POST. Что на выходе этой функции? Массив $result с параметрами ответа, полученными от Биржи. Если наша заявка была выставлена успешно, то в $result['retval'] будет "0", а в $result['operid'] будет уникальный номер нашей заявки на Бирже. $result['retdesc'] содержит текстовое описание ошибки, если заявка НЕ выставлена. Интерфейс 9. Покупка чужой заявки из своей заявкиЭтот интерфейс также требует цифровой подписи, поэтому см. что для этого нужно в описании интерфейса 8.Вот функция BuyOrder(), которая реализует данный интерфейс (отправляем XML-запрос на адрес https://wm.exchanger.ru/asp/XMLQrFromTrIns.asp методом POST). function BuyOrder($myid, $id, $orderdateStamp) { На входе функции следующие параметры: $OrderDate = полученная из функции GetOrders() дата нужной нам заявки; Внутри функции в $MyWMID - запишите ваш WMID. На выходе этой функции GetOrders() массив $result с параметрами ответа, полученными от Биржи: На этом всё. Вы можете собрать все функции, приведенные в данной статье, в один файл и использовать его для работы с интерфейсами Биржи. Не забудьте только разобраться с wmsigner, выложить на сервере файлы kwm и WMID.ini, а также прописать в приведенных выше функциях параметры $MyWMID, $Path_Folder и $Path_Signer. группа: Материалы
категории:
Программинг |
другие материалы в этих категориях:
Новая библиотека для платформы .Net Влияет ли ENUM на работу интерфейса Х2? Программируем авторизацию через ENUM Как сделать авторизацию на сайте при помощи WebMoney Keeper? Как просмотреть историю операций кошелька, добавленного в доверенные? прочтений: 11637
Это все фигня полная! Обмен в одну сторону 0.8% и в другую 0.8% теряем = 1.6% потерей. Да и дельта минимальная в 10-20 коп скачет постоянно. Можно и в минус уйти. А что касается 1 млн, то такие деньги можно куда выгоднее использовать в реальном деле.
При 1 млн рублей комиссия будет составлять 1500 руб, что равно 0.15%, а это уже намного меньше чем 0.8%.
Считать разучились ребята.
1 млн/30 у.е*10коп/100-3000р=333р прибыли, которую скрадут скачки курса в течении дня. Тоже самое с любой суммой. Ликвидность тоже имеет предел. Если бы можно было на этом заработать что-то стоящее, вебмани бы сами это сделали.
Посиотрим
Почему везде всё на PHP ? Что на нём свет клином сошёлся?
Напишите, пожалуйста, как реализовать это на Delphi |
|
Все права на материалы, опубликованные на owebmoney.ru, охраняются в соответствии с законом об авторском праве. Разрешено копирование без согласования при условии указания гиперссылки на сайт (без атрибута nofollow и сокрытий) непосредственно до\после материала.
|
|