|
|
|||||||
|
о WebMoney / Материалы / XML-интерфейсы. Часть 6. X21
XML-интерфейсы. Часть 6. X21© Никита Сенченко, 19.06.2012
X21 - это новый XML-интерфейс WebMoney. Предназначен он для получения доверенности от клиента или покупателя на списание денег с его кошелька. Доверенность подтверждается с помощью SMS или USSD. Предыдущие статьи о XML-интерфейсах WebMoney: Здесь лежит библиотека XOWM с PHP-функциями, которые реализуют работу с XML-интерфейсами WebMoney. ВведениеX21 - это новый XML-интерфейс WebMoney. Предназначен он для получения доверенности от клиента или покупателя на списание денег с его кошелька. Доверенность подтверждается с помощью SMS или USSD.Вообще говоря, доверенности - это мощнейший инструмент в системе WebMoney. Он позволяет одному юзеру дать другому юзеру право списывать средства с его кошелька без дополнительного разрешения. Обычно получатель доверенности - это торговец, а доверитель - это его клиент, который планирует регулярно оплачивать услуги торговца. После того, как доверенность выдана, торговец сможет самостоятельно списывать с кошелька доверителя нужные суммы в оплату за его услуги. Доверителю это позволит сэкономить время. Это очень удобно, такой инструмент хорошо подходит для тех бизнесов, где есть регулярные оплаты: хостинг, интернет-провайдеры и т.п. Через веб доверенность можно выдать здесь. Доверитель указывает свой кошелек, который он "отдает в жертву", WMID того, кому дается доверенность, а также лимиты. Лимиты бывают такие: суточный, дневной, недельный и месячный. Сумму, превышающую хотя бы один из лимитов, - торговец списать не сможет. С Вашего сайта отправить клиента на страницу, где тот сможет выдать Вам доверенность, можно по такой ссылке: https://security.webmoney.ru/asp/settrust.asp?masterwmid=ВАШ_WMID&trans=1&url=http://СТРАНИЦА/ВАШЕГО/САЙТА. При этом поле "Кому дается доверенность" будет уже заполнено ВАШИМ WMID, а после выдачи доверенности юзера автоматически отправят обратно на http://СТРАНИЦА/ВАШЕГО/САЙТА Однако, такой способ получения доверенности не очень удобен для мобильных приложений, игр, программ и других мест, где клиента отправлять в браузер невозможно или не желательно. Как раз для таких случаев и придумали Х21. В нем выдача доверенности подтверждается с помощью мобильника - по SMS или USSD. Списание с доверенного кошелька можно совершить ТОЛЬКО с помощью XML-интерфейса X2, сделать это с помощью Кипера или как-то еще - не получится. Поэтому X21 активирован только для тех, у кого подключен X2 (персональный аттестат обязателен). Как работает Х21В этом интерфейсе используется цифровая подпись, которая генерируется с помощью ключей (файл kwm) Вашего Keeper Classic и модуля WMSigner. Поэтому сначала Вам нужно разобраться с тем, как его установить на сервер и как использовать.X21 работает 2-фазно. Иными словами, он совмещает в себе 2 запроса, которые нужно отправлять последовательно, при этом второй без первого существовать не может. Отправляя 1-й запрос, Вы "просите" доверителя установить для Вас доверенность. WebMoney шлет на телефон доверителя SMS или USSD. Если было заказано подтверждение по SMS, то клиент должен передать Вам (в программе, приложении, на сайте) полученный SMS-код. Во 2-м запросе Вы проверяете, подтвердил ли доверитель выдачу доверенности (если было заказано подтверждение по USSD и проходило без Вашего участия), либо скармливаете интерфейсу SMS-код, полученный от доверителя (если было заказано подтверждение по SMS). Рассмотрим это детальнее. 1-й запросКак мы уже знаем, отправляя 1-й запрос интерфейсу X21, мы инициируем получение доверенности от своего клиента.Запрос отправляется на URL https://merchant.webmoney.ru/conf/xml/XMLTrustRequest.asp методом POST. Состав запроса:
Зачем нужен lmi_clientnumber? Задача состоит в том, чтобы определить WMID доверителя. Еще нужно определить его телефон, чтобы отправить туда SMS\USSD. Например, если в lmi_clientnumber передан email, то по нему WebMoney находит пользователя в своей базе (по аттестату) и таким образом определяет его WMID и телефон. Если передан телефон, то WebMoney находит соответствующий ему WMID и т.д. Остановимся ненадолго на лимитах. В lmi_day_limit, lmi_week_limit и lmi_month_limit нужно передавать цифры, дробная часть отделяется точкой. Например, если в lmi_day_limit передать 41.45, и при этом в lmi_payee_purse передан Z-кошелек, то это означает, что доверенность будет выдана с лимитом 41.45 WMZ в день. Сумму больше 41.45 в течение одного дня по доверенности списать не получится. Если в lmi_day_limit, lmi_week_limit или lmi_month_limit передается "0", то это означает, что соответствующий лимит установлен не будет. "0" во всех трех лимитах - не допускается. Также не допускается, чтобы lmi_week_limit был меньше lmi_day_limit, а lmi_month_limit был меньше lmi_week_limit, что вполне логично. И в любом случае лимиты не могут превышать ограничения, установленные для Keeper Mini с проверенным телефоном и формальным аттестатом. См. здесь пункт 3: Финансовые ограничения WebMoney Keeper Mini. Несколько примеров: При определении лимитов, которые нужно передавать в X21 в каждом конкретном случае, нужно руководствоваться здравым смыслом. Предположим, Вы - хостинг-провайдер, и Ваш клиент имеет тарифный план стоимостью 20 WMZ в месяц. В таком случае правильнее всего будет передать: lmi_day_limit=0, lmi_week_limit=0, lmi_month_limit=20. Это позволит Вам ежемесячно (раз в месяц, либо частями на протяжении месяца) списывать с клиента необходимую сумму. Начнем писать нашу PHP-функцию, которая будет реализовывать работу с Х21:
Цифровая подпись (поле sign) формируется с помощью WMSigner. В нашей библиотеке XOWM задачу получения цифровой подписи решает функция _GetSign(). Ответ сервера WebMoney: <?xml version="1.0"?> Внимание! purseid нужно обязательно сохранить (в сессии, в базе данных и т.п.), поскольку его значение используется во 2-м запросе. Если юзер заказал подтверждение по SMS (realsmstype = 1), то на этом этапе через интерфейс Вашей программы, сайта, приложения у него нужно запросить код, который он получил смской в телефон. 2-й запрос Зачем нужен 2-й запрос? 1) Если юзер подтверждает выдачу доверенности по SMS (realsmstype = 1) и ввел полученный SMS-код на Вашей стороне (на сайте, в программе и т.д.), то 2-м запросом вы передаете этот SMS-код на сервер WebMoney и тем самым WebMoney убеждается в "легальности" выдаваемой доверенности и в том, что Вы действительно ожидаете эту доверенность получить. 2) Если юзер подтверждал выдачу доверенности по USSD (realsmstype = 2), иными словами, если подтверждение происходило без Вашего участия, то 2-й запрос позволяет проверить, а было ли подтверждение. Более того, если не "дернуть" 2-й запрос в этом случае, то WebMoney и не "зафиксирует" выдачу доверенности. Таким образом, посылать 2-й запрос даже при USSD-подтверждении нужно обязательно! Вызов 2-го запроса разумно возложить на самого клиента, например, показать ему кнопку типа "Я подтверждаю выдачу доверенности". 2-й запрос отправляется на URL https://merchant.webmoney.ru/conf/xml/XMLTrustConfirm.asp методом POST. Состав запроса:
Наша функция дополнилась таким кодом:
Ответ сервера WebMoney: <?xml version="1.0"?> Еще пара замечаний по 2-му запросу. 1) retval=0 и id>0 однозначно свидетельствуют о том, что доверенность успешно выдана. 2) Поскольку в будущем нам понадобится списывать деньги с кошелька доверителя (с помощью X2), то нам обязательно нужно сохранить в БД номер этого кошелька, от которого выдана доверенность (slavepurse). Заодно можно сохранить и WMID (slavewmid). Функция _WMXML21()Функция _WMXML21() для работы с Х21 включена в библиотеку XOWM (требуются расширения PHP: simplexml, iconv, curl). Ничего сверхъестественного она не делает. В зависимости от принятого параметра $step (1 или 2) отправляет в WebMoney соответственно 1-й или 2-й запрос. Набор входных параметров у этой функции одинаковый для обеих step (запросов). Он огромен:
Однако, поскольку у 1-го и 2-го запроса есть как общие параметры, так и отличающиеся, то некоторые параметры будут отсутствовать в вызове функции при 1-м запросе ($step=1), а некоторые параметры будут отсутствовать в вызове функции при 2-м запросе ($step=2). Вот пример вызова функции для 1-го запроса. Пустуют $lmi_purseid и $lmi_clientnumber_code: $r=_WMXML21(1, "Z123456789012", 10, 19, 0, "client@email.ru", 2, 2, "", "", "ru-RU"); А вот пример вызова для 2-го запроса. Имеет смысл передавать только $step, $lmi_purseid, $lmi_clientnumber_code, $lang: $res=_WMXML21(2, "", "", "", "", "", "", "", 12345, 89898, "ru-RU"); Понятное дело, функция и возвращает в 1-м и 2-м запросе несколько разный набор параметров в массиве $result. группа: Материалы
другие материалы в этих категориях:
WebMoney запустила сервис для стримеров. Новая библиотека для платформы .Net Влияет ли ENUM на работу интерфейса Х2? Программируем авторизацию через ENUM Облагаются ли какими-то налогами суммы, поступающие на кошельки? прочтений: 9726
|
|
Все права на материалы, опубликованные на owebmoney.ru, охраняются в соответствии с законом об авторском праве. Разрешено копирование без согласования при условии указания гиперссылки на сайт (без атрибута nofollow и сокрытий) непосредственно до\после материала.
|
|