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

XML-интерфейсы. Часть 4. X19.

© Никита Сенченко, обновлено 20.12.2011

Так случилось, что серию статей (эта, эта и эта) о XML-интерфейсах, продолжать которую планов не было, приходится дополнить новым материалом. Причина тому - введение с 15 апреля 2010 года новых Правил для обменных пунктов, которые обязывают использовать специальный интерфейс X19.

Служит он для того, чтобы сравнить персональные данные клиента, который пришел в обменный пункт делать ввод или вывод WM, с информацией из аттестата этого клиента. При несовпадении - в обмене нужно отказать, поскольку обмен в пользу третьих лиц новые Правила запрещают. Получатель\отправитель денег и владелец WMID, с которого совершается ввод\вывод, должен быть одним и тем же лицом. Например, если в обменный пункт явился Иван Федорович Крузенштерн с целью сделать вывод, то обменный пункт с помощью X19 должен проверить, что кошелек, с которого этот человек выводит WM, принадлежит ему же - Ивану Федоровичу Крузенштерну.

Вообще, даже те обменники, которые упорно противились автоматизации своего бизнеса, вынуждены будут, наконец, озадачиться этим вопросом. Ручная проверка клиента тоже предусмотрена, она работает на специальной странице, но, во-первых, при большом потоке клиентов заниматься этим утомительно, а, во-вторых, правильным решением будет "проверить" клиента (и при негативном ответе X19 отказать ему в обмене), когда он ещё только оформляет заявку на сайте, а не в тот момент, когда он уже пришел к обменнику в офис, перечислил деньги и т.д.

Как применять X19 в разных ситуациях на практике, какие организационные мероприятия должен проводить обменный пункт и какие действия обменного пункта будут считаться правильными - читайте в этой статье.

Единственное исключение, когда Х19 надлежит использовать не обменникам - это пополнение мобильных телефонов за WebMoney. Сайты, которые занимаются таким бизнесом, также обязаны отныне использовать Х19 для проверки возможности пополнения того или иного телефонного номера.

X19 работает точно по тому же принципу, что и все остальные XML-интерфейсы. Чтобы понять этот принцип, прочтите предыдущие статьи моего цикла о XML-интерфейсах. Однако, в отличие от остальных интерфейсов, X19 включается (автоматически, без необходимости просить об этом техподдержку) только для тех WMID, которые зарегистрированы в Мегастоке в разделе "Обменные пункты" и "Мобильная связь". А заодно и для других WMID, прикрепленных к тому же аттестату! Таким образом, для более безопасного использования интерфейса разумно прикрепить к аттестату WMID, на котором нет и никогда не будет денег, положить на сервер именно его ключи и именно им обращаться к X19, подписывая запросы. Проверить, включен ли X19 для ваших WMID, можно на этой странице Центра Аттестации.

Полное описание X19 лежит здесь на wiki.

Мы дополнили нашу маленькую PHP-библиотеку функцией _WMXML19(), которая реализует X19. Эта функция выглядит так:

// ИНТЕРФЕЙС X19. ПРОВЕРКА СООТВЕТСТВИЯ ПЕРСОНАЛЬНЫХ ДАННЫХ ВЛАДЕЛЬЦА WM-ИДЕНТИФИКАТОРА. // На выходе: массив ['retval'=>код выполнения, 'retdesc'=>описание результата, // 'iname'=>имя, 'oname'=>отчество, 'retid'=>уникальный идентификатор ответа] function _WMXML19 ($type, $purse, $amount, $wmid, $pnomer, $fname, $iname, $bank_name, $bank_account, $card_number, $emoney_name, $emoney_id, $direction, $phone) { global $Global_WMID, $XML_addr; $reqn=_GetReqn(); $rsign=_GetSign($reqn.$type.$wmid); $fname=iconv("CP1251", "UTF-8", $fname); $iname=iconv("CP1251", "UTF-8", $iname); $bank_name=iconv("CP1251", "UTF-8", $bank_name); $pnomer=iconv("CP1251", "UTF-8", $pnomer); $xml=" <passport.request> <reqn>$reqn</reqn> <signerwmid>$Global_WMID</signerwmid> <sign>$rsign</sign> <operation> <type>$type</type> <direction>$direction</direction> <pursetype>$purse</pursetype> <amount>$amount</amount> </operation> <userinfo> <wmid>$wmid</wmid> <pnomer>$pnomer</pnomer> <fname>$fname</fname> <iname>$iname</iname> <bank_name>$bank_name</bank_name> <bank_account>$bank_account</bank_account> <card_number>$card_number</card_number> <emoney_name>$emoney_name</emoney_name> <emoney_id>$emoney_id</emoney_id> <phone>$phone</phone> </userinfo> </passport.request>"; $resxml=_GetAnswer($XML_addr[19], $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['iname']=iconv("UTF-8", "CP1251", strval($xmlres->userinfo->iname)); $result['oname']=iconv("UTF-8", "CP1251", strval($xmlres->userinfo->oname)); $result['retid']=strval($xmlres->retid); return $result; }

Рассмотрим подробнее.

XML-запрос к интерфейсу X19 должен выглядеть так:

<passport.request> <reqn></reqn> <signerwmid></signerwmid> <sign></sign> <operation> <type></type> <direction></direction> <pursetype></pursetype> <amount></amount> </operation> <userinfo> <wmid></wmid> <pnomer></pnomer> <fname></fname> <iname></iname> <bank_name></bank_name> <bank_account></bank_account> <card_number></card_number> <emoney_name></emoney_name> <emoney_id></emoney_id> <phone></phone> </userinfo> </passport.request>

Здесь главное понять принцип. Все обменные операции условно разделили на 6 типов. Тип операции должен указываться в поле operation/type:

  • 1 - ввод, вывод наличными;
  • 2 - ввод, вывод через системы денежных переводов (Western Union, MoneyGram и др.);
  • 3 - ввод, вывод на банковский счет;
  • 4 - ввод, вывод на карту;
  • 5 - обмен на электронную валюту в другой системе;
  • 6 - ввод за SMS;
  • 7 - пополнение мобильного.

    В зависимости от типа операции интерфейсу X19 должны передаваться те или иные данные о клиенте в параметрах блока userinfo:

  • Ввод или вывод WM за наличные (operation/type = 1) - нужно передавать номер паспорта (userinfo/pnomer), имя (userinfo/iname) и фамилию (userinfo/fname);
  • Ввод или вывод WM через системы денежных переводов (operation/type = 2) - нужно передавать имя и фамилию (userinfo/iname и userinfo/fname);
  • Ввод или вывод WM на банковский счет (operation/type = 3) - нужно передавать имя, фамилию, название банка и номер банковского счета (userinfo/iname, userinfo/fname, userinfo/bank_name, userinfo/bank_account);
  • Ввод или вывод WM на банковскую карту (operation/type = 4) - нужно передавать имя, фамилию, название банка и номер банковской карты (userinfo/iname, userinfo/fname, userinfo/bank_name, userinfo/card_number);
  • Обмен на электронные валюты других систем (operation/type = 5) - нужно передавать название платежной системы и номер счета клиента в этой системе (userinfo/emoney_name, userinfo/emoney_id);
  • Ввод за SMS (operation/type = 6) - нужно передавать номер мобильного телефона (userinfo/phone);
  • Пополнение мобильного (operation/type = 7) - нужно передавать номер мобильного телефона (userinfo/phone).
  • Кстати, поля, которые могут содержать русские буквы (имя, фамилия, название банка, номер паспорта), нужно передавать в Unicode. Для этого используем функцию iconv():

    $fname=iconv("CP1251", "UTF-8", $fname); $iname=iconv("CP1251", "UTF-8", $iname); $bank_name=iconv("CP1251", "UTF-8", $bank_name); $pnomer=iconv("CP1251", "UTF-8", $pnomer);

    Проблему с конвертацией фамилии, имени и номера паспорта из кириллицы в латиницу (и наоборот) система берет на себя. Если, например, ваш клиент выводит WM на имя Ivan Ivanov, а в его аттестате указано, что он Иван Иванов, - проверка через X19 пройдет успешно. Равно как и наоборот.

    Обязательные параметры, которые всегда должны присутствовать в любом запросе к Х19:

  • reqn - как обычно в вебманевских XML-интерфейсах, это номер запроса, который всякий раз должен быть больше, чем reqn предыдущего обращения к этому же интерфейсу X19;
  • operation/type - тип операции;
  • userinfo/wmid - WMID клиента;
  • operation/direction - показывает направление обмена. Здесь должно передаваться "1" при выводе WM (а также пополнении мобильного) и "2" при вводе WM. Очевидно, что в зависимоcти от значения operation/direction X19 может отрабатывать по-разному, проверяя данные пользователя по-разному для ввода и вывода.
  • sign - подпись запроса (формируется из строки параметров reqn + operation/type + userinfo/wmid);
  • operation/pursetype - должен содержать тип кошелька, с которого или на который производится обмен (WMZ, WMR, WMU и т.д.). Предназначение этого параметра пока остаётся невыясненным, но без него запрос не проходит;
  • operation/amount - должен содержать сумму обмена. Предназначение этого параметра пока остаётся невыясненным, но без него запрос не проходит.
  • Смысл в том, что обменный пункт как бы спрашивает Систему: "Ко мне пришел клиент совершать вот такую операцию. Вот его WMID и вот его личные данные. Скажи, можно ли производить обмен?"

    Примечание.
    По ходу дела заметим, что ввод и вывод для пользователей, у которых нет формального аттестата - теперь невозможен. X19 проверяет аттестат и запрещает обмен при аттестате псевдонима. Кроме того, чтобы успешно пройти проверку по Х19, пользователям нужно выполнить ряд других требований. О них подробно рассказано в этой статье.

    Примечание.
    Запрашивать X19 при автообмене внутри WebMoney с WM-кошелька одного типа на WM-кошелек другого типа - не нужно. Однако, правила запрещают обменному пункту менять в пользу третих лиц, поэтому нужно убедиться, что кошелек-получатель и кошелек-отправитель принадлежат одному и тому же WMID, либо одному и тому же аттестату. Подробно о том, как это делать, рассказано в этой статье.

    XML-ответ от интерфейса X19 имеет следующий вид:

    <passport.response> <retval></retval> <retdesc></retdesc> <retid></retid> <userinfo> <iname></iname> <oname></oname> </userinfo> </passport.response>

    Система, получив от обменного пункта на вход интерфейса WMID клиента и его личные данные, сверяет их с той информацией, которая указана в аттестате клиента. Если совпало, то retval = 0. Для обменного пункта такой ответ от X19 означает, что обмен можно проводить. Если не совпало (либо произошла какая-то другая ошибка), то retval НЕ БУДЕТ РАВЕН 0. Точное описание кодов retval приведено на wiki.

    На всякий случай, так сказать, для справки в случае успеха (retval = 0) X19 возвращает имя и отчество клиента из аттестата, в полях userinfo/iname и userinfo/oname соответственно. Кроме того, если retval = 0, то возвращается также уникальный идентификатор ответа в поле retid.

    Опять же, единственным исключением из этого правила является пополнение мобильного (operation/type = 7). Здесь, судя по всему, соответствие указанного телефонного номера тому, что внесен в аттестат, не проверяется! Вместо этого, WebMoney по каким-то ей одной известным признакам определяет, можно ли пополнять данный телефонный номер или нельзя.

    Рассмотрим, как использовать X19 на примере вывода WM в наличные (operation/type = 1).

    Мы ещё раз подчеркнем важность автоматизации всех процессов в обменном пункте. Ручных переводов с кошелька на кошелек желательно не производить! Клиент должен предварительно подать заявку на ввод или вывод на сайте обменника, а сайт (сервер) обменника должен выполнить необходимые проверки и принять, либо отправить WM-перевод.

    Итак, в нашем примере с выводом WM в наличные деньги:

    1. Клиент оформляет на сайте заявку на вывод. Указывает номер паспорта, ФИО и сумму. Для постоянных клиентов этот процесс можно упростить, организовав "личный кабинет", где клиент мог бы ввести эти данные единожды, вместо того, чтобы вводить их каждый раз при очередном выводе WM.
    2. Сайт обменного пункта сохраняет заявку в базе данных и отправляет клиента оплачивать на WM Merchant. Примечание (параметр LMI_PAYMENT_DESC) должно соответствовать правилам, например, верным примечанием будет: Иван Федорович Крузенштерн, паспорт 123456, вывод в наличные рубли.
    3. Получив "форму предварительного запроса" на Result URL, сайт обменного пункта незамедлительно:
      • Убеждается, что LMI_PAYMENT_DESC не был несанкционированно изменен клиентом. Для того, чтобы было, с чем сравнивать, в базе данных вместе с заявкой на вывод можно хранить и строку примечания (либо MD5 этой строки), с которой пользователь был отправлен на WM Merchant.
      • Принимает из параметра LMI_PAYER_WM WMID клиента. Запрашивает X19, передавая интерфейсу operation/type = 1, тип кошелька (operation/pursetype), WMID (userinfo/wmid), сумму (operation/amount). Также на вход интерфейса передается имя (userinfo/iname), фамилия (userinfo/fname), номер паспорта (userinfo/pnomer), которые были указаны клиентом ранее.
      • Получает ответ от интерфейса, что обмен можно проводить. На всякий случай сохраняет в базе данных информацию из ответа X19: идентификатор (retid), имя клиента (userinfo/iname) и отчество клиента (userinfo/oname).
      • Делает другие необходимые проверки (правильность суммы и т.д.)
      • Если все описанные выше проверки успешно пройдены, в ответ на "форму предварительного запроса" отвечает WM Merchant'у, что платеж можно принимать.
    4. WM Merchant списывает WM с кошелька клиента на кошелек обменного пункта.
    5. Всё дальнейшее - это организационные мероприятия, а не программные. Напомним, что когда клиент прийдет за деньгами, у него нужно проверить паспорт; убедиться, что в заявке были указаны (и проходили проверку через X19) именно те паспортные данные, которые теперь клиент предъявляет; сохранить электронную копию паспорта.

    Заметим, что Х19 нужно использовать перед КАЖДЫМ вводом\выводом\обменом (либо пополнением мобильного телефона), который совершает клиент - даже если в прошлый раз Х19 дал по этому клиенту "зеленый свет".

    Обсудить этот материал в Кофейне

    9.04.2010

    Внимание! Все права на данный материал принадлежат сайту owebmoney.ru. Копирование материала разрешено с обязательным указанием гиперссылки на http://owebmoney.ru.

       Что нового почитать?
    Как выводить вебмани в 2016 году 14.06.16 [3]
    С одной стороны, возникшая (надеюсь временно) проблема с выводом WebMoney на рублевые карты и банковские счета не столь уж и большая, ибо все остальны
    WebMoney.UA запустила массовые выплаты с кошельков на карты 09.06.16
    На сайте webmoney.ua представлена новая услуга - Массовые выплаты. Её суть заключается в том, что вы можете делать зачисления со своего WMU кошелька н...
    Как привязать аккаунт соцсети к Keeper Standard 31.05.16
    В Keeper Standard добавлена возможность прикрепить аккаунт в социальной сети (Facebook, Вконтакте, Одноклассниках и еще десятке других). После прикреп...
    Увидит ли получатель перевода мои данные? 31.05.16
    ВОПРОС: Если я переведу деньги со своего кошелька на кошелек другого человека, увидит ли он мое имя? Или будет виден только номер моего кошелька?
    На WebMoney Travel добавлены отели 24.05.16
    На WebMoney Travel добавлена возможность бронировать и оплачивать размещение в отелях. Можно выбрать отель в любой точке мира. Доступны номера разных ...
    Как искать платеж по 16-ти значному коду? 24.05.16
    ВОПРОС: Я получил 16-ти значный код для розыска и зачисления платежа. Где и как мне искать?
    Вывод WMR через Гаранта приостановлен 19.05.16 [2]
    Ранее мы писали о возникших сложностях c выводом WMR на банковские карты и прикрепленные счета. Сейчас ситуация усугубилась, и работавшие ранее способ...
    Я из Узбекистана, как я могу пополнить мой кошелек? 28.04.16 [5]
    ВОПРОС: Я из Узбекистана, как я могу пополнить мой кошелек?

       Кофейня (форум)
    Произвол арбитража 27.06.16
    Как найти автора статей? 24.06.16
    Покупка WMG как Юридическое лицо 31.05.16

       p2p
    Меняют 22000 UAH на 1000 PayPal (курс:22) 28.07.16
    Меняют 17710 WMZ на 17500 USD (курс:+1.2%) 28.07.16
    Меняют 35000 USD на 35875 WMZ (курс:-2.5%) 28.07.16

       WebMoney TOP
    Зарегистрирован WmChange.in.ua Обмен, ввод, вывод webmoney...
    Зарегистрирован Obmenu Быстро, безопасно и по хорошему курсу совершить обмен следующих видов электронных валют: Webmoney (W...
    Зарегистрирован webmoneycredits Мониторинг кредитных автоматов, займы в WMZ и WMR...

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


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