о 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.
    группа: Материалы
    прочтений: 9251
    Если Вам понравилась статья, подпишитесь на оповещения:

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

    введите этот код
    Мое имя:
    я не зарегистрирован и не хочу
    это моё зарегистрированное имя
    хочу зарегистрировать это имя
    Email:      
     оповещать об ответах
  •    Что нового почитать?
    Вывод из системы WebMoney через UNISTREAM (обновлено 23.05.2018) 23.05.18 [2]
    Система WebMoney добавила еще один способ вывести за наличные через систему UNISTREAM.
    Снижение комиссии при выводе WMX, WMH, WML 12.04.18
    Для участников системы WebMoney с 26 марта 2018 года доступен вывод по расписанию для WMX, WMH, WML со сниженной комиссией.
    Вывод из системы WebMoney на примере WMU (Вебмани Гривни ). 29.03.18
    Многие сталкивались с проблемой,когда хотят вывести из системы WebMoney,где лучше,быстрее и безопасно.
    Как пополнить кошелёк WebMoney через терминал ПриватБанка (Украина). 16.03.18 [2]
    Как пополнить кошелёк WebMoney через терминал ПриватБанка (Украина). Актуально для жителей Украины.
    Кошелёк Bitcoin Cash WMH в системе WebMoney (Вебмани). 13.03.18 [1]
    Кошелёк Bitcoin Cash WMH в системе WebMoney (Вебмани). Как создать,пополнить и вывести Кошелёк Bitcoin Cash( WMH) в системе WebMoney (Вебмани).
    КОШЕЛЁК WMX (BITCOIN) В СИСТЕМЕ WEBMONEY. 06.03.18
    После выхода ролика про создание ролика лайткоин (litecoin) многие спрашивают про кошелёк биткоина в системе Webmoney.Об этом наш новый ролик.
    WebMoney запустила сервис для стримеров. 03.03.18
    В последнее время чрезвычайно популярны онлайн-трансляции, они получили название стрим, а люди, которые их ведут – стримеры. WebMoney предоставляет ун
    Как пополнить WMU через платёжный терминал на Украине. 27.02.18
    Гуляя недавно по Киеву,надо было пополнить кошелёк WMU,для оплаты сотового,и если у вас нету в друзьях обменный пункт=),вам этот ролик поможет.

       Кофейня (форум)
    До 100$ на WM - Решение в течение 15 мин 18.05.18
    Как я могу пополнить мой счет wmr 25.01.18
    Возьму займ WM 20.10.17

       p2p
    Меняют 28700 WMU на 28378 UAH (курс:+1.1%) 24.05.18
    Меняют 3000 WMZ на 3000 USD (курс:1:1) 24.05.18
    Меняют 47000 Яндекс.Д на 19262 UAH (курс:2.44) 24.05.18

       WebMoney TOP
    Зарегистрирован obmen.at Сервис Obmen.at всегда предоставляет самые выгодные курсы. Это не просто маркетинговая уловка, котор...
    Зарегистрирован Интернет магазин цифровых товаров MyArena На MyArena можно продавать и покупать программное обеспечение, скрипты, музыку, видео, электронные к...
    Зарегистрирован Автоматический Обменный пункт WM-Myinvest.group WM-Myinvest.group - Реактивный обмен WebMoney за 15-20 секунд! Поменяй WMR, WMZ, WMU и WME по выгодн...

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


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