Подключение WebMoney
От: Qbit86 Кипр
Дата: 23.04.08 09:57
Оценка: 7 (1)
Уважаемые коллеги, нуждаюсь в вашей помощи!

Вопрос о подключении платёжной системы к сайту. Основная сложность заключается в недостатке квалификации в web-программировании. И как следствие, в формулировании внятных запросов к Гуглу — просто не хватает опыта и вовлечённости в область, так что извините, если вопросы покажутся чайниковыми. Буду очень признателен за разъяснение некоторых моментов.

Есть сайт на платформе Windows 2003 Server + IIS 7 + MS SQL Server + ASP.NET/C#. У пользователей ресурса будет внутренний счёт. Так что от платёжной системы требуется автоматизированная возможность как снимать деньги со счёта, так и класть их. Это одна из причин, по которой не подходят централизованные системы оплаты вроде Assist или Plimus.

Насчёт WebMoney я смотрел на разных форумах, включая RSDN, cafe.owebmoney.ru, forum.webmoney.ru. Увы, не смог выудить информацию в достаточном объёме, чтобы справиться с задачей. По всей видимости, нужен один из двух интерфейсов — Web Merchant Interface или XML-интерфейсы. Какой из них предпочтительнее и почему? Какой проще использовать, у какого больше возможностей, у какого меньше недостатков?

Попалась статья «Автоматический прием WM-платежей. Сервис WebMoney Merchant», но там рассматривается только первый способ взаимодействия, примеры даны на PHP и есть некоторые другие непонятки. Возможно, более опытные товарищи, которые уже сталкивались с сабжем, смогут поделиться примером кода на ASP.NET/C#?

Также с благодарностью выслушаю любые хинты относительно процесса получения WebMoney ID, регистрации кошельков, оформления аттестатов. В частности, нужен ли аттестат продавца для использования интерфейсов WebMoney? Чем отличается регистрация WMID (или кошельков?) для физических и юридических лиц?
Глаза у меня добрые, но рубашка — смирительная!
Re: Подключение WebMoney
От: Kvazimodo75  
Дата: 23.04.08 10:21
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>У пользователей ресурса будет внутренний счёт. Так что от платёжной системы требуется автоматизированная возможность как снимать деньги со счёта, так и класть их.


Т.е. система должна уметь осуществлять проводку со счётов своих клиентов (неважно WM или сбербанк) на счёта Ваших клиентов. Если я всё правильно понимаю — Вы в данном случае являетесь некоторым аналогом банка. У Вас есть лецензия на банковскую деятельность?. Насколько законной Вы полагаете такую операцию?

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

Примеры простые, неплохо документированные и всегда есть возможность тестового прогона сколь угодно долго.

СОВЕТ: никогда и не при каких условиях НЕЛЬЗЯ хранить учётные данные доступа Ваших клиентов к платежным системам.
Re[2]: Подключение WebMoney
От: Qbit86 Кипр
Дата: 23.04.08 11:05
Оценка:
Здравствуйте, Kvazimodo75, Вы писали:

K>Т.е. система должна уметь осуществлять проводку со счётов своих клиентов (неважно WM или сбербанк) на счёта Ваших клиентов. Если я всё правильно понимаю — Вы в данном случае являетесь некоторым аналогом банка.


Не совсем. Счёт клиентов — это некие credits, ближайший аналог — это фишки в казино или, быть может, баланс на ресурсе какого-нибудь интернет-провайдера, я подобные видел. Что такое «проводка со счетов» я не знаю, но, имхо, более близкая трактовка — это купля у ресурса/продажа ресурсу некоего нефизического товара. Хотя возможно это не самая верная аналогия. Внутренний счёт делается для того, чтобы при каждом акте перевода маленьких сумм не нужно было постоянно обращаться к платёжной системе. Пользователь просто один раз кладёт небольшую сумму на внутренний счёт, затем маленькими порциями с этого счёта оплачивает некоторые услуги, или, наоборот, получает бонусы. В конце цонцов, он может снять эти кредиты с внутреннего счёта обратно на WM-кошелёк. Это снижает вероятность компрометации основного кошелька.

K>СОВЕТ: никогда и не при каких условиях НЕЛЬЗЯ хранить учётные данные доступа Ваших клиентов к платежным системам.


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

K>Примеры простые, неплохо документированные и всегда есть возможность тестового прогона сколь угодно долго.


Примеры или для слишком простых случаев (guide_simple.asp), или таки плохо документированные. Возможно, просто сказывается недостаток опыта, поэтому много непонятного. Наверное, подключение платёжных систем не так уж и сложно, просто нужно единожды освоить процесс. Во второй раз, очевидно, подключение займёт куда меньше времени. Плюс если ещё в целом веб-программирование подтяну :)

K>В этом случае у платежных систем несложно найти примеры организации подключения к ним (правда некоторые два года назад давали доступ к примерам только после заключения договора).


Да, примеры использования XML-интерфейсов вроде бы становятся доступны после заключения договора. Но хотелось бы узнать, стоит ли овчинка выделки, или дешевле использовать старый интерфейс Web Merchant? Последний произвёл впечатление избыточно сложного. XML-интерфейс вроде попроще в обращении, но конкретной информации нет.

В идеале хотелось бы увидеть как можно более полный пример на ASP.NET/C#, в котором реализована возможность покупать/продавать за WebMoney, причём реализована и первым, и вторым способом (для сравнения).
Глаза у меня добрые, но рубашка — смирительная!
Re: Подключение WebMoney
От: 0K Ниоткуда  
Дата: 03.05.08 20:23
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Уважаемые коллеги, нуждаюсь в вашей помощи!


Q>Вопрос о подключении платёжной системы к сайту. Основная сложность заключается в недостатке квалификации в web-программировании. И как следствие, в формулировании внятных запросов к Гуглу — просто не хватает опыта и вовлечённости в область, так что извините, если вопросы покажутся чайниковыми. Буду очень признателен за разъяснение некоторых моментов.


Есть проект для разработчиков использующих WebMoney с ASP.Net: www.wmsigner.com. На этом сайте есть WMSigner разработанный полностью для платформы .Net и работающий примерно в 10 раз быстрее старого COM-овского за счет применения алгортма Монтгомери для RSA-подписи. Так-же есть примеры работы со всеми интерфейсами системы (правда эти самые примеры на данный момент в разработке).

Проект не левый, он создан при поддержке "Вычислительных Сил" (они разрабатывают ПО для WM). Этот же WMSigner для .Net c хорошо документированный вы можете скачать и с самого сайта WebMoney.

Q>Есть сайт на платформе Windows 2003 Server + IIS 7 + MS SQL Server + ASP.NET/C#. У пользователей ресурса будет внутренний счёт. Так что от платёжной системы требуется автоматизированная возможность как снимать деньги со счёта, так и класть их. Это одна из причин, по которой не подходят централизованные системы оплаты вроде Assist или Plimus.


Q>Насчёт WebMoney я смотрел на разных форумах, включая RSDN, cafe.owebmoney.ru, forum.webmoney.ru. Увы, не смог выудить информацию в достаточном объёме, чтобы справиться с задачей. По всей видимости, нужен один из двух интерфейсов — Web Merchant Interface или XML-интерфейсы. Какой из них предпочтительнее и почему? Какой проще использовать, у какого больше возможностей, у какого меньше недостатков?


Web Merchant Interface -- для приема средств.
XML-интерфейс №2 -- для перечисления средств

Q>Попалась статья «Автоматический прием WM-платежей. Сервис WebMoney Merchant», но там рассматривается только первый способ взаимодействия, примеры даны на PHP и есть некоторые другие непонятки. Возможно, более опытные товарищи, которые уже сталкивались с сабжем, смогут поделиться примером кода на ASP.NET/C#?


Опять же, два варианта примеров есть здесь.

Q>Также с благодарностью выслушаю любые хинты относительно процесса получения WebMoney ID, регистрации кошельков, оформления аттестатов. В частности, нужен ли аттестат продавца для использования интерфейсов WebMoney? Чем отличается регистрация WMID (или кошельков?) для физических и юридических лиц?


Для использования интерфейсов нужен персональный аттестат WM как для физ. так и для юр. лиц.
Re[2]: Подключение WebMoney
От: Qbit86 Кипр
Дата: 03.05.08 21:24
Оценка:
Здравствуйте, 0K.

Спасибо большое за отклик!

0K>Есть проект для разработчиков использующих WebMoney с ASP.Net: www.wmsigner.com. На этом сайте есть WMSigner разработанный полностью для платформы .Net и работающий примерно в 10 раз быстрее старого COM-овского за счет применения алгортма Монтгомери для RSA-подписи. Так-же есть примеры работы со всеми интерфейсами системы (правда эти самые примеры на данный момент в разработке).


Да, мне попадались ссылки на этот проект. Емнип, там есть возможность работать только с клиентом WM Keeper Classic, мне же нужна версия аутентификации WM Keeper Light.

0K>Web Merchant Interface -- для приема средств.

0K>XML-интерфейс №2 -- для перечисления средств

Я понял немного не так. Для перечисления средств от ресурса к пользователю нужен X2, а в обратном направлении — X1, это интерфейс с выписыванием счёта. Web Merchant Interface можно вообще не трогать. Впрочем, скоро придётся плотно потестить эти два интерфейса. Пока что удалось разобраться только с «безобидным» интерфейсом X9 — получение информации о балансе.

Трудность ещё была в работе с персональными цифровыми сертификатами X.509, которые используются для аутентификации при работе с WM Keeper Light.
Мне нужен код на ASP.NET/C# (в которых я пока что не очень-то разбираюсь), а в примере на офсайте находятся лишь не вполне вразумительные примеры на ASP/JScript (в которых я вообще никак). В частности, вызвал вопрос фрагмент
var xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP");
if ('light' == AuthorizeType)
{
  xmlhttp.setOption(3, 'WM id: '+reqwmid)
}
xmlhttp.open('POST', url, false);

Вроде как создаётся какой-то COM-объект, и у него устанавливается какое-то свойство. Ну, я смекнул, что это дело неплохо бы выразить в терминах HttpWebRequest, но вот что делать с этим setOption() не сообразил. В итоге пришлось установить сертификат в хранилище Windows (через WinHttpCertCfg.exe), затем при каждом запросе его оттуда извлекать, как-то так:
var store = new X509Store("...", StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
X509Certificate certificate = store.Certificates[0];
request.ClientCertificates.Add(certificate);


В общем, разбираться с подключением плат. систем — удовольствие ниже среднего. В идеале от webmoney.ru хотелось бы, чтобы они предоставили на каждую основную операцию по 2*2*2=8 примеров: через Web Merchant Interface и через XML-интерфейсы, с аут-цией через Classic и Light, исходники на ASP.NET/C# и PHP.
Глаза у меня добрые, но рубашка — смирительная!
Подключение WebMoney
От: 0K Ниоткуда  
Дата: 04.05.08 07:47
Оценка: 6 (1)
#Имя: FAQ.dotnet.web.webmoney
Здравствуйте, Qbit86, Вы писали:

Q>Здравствуйте, 0K.


Q>Спасибо большое за отклик!


0K>>Есть проект для разработчиков использующих WebMoney с ASP.Net: www.wmsigner.com. На этом сайте есть WMSigner разработанный полностью для платформы .Net и работающий примерно в 10 раз быстрее старого COM-овского за счет применения алгортма Монтгомери для RSA-подписи. Так-же есть примеры работы со всеми интерфейсами системы (правда эти самые примеры на данный момент в разработке).


Q>Да, мне попадались ссылки на этот проект. Емнип, там есть возможность работать только с клиентом WM Keeper Classic, мне же нужна версия аутентификации WM Keeper Light.


Посмотрите на Модуль для интеграции с XML-интерфейсами системы WebMoney. Работает как с ключем Classic, так и с сертификатом (и закрытым ключем) WM Keeper Light. Только контейнер .pfx хранится в виде байтового массива, но вы можете загружать и с хранилища сертификатов компьютера (используйте класс X509Store).

0K>>Web Merchant Interface -- для приема средств.

0K>>XML-интерфейс №2 -- для перечисления средств

Q>Я понял немного не так. Для перечисления средств от ресурса к пользователю нужен X2, а в обратном направлении — X1, это интерфейс с выписыванием счёта. Web Merchant Interface можно вообще не трогать. Впрочем, скоро придётся плотно потестить эти два интерфейса. Пока что удалось разобраться только с «безобидным» интерфейсом X9 — получение информации о балансе.


Существует 4 способа принимать оплату от клиентов с помощью системы WebMoney:

    с помощью интерфейса WebMoney Merchant;
    с помощью выписки счета на оплату, используя XML-интерфейс №1;
    напрямую переводить титульные знаки с доверенных кошельков клиентов, используя XML-интерфейс №2;
    с помощью интерфейса Click&Buy;


1 способ -- для мгновенного зачисления средств через шлюз WebMoney. Т.е. клиент будет перенаправлен на сайт WM, где и произведет операцию. Вы же получите только результат (оплатил/не оплатил и какую сумму). Этот вариант приема средств самый распространенный

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

3 способ позволяет снимать деньги с кошелька клиента напрямую. Но клиент должен должен доверить вам это делать (с указанием суммы, которую вы можете снимать).

4 способ -- мгновенное зачисление средств одним кликом. Пример работы вы можете посмотреть здесь.

Q>Трудность ещё была в работе с персональными цифровыми сертификатами X.509, которые используются для аутентификации при работе с WM Keeper Light.

Q>Мне нужен код на ASP.NET/C# (в которых я пока что не очень-то разбираюсь), а в примере на офсайте находятся лишь не вполне вразумительные примеры на ASP/JScript (в которых я вообще никак). В частности, вызвал вопрос фрагмент
Q>
Q>var xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP");
Q>if ('light' == AuthorizeType)
Q>{
Q>  xmlhttp.setOption(3, 'WM id: '+reqwmid)
Q>}
Q>xmlhttp.open('POST', url, false);
Q>

Q>Вроде как создаётся какой-то COM-объект, и у него устанавливается какое-то свойство. Ну, я смекнул, что это дело неплохо бы выразить в терминах HttpWebRequest, но вот что делать с этим setOption() не сообразил. В итоге пришлось установить сертификат в хранилище Windows (через WinHttpCertCfg.exe), затем при каждом запросе его оттуда извлекать, как-то так:
Q>
Q>var store = new X509Store("...", StoreLocation.LocalMachine);
Q>store.Open(OpenFlags.ReadOnly);
Q>X509Certificate certificate = store.Certificates[0];
Q>request.ClientCertificates.Add(certificate);
Q>


Вы все верно делаете. Установите сертификат с закрытым ключем в хранилище машины (не пользователя) и используйте HttpWebRequest для создания запросов. Пример вы можете найти здесь.

Вот вам код на C# для запросов к серверу WM с аутентификацией сертификатом Light:

public static string Send(Uri uri, string question, X509Certificate clientCertificate, Encoding encoding)
        {
            if (null == uri)
                throw new ArgumentNullException("uri");

            string answer;

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
            request.ProtocolVersion = new Version(1, 0);

            if (null != clientCertificate)
                request.ClientCertificates.Add(clientCertificate);

            if (!string.IsNullOrEmpty(question))
            {
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";

                StreamWriter streamWriter = null;

                try
                {
                    Stream reqStream = request.GetRequestStream();
                    streamWriter = new StreamWriter(reqStream, encoding ?? defaultEncoding);
                    streamWriter.Write(question);
                }
                finally
                {
                    if (null != streamWriter)
                        streamWriter.Close();
                }
            }

            WebResponse response = request.GetResponse();
            StreamReader streamReader = null;

            try
            {
                streamReader = new StreamReader(response.GetResponseStream(), encoding ?? defaultEncoding);
                answer = streamReader.ReadToEnd();
            }
            finally
            {
                if (null != streamReader)
                    streamReader.Close();
            }

            return answer;
        }


Q>В общем, разбираться с подключением плат. систем — удовольствие ниже среднего. В идеале от webmoney.ru хотелось бы, чтобы они предоставили на каждую основную операцию по 2*2*2=8 примеров: через Web Merchant Interface и через XML-интерфейсы, с аут-цией через Classic и Light, исходники на ASP.NET/C# и PHP.


Примеры для ASP.Net, как вы заметили, есть. Они действительно находятся в разработке. Однако при желании разобраться можно.
Re[4]: Подключение WebMoney
От: Qbit86 Кипр
Дата: 04.05.08 11:46
Оценка:
Здравствуйте, 0K!

Спасибо за подробный и развёрнутый ответ с исходниками и ссылками — буквально образцовый комментарий :)
Надо будет подробнее присмотреться к WM Signer.
Ещё в гугле пробегала ссылка на WmClasses — обёртка на C# над XML-интерфейсами. Вам приходилось с ней работать?
Глаза у меня добрые, но рубашка — смирительная!
Re[5]: Подключение WebMoney
От: 0K Ниоткуда  
Дата: 04.05.08 16:24
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Здравствуйте, 0K!


Q>Спасибо за подробный и развёрнутый ответ с исходниками и ссылками — буквально образцовый комментарий

Q>Надо будет подробнее присмотреться к WM Signer.
Q>Ещё в гугле пробегала ссылка на WmClasses — обёртка на C# над XML-интерфейсами. Вам приходилось с ней работать?

Ссылка на эту библиотеку есть на сайте здесь (предпоследняя). Автор тоже учавствует в проекте.

В идеале нужна библиотека с документацией, которую можно использовать в приложениях работающих с WM-интерфейсами. К сожалению на данный момент такого продукта нет (хотя, на сколько я знаю, работы ведутся). Вы можете использовать то что есть (любую из 2-х библиотек) как пример.

В кратце. Первая библиотека (WM-API) -- использует серилизацию и гораздо сложнее в реализации. Вторая (WmClasses) -- намного проще, применяется простое строковое представление запроса (преобразовывает в xml-документ). Обе библиотеки не являются законченными реализациями и использовать на данный момент (в том состоянии, в каком они сейчас) я бы их не стал.

Единственный законченный и документированный продукт на сайте wmsigner.com -- сам WMSigner для .Net. Его использовать вместо обычного обязательно. Причем обязательн версию 2.0 (работает в 20 раз быстрее версии 1.1). На сайте WebMoney можно скачать только версию 1.1, 2.0 только на родном сайте.

ЗЫ
Если нет персонального аттестата, то можно скачать с английской версии сайта.
Re[2]: Подключение WebMoney
От: Powerz Россия https://zagosk.in
Дата: 29.07.08 12:23
Оценка:
Здравствуйте, 0K, Вы писали:

0K>Есть проект для разработчиков использующих WebMoney с ASP.Net: www.wmsigner.com. На этом сайте есть WMSigner разработанный полностью для платформы .Net и работающий примерно в 10 раз быстрее старого COM-овского за счет применения алгортма Монтгомери для RSA-подписи. Так-же есть примеры работы со всеми интерфейсами системы (правда эти самые примеры на данный момент в разработке).


Привет!
Правильно ли я понимаю, что если для ввода денег (покупатель => магазин) использовать WebMoney Merchant, то WMSigner не нужен, а нужен он для использования WM-интерфейсов?
И еще пара вопросов. Для того чтобы перевести деньги в обратную сторону (магазин => покупатель) надо использовать интерфейс X2? Это будет автоматический перевод?
https://zagosk.in
Re[3]: Подключение WebMoney
От: dkameleon Украина http://dkameleon.com
Дата: 19.09.08 04:08
Оценка:
Здравствуйте, Powerz, Вы писали:

P>Привет!

P>Правильно ли я понимаю, что если для ввода денег (покупатель => магазин) использовать WebMoney Merchant, то WMSigner не нужен, а нужен он для использования WM-интерфейсов?
Правильно понимаете

P>И еще пара вопросов. Для того чтобы перевести деньги в обратную сторону (магазин => покупатель) надо использовать интерфейс X2? Это будет автоматический перевод?

Зависит, что вкладывать в слово "автоматический". Перевод будет совершён скриптами, если запрограммируете автоматическое совершение платежей — будет автоматическое
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.