о WebMoney
Информационный портал о WebMoney
  
  
подписка  
реклама здесь 
обратная связь 
  Материалы      Вопросы и ответы     Курс обучения      Файлы
 Кофейня      WebMoney TOP      p2p      WM-Клуб      Гид   
о WebMoney / Материалы / XML-интерфейсы. Часть 7. X22

XML-интерфейсы. Часть 7. X22

© Никита Сенченко, 28.08.2012

моя оценка:
[средняя: 5]

Новый интерфейс X22 позволяет зарегистрировать заказ (корзину) в WebMoney Merchant и получить ссылку на его оплату через merchant.webmoney.ru. Работает с кошельками, подключенными к Merchant. Будет полезен, когда прием платежей с помощью Merchant нельзя полностью автоматизировать.


Предыдущие статьи о XML-интерфейсах WebMoney:

  • XML-интерфейсы WebMoney. Часть 1. WMSigner.
  • XML-интерфейсы WebMoney. Часть 2. X2, X6, X8, X11
  • XML-интерфейсы WebMoney. Часть 3. X1, X3, X4, X9, X14, X16
  • XML-интерфейсы WebMoney. Часть 4. X19
  • XML-интерфейсы WebMoney. Часть 5. X20
  • XML-интерфейсы WebMoney. Часть 6. X21

    А также: WM Merchant и интерфейс Х18.

    Здесь лежит библиотека XOWM с PHP-функциями, которые реализуют работу с XML-интерфейсами WebMoney.


    Введение

    Интерфейс Х22 выпущен в июле 2012 года. Он - один из самых простых XML-интерфейсов WebMoney. Его полное описание находится, как всегда, в wiki.

    X22 позволяет зарегистрировать заказ (корзину) в WebMoney Merchant и получить ссылку на его оплату через merchant.webmoney.ru. Фактически, это ничем не отличается от приема платежей с помощью WebMoney Merchant, однако в данном случае формируется и сохраняется на сервере WebMoney точная ссылка на оплату конкретного заказа на конкретную сумму.

    Пример использования такой. Клиент обращается к отельному брокеру и просит забронировать для него гостиницу. Менеджер подбирает гостиницу и ставит бронь, после чего регистрирует заказ с помощью Х22. Получив от WebMoney ссылку на оплату, менеджер отправляет ее клиенту по email, а клиент переходит по ссылке и производит оплату.


    Итак, Х22 подходит для тех случаев, когда нет возможности полностью автоматизировать прием платежа от начала до конца на сайте.

    X22 базируется на merchant.webmoney.ru. Все подобные интерфейсы (кроме X22 это еще и X18, X20) могут вызываться БЕЗ использования электронной подписи, полученной с помощью ключа Кипера (kwm-файл) и WMSigner (исключение составляет еще один интерфейс на базе Merchant - X21; он работает только с WMSigner). Вместо этого используется md5-хеш на основе вашего "секретного слова" в настройках WebMoney Merchant. Это сильно упрощает разработку, но вы должны хорошо понимать, как работает Merchant.

    Таким образом, X22 работает только для кошельков, подключенных к WebMoney Merchant и настроенных соответствующим образом здесь https://merchant.webmoney.ru/conf/purses.asp (для тех, кто пользуется собственными кошельками) или на сайте https://processing.webmoney.ru (для тех, кто подключен к системе WebMoney Processing).

    Программирование интерфейса

    Общий принцип X22 такой же, как и для других интерфейсов WebMoney. Нужно обратиться с запросом на определенный URL, например, с помощью curl в PHP, и считать ответ.

    URL: https://merchant.webmoney.ru/conf/xml/XMLTransSave.asp

    Состав запроса:

    <merchant.request>
    <signtags>
    <wmid></wmid>
    <validityperiodinhours></validityperiodinhours>
    <sign></sign>
    <md5></md5>
    <secret_key></secret_key>
    </signtags>
    <paymenttags>
    <lmi_payee_purse></lmi_payee_purse>
    <lmi_payment_no></lmi_payment_no>
    <lmi_payment_amount></lmi_payment_amount>
    <lmi_payment_desc></lmi_payment_desc>
    <lmi_...></lmi_...>
    <lmi_...></lmi_...>
    <lmi_...></lmi_...>
    <usertagname1></usertagname1>
    <usertagname2></usertagname2>
    <usertagname3></usertagname3>
    </paymenttags>
    </merchant.request>


  • wmid - это ваш WMID, на который принимаются платежи.
  • validityperiodinhours - на сколько часов нужно сохранить заказ, максимально 744. Если 0, то заказ будет "жить" вечно.
  • sign - подпись запроса с помощью файла-ключа и WMSigner. Мы использовать это поле не будем.
  • md5 - подпись запроса md5-хешем строки, полученной путем склейки без разделителей таких параметров: wmid + lmi_payee_purse + lmi_payment_no + validityperiodinhours + secret_key. Хеш должен быть в верхнем регистре.
  • secret_key - подпись запроса путем простой передачи SecretKey, Мы это поле использовать не будем.
  • lmi_payee_purse - ваш кошелек-получатель платежа, то же что LMI_PAYEE_PURSE в протоколе Merchant. Этот кошелек должен быть подключен к Merchant и настроен соответствующим образом согласно протокола.
  • lmi_payment_no - присвоенный вами номер заказа, то же что LMI_PAYMENT_NO в протоколе Merchant. Необязательное поле.
  • lmi_payment_amount - сумма заказа в валюте кошелька-получателя, то же что LMI_PAYMENT_AMOUNT в протоколе Merchant. Дробная часть отделяется точкой.
  • lmi_payment_desc - короткое текстовое описание заказа, то же что LMI_PAYMENT_DESC в протоколе Merchant. Должно быть передано в кодировке UTF8.
  • могут быть переданы другие предопределенные параметры, предусмотренные протоколом Merchant (см. полное описание на wiki). Начинаются с префикса "lmi_".
  • могут быть переданы другие произвольные параметры. Устанавливаются вами самостоятельно при необходимости. Не должны начинаться с префикса "lmi_".

    Итак, можно использовать один из 3 вариантов подписи: sign, md5 или secret_key. Поля двух неиспользуемых способов должны оставаться пустыми. Мы будем использовать md5. Его получаем из строки склеенных параметров:

    $md5=strtoupper(md5($wmid.$lmi_payee_purse.$lmi_payment_no.$period.$secret_key));

    Здесь $secret_key - это "секретное слово", установленное в настройках Merchant для вашего кошелька.

    Еще один момент. Если в validityperiodinhours передать 0, то такой заказ будет сохранен навсегда. Если зарегистрировать новый заказ с validityperiodinhours=0, то параметры этого заказа перезапишут параметры предыдущего "вечного" заказа.

    "Вечную" ссылку удобно использовать, например, для приема благотворительных пожертвований на сайте на фиксированную сумму от неограниченного круга лиц. В остальных же случаях, чтобы не запутаться, я рекомендую всегда передавать конечный срок жизни заказа в часах от 1 до 744.

    Ответ сервера WebMoney:

    <merchant.response>
    <transtoken></transtoken>
    <validityperiodinhours></validityperiodinhours>
    <retval></retval>
    <retdesc></retdesc>
    </merchant.response>


  • retval - результат отработки запроса. "0" свидетельствует о том, что запрос успешно отработан.
  • retdesc - описание ошибки.
  • transtoken - токен-строка, которую нужно подставить в ссылку вида https://merchant.webmoney.ru/lmi/payment.asp?gid=TRANSTOKEN или https://merchant.wmtransfer.com/lmi/payment.asp?gid=TRANSTOKEN. По этой ссылке юзер попадет на оплату сохраненного в системе заказа.

    Функция _WMXML22()

    Функция _WMXML22() для работы с Х22 включена в библиотеку XOWM. Она принимает параметры, отправляет XML-запрос на сервер WebMoney (нужна поддержка curl), считывает XML-ответ, парсит его (нужна поддержка simplexml) и отдает набор данных из полей XML-ответа:


    function _WMXML22 ($wmid, $period, $lmi_payee_purse, $lmi_payment_amount, $lmi_payment_no, $lmi_payment_desc, $secret_key) {
    global $XML_addr;
    $lmi_payment_desc=trim($lmi_payment_desc);
    if (!preg_match('//u', $lmi_payment_desc)) // если $lmi_payment_desc не в UTF8
    $lmi_payment_desc=iconv("CP1251", "UTF-8", $lmi_payment_desc); // ...переводим в UTF8
    $lmi_payment_amount=floatval($lmi_payment_amount);
    $lmi_payment_no=intval($lmi_payment_no);
    $md5=strtoupper(md5($wmid.$lmi_payee_purse.$lmi_payment_no.$period.$secret_key));
    $xml="
    <merchant.request>
    <signtags>
    <wmid>$wmid</wmid>
    <validityperiodinhours>$period</validityperiodinhours>
    <sign></sign>
    <md5>$md5</md5>
    <secret_key></secret_key>
    </signtags>
    <paymenttags>
    <lmi_payee_purse>$lmi_payee_purse</lmi_payee_purse>
    <lmi_payment_amount>$lmi_payment_amount</lmi_payment_amount>
    <lmi_payment_no>$lmi_payment_no</lmi_payment_no>
    <lmi_payment_desc><![CDATA[$lmi_payment_desc]]></lmi_payment_desc>
    </paymenttags>
    </merchant.request>";
    $resxml=_GetAnswer($XML_addr[22], $xml);
    // echo $resxml;
    $xmlres = simplexml_load_string($resxml);
    if(!$xmlres) {
    $result['retval']=1000;
    $result['retdesc']="Не получен XML-ответ";
    return $result;
    }
    $result['retval']=strval($xmlres->retval);
    $result['retdesc']=iconv("UTF-8", "CP1251", strval($xmlres->retdesc));
    $result['transtoken']=strval($xmlres->transtoken);
    return $result;
    }


    Отдельного пояснения, видимо, требует этот код:

    if (!preg_match('//u', $lmi_payment_desc)) // если $lmi_payment_desc не в UTF8
    $lmi_payment_desc=iconv("CP1251", "UTF-8", $lmi_payment_desc); // ...переводим в UTF8

    Напомню, что lmi_payment_desc должен быть передан на сервер WebMoney в запросе X22 в кодировке UTF8. Не зная заранее, какой текст и в какой кодировке будет на входе функции, мы сначала проверяем его на наличие русских букв, представленных не в UTF8. Если таковые найдены, переводим всю строку в UTF8 с помощью iconv. При этом предполагается, что такие русские буквы были изначально в кодировке CP1251.

    Чтобы протестировать работу функции, ее нужно вызвать с вашими реальными параметрами и распечатать массив с результатами:

    $ret=_WMXML22("ВАШ_WMID", КОЛИЧЕСТВО_ЧАСОВ, "ВАШ_КОШЕЛЕК", СУММА, НОМЕР_ЗАКАЗА, "ОПИСАНИЕ_ЗАКАЗА", "СЕКРЕТНОЕ_СЛОВО");
    print_r($ret);

    Пустым, напомню, может быть только НОМЕР_ЗАКАЗА (lmi_payment_no).

    Если вам необходимо передать на Merchant какие-то дополнительные параметры, кроме стандартных lmi_payee_purse, lmi_payment_no, lmi_payment_amount, lmi_payment_desc, модифицируйте функцию самостоятельно и добавьте в нее новые входные параметры и их передачу в XML-запросе.

    Например, вы хотите передать LMI_RESULT_URL, чтобы переопределить Result URL для данного платежа. А также вы хотите передать свой собственный параметр COUNT, в котором будете хранить, скажем, количество товаров в данном заказе. Тогда набор входных параметров дополнится:

    function _WMXML22 ($wmid, $period, $lmi_payee_purse, $lmi_payment_amount, $lmi_payment_no, $lmi_payment_desc, $secret_key, $lmi_result_url, $count) {
    ...
    }

    И соответственно дополнится xml-пакет, он теперь будет выглядеть так:

    $xml="
    <merchant.request>
    <signtags>
    <wmid>$wmid</wmid>
    <validityperiodinhours>$period</validityperiodinhours>
    <sign></sign>
    <md5>$md5</md5>
    <secret_key></secret_key>
    </signtags>
    <paymenttags>
    <lmi_payee_purse>$lmi_payee_purse</lmi_payee_purse>
    <lmi_payment_amount>$lmi_payment_amount</lmi_payment_amount>
    <lmi_payment_no>$lmi_payment_no</lmi_payment_no>
    <lmi_payment_desc><![CDATA[$lmi_payment_desc]]></lmi_payment_desc>
    <lmi_result_url>$lmi_result_url</lmi_result_url>
    <count>$count</count>
    </paymenttags>
    </merchant.request>";


    Как это всё работает на практике, можно посмотреть здесь. Там, кстати, в составе пакета по X22 передается кроме стандартных параметров lmi_payment_no, lmi_payment_amount, lmi_payment_desc, lmi_payee_purse также дополнительный параметр email.
    группа: Материалы
    прочтений: 8097
    Если Вам понравилась статья, подпишитесь на оповещения:

    Комментарии (0) ... Будьте первым!

    введите этот код
    Мое имя:
    я не зарегистрирован и не хочу
    это моё зарегистрированное имя
    хочу зарегистрировать это имя
    Email:      
     оповещать об ответах
  •    Что нового почитать?
    Мой номер телефона утерян и не подлежит восстановлению. Как быть? 06.10.16 [3]
    ВОПРОС: Долго не пользовался своей симкой. Номер заблокирован, восстановлению не подлежит. Как востановить доступ к кошельку?
    Автомобилистам на заметку: как оплатить штраф по WM 04.10.16
    Сегодня мы хотим напомнить о возможностях, которые существуют в WebMoney для оплаты штрафов ГАИ и дорожных сборов. Если неприятность всё же произошла ...
    На WebMoney Merchant можно принимать Биткоины 30.09.16 [5]
    Если вы на вашем сайте принимаете WebMoney и делаете это через WebMoney Merchant, то для вас есть хорошая новость. Теперь с вами смогут рассчитаться т...
    Муравей-бот отвечает на вопросы о WebMoney в Telegram 27.09.16
    WebMoney запустил интеллектуального бота-помощника для мессенджера Telegram. Он постарается понять ваш вопрос и дать на него ответ.Для начала, разбере...
    Автоплатежи помогут не забыть об оплате 27.09.16
    В WebMoney Keeper, а также в личный кабинет Telepay добавлена опция автоплатежа для 3х крупнейших мобильных операторов России: Билайна, МТС и Мегафона...
    Новая библиотека для платформы .Net 14.09.16
    Разработчикам будет полезно узнать, что выпущена новая версия библиотеки для работы с XML-интерфейсами WebMoney для платформы Microsoft .Net.В ней реа...
    WebMoney пришла в Молдову 14.09.16 [1]
    WebMoney предоставила возможность работы с кошельком, номинированным в молдавских леях. Однако, кошелек этот не совсем обычный.Во-первых, кошелек созд...
    В обновленных Киперах появились регулярные платежи 04.08.16
    Обновилась вся линейка мобильных Киперов (iOS, Android, Windows Phone, MacOs X и BlackBerry OS 10), а также браузерный Keeper Standard.Главное новшест...

       Кофейня (форум)
    Проблема с Кипером WinPro версии 3.9.9.8 01.12.16
    Работает ли корректно в данный момент Х19? 30.11.16
    НБУ объяснил запрет электронных денег 08.11.16

       p2p
    Меняют 100000 UAH на 250000 WMR (курс:2.5) 08.12.16
    Меняют 789000 UAH на 30000 WMZ (курс:26.3) 08.12.16
    Меняют 15225 WMZ на 15000 USD (курс:+1.5%) 07.12.16

       WebMoney TOP
    Зарегистрирован Обмен24 Ввод/Вывод WebMoney, ЯД, QIWI на Privat24, СберБанк, АльфаБанк, ТКСБ и другие. Быстрая обработка зая...
    Зарегистрирован Green Cash Обменный пункт WebMoney в Москве. Ввод/вывод WebMoney на выгодных условиях. Работаем 7 дней в неделю...
    Зарегистрирован Bestchange.ee Ввод и вывод WM в Эстонии и Европе. Карты (чеки Paymer), высылаем на e-mail. Оплату принимаем на бан...

       WM-Клуб
    Присоединился Василий Галанов
    Присоединился Евгений Кудрявцев
    Присоединился Николай Бирюк


     
    Все права на материалы, опубликованные на owebmoney.ru, охраняются в соответствии с законом об авторском праве. Разрешено копирование без согласования при условии указания гиперссылки на сайт (без атрибута nofollow и сокрытий) непосредственно до\после материала.