четверг, 31 июля 2008 г.

Merchant.Money

Новый, упрощённый до минимума, удобный, комфортабельный, современный платёжный сервис online расчётов.
Система Merchant.Money проста в использовании. Все платежи в Merchant.Money проходят безопасно и мгновенно!
С помощью этого платёжного сервиса вы научитесь с лёгкостью манипулировать электронными деньгами WebMoney: оплачивать товары / услуги / сервисы, переводить средства между участниками системы, а также зарабатывать электронные деньги.
Само название платёжного сервиса Merchant.Money переводится дословно как деньги купца или продавца. То есть платёжный сервис, созданный специально для начинающих бизнесменов и профессионалов, которые с лёгкостью могут интегрировать Merchant.Money на свой сайт и принимать электронные платежи в online.
Merchant.Money - это платёжный сервис на основе платёжной системы WebMoney (www.webmoney.ru).
Merchant.Money - это отличная альтернатива WebMoney Merchant интерфейсу перевода средств в автоматическом режиме.
Чтобы облегчить жизнь продавцам в настройках приёма средств на сайте, мы приготовили все необходимые инструменты. От продавца требуется только получить собственный Money.Кошелёк и настроить страницы обработки платежей.

Merchant.Money Interface / Шлюз олаты
Merchant.Money Interface - шлюз оплаты для подключения к сайту и приёма оплаты (online платежей) за товары, услуги и сервисы в автоматическом режиме. Нет надобности получать Персональный аттестат у WebMoney.
Доступны 2 режима работы шлюза оплаты: Рабочий и Тестовый. В Тестовом режиме вы можете протестировать настройки и имитировать совершаемые платежи. Когда проверите все настройки, можно смело переключать Merchant.Money Interface в рабочий режим и начинать принимать на сайте электронные деньги.
Подключив Merchant.Money к сайту, вы будете получать платежи титульными знаками WebMoney (WMZ).
Если у вас есть собственные эл. товары и вы хотите автоматизировать приём средств на сайте, но испытываете трудности с настройками и использованием WebMoney Merchant интерфейса перевода средств, тогда Merchant.Money - это то, что вам необходимо!
Приятный дизайн сайта, понятный интерфейс не оставит равнодушным ни одного пользователя или посетителя.

вторник, 29 июля 2008 г.

Мерчант (LiqPAY)

Система Click&Buy(Нажми и Купи) версии 1.1

Замените значения параметров на нужные вам сумму и валюту (UAH,USD,EUR,RUR) и описание товара(он отображается у клиента как комментарий), максимальная длина описания - 127 символов.
Если вы хотите чтобы после покупки(или отказа от покупки) пользователь перешел на вашу страницу добавьте в форму необязательный параметр: http://your_site.com/liqpay_return.html. Если вы пишите скрипт, то на этот URL приходят все параметры покупки и подпись(signature) по которой вы сможете понять что человек действительно заплатил, а не хакер пытается обмануть вашу систему. О том что покупка совершена говорит status="success", покупка отклонена status="failure", а если status="wait_secure" то платеж находится на проверке. Проверка происходит когда человек первый раз оплачивает своей картой в системе, система пока молодая так что status="wait_secure" будет происходить часто, чтобы обрабатывать такие платежы вам поможет параметр server_url, об этом читайте ниже. Если вы не пользуетесь автоматикой, то вы должны дождаться когда транзакция пройдет проверку и вам поступят деньги от нее, это видно в аккаунте системы.
Для того чтобы автоматизировать покупку вы должны использовать необязательный параметр:

http://your_site.com/server_liqpay_return.cgi на этот URL будут приходить все параметры покупки и подпись(signature) от нашего сервера(т.е. в обход пользователя). Отличие от result_url только в том что result_url происходит при редиректе в браузере клиента, а server_url происходит от нашего сервера (пользователь его вообще не видит). server_url необходим вам потому что: а) если пользователь по какой-то причине не дошел до result_url хотя удачно оплатил или отменил оплату, то на server_url придет запрос от нашего сервера об удаче или отмене, и вы сможете закрыть операцию покупки все равно. б) если вам пришел status="wait_secure", это значит что платеж на проверке, и только server_url вам сообщит после проверки о том что платеж одобрен(status="success") или отклонен(status="failure"), result_url после проверки не приходит!
Будьте внимательны, если вы используете одновременно и result_url и server_url то вам приходит одновременно два успеха, смотрите два раза не отдайте товар покупателю! И может такое случится что server_url придет раньше result_url, смотрите чтобы в таком случае клиент не получил ошибку от вас!
Параметр order_id - это идентификатор покупки, максимальная длина - 127 символов. Параметр необязательный, но для автоматизированной системы продажи рекомендуется его использовать с настройкой "Требовать уникальность order_id" для того чтобы конкретную единицу товара могли купить только один раз и для того чтобы вас не обманули простыми повторными запросами на result_url! В order_id нельзя использовать символ ""! Можно не использовать уникальность order_id т.к. приходящий параметр transaction_id(читайте ниже) уникален для каждой оплаты вне зависимости от order_id.
Подпись считается следующим образом: signature_source = "" + version + "" + merchant_password + "" + action_name + "" + sender_phone + "" + merchant_id + "" + amount +"" + currency + "" + order_id + "" + transaction_id + "" + status + "" + code + "" signature = base64(sha1(signature_source)) Все параметры, кроме merchant_password, приходят на result_url и server_url по методу POST с соответствующими именами. merchant_password - это пароль вашего мерчанта, храните в секрете и нигде не передавайте его, он является залогом вашей безопасности при автоматической продаже!
Приходящие параметры: action_name - способ ответа, может быть "result_url" или "server_url" в зависимости от того каким способом был прислан ответ. sender_phone - номер телефона плательщика. transaction_id - номер транзакции в системе. status - код ответа, может быть "success", "failure", "wait_secure". code - уточняющий код ответа, пока не используется. Все остальные приходящие параметры равны входящим параметрам. response_code, reason_code, id - устаревшие параметры, не используйте их. Будьте внимательны, ответ от нас приходит в кодировке utf8 (особенно смотрите за параметрами order_id, description)!
Примерно через неделю выйдет Click&Buy версии 1.2 на основе XML, где будет входящая подпись. А также выйдет API версии 1.2, через которую можно будет осуществлять платежы с вашего аккаунта без мобилы в автоматическом режиме.


пятница, 25 июля 2008 г.

Формирование ссылки или формы (UkrMoney)

Ссылка сервиса: https://trans.ukrmoney.com/add_nologged/.
Метод передачи параметров: GET или POST.
Параметры:
benef_mail - E-mail получателя платежа;
amnt - сумма перевода средств. Целая и дробная часть значений разделяются точкой. После точки не более двух цифр. Незначащие нули запрещены!;
currency - валюта платежа. Может принимать значения: UAH USD EUR
wording - назначение платежа (в кодировке UTF-8), не более 255 байт;
benef_order- не обязательный параметр, порядковый номер счета получателя в данной валюте, если не задан, то будет использоваться первый счет. Если задан несуществующий номер, то будет сгенерирована ошибка.
url_redirect - ссылка, на которую переходит пользователь, при успешной оплате и при отмене оплаты. Параметр может быть не обязательным если вы указали «URL оповещения при возврате» в настройках merchant (cм. далее).
payment_id – не обязательный параметр, идентификатор оплаты, который потом используется в «маркере».
Пример:
Допустим, у вас есть свой Интернет-магазин. Покупатель должен заплатить за купленный товар: "Телевизор LG", стоящий 1000 гривен. Деньги должны быть зачислены на ваш аккаунт, в системе UkrMoney.com, с E-mail-ом admin@example.com. После оплаты покупатель должен быть переадресован на страницу: http://www.example.com/tovar_kuplen/.



Примечание: приведенная ссылка будет работать на странице с кодировкой UTF-8. На страницах с другими кодировками рекомендуем заменить русские буквы на их латинские аналоги, в нашем примере вместо "wording=Телевизор LG" можно написать "wording=Televizor LG".
Настройка параметров (настройки merchant)
Настройка параметров «Click&Buy» производится на сайте UkrMoney.com в разделе Настройки > Другие настройки > Настройки Merchant:· секретный ключ - не обязательный параметр, если задан то он будет подставляться в «маркер» вместо вашего пароля;
· URL оповещения, при возврате – не обязательный параметр, если не был задан url_redirect параметр, то пользователь переходит на эту ссылку после удачной оплаты или отмены оплаты, параметры передаются GET методом;
· URL оповещения, об удачной оплате - не обязательный параметр, посылать запрос по данному адресу, в обход пользователя, об удачной оплате, параметр result принимает значение Success;
· URL оповещения, об удачной оплате, метод оповещения - метод оповещения POST или GET для запроса об удачной оплате.
· URL оповещения, о неудачной оплате - не обязательный параметр, посылать запрос по данному адресу, в обход пользователя, при неудачной оплате (пользователь отменил оплату), параметр result принимает значение Fail;
· URL оповещения, о неудачной оплате, метод оповещения - метод оповещения POST или GET для запроса о неудачной оплате.
· Для каждого счета галочка «Показывать имя счета при Click&buy» - если галочка выбрана, то человеку который совершает оплату на данный счет будет показываться еще и название этого счета, если же галочка не выбрана – то название счета не будет показываться;

Возврат после оплаты или отмены оплаты, оповещенияПри переходе на url_redirect (или на URL оповещения, при возврате), на URL оповещения, об удачной оплате, на URL оповещения, о неудачной оплате передаются следующие параметры:
· id - идентификатор транзакции;
· benef_mail - E-mail получателя;
· benef_order – порядковый номер счета получателя в данной валюте;
· payee_mail – E-mail плательщика;
· payee_order – порядковый номер счета плательщика в данной валюте;
· amnt – сумма транзакции.
· fee - комиссия;
· wording - назначение платежа (в кодировке UTF-8);
· ts - время транзакции, формат в виде MySQL datetime, пример «2006-12-31 23:59:59»;
· currency – валюта;
· result – Success если оплата удачная, Fail – оплата неудачная (не произведена);
· payment_id – этот тот же параметр который передается в запросе, он может отсутствовать если его не было в запросе.
· marker – маркер, специальное значение, позволяет проверить параметры на подлинность (что запрос пришел от UkrMoney.com) и целостность (что данные не были искажены при передаче по сети).
Примечание: Для совместимости со старой версией маркера в случае удачной оплаты переход url_redirect(или URL оповещения, при возврате) не содержит параметра result и маркер не использует этот параметр, см. формулу 1)
Формула для расчета маркера:
signature – это подпись. Если человек задал секретный ключ то подпись равна этому секретному ключу, иначе подпись это MD5_hex(benef_password), где benef_password – это пароль от аккаунта получателя.
1) Маркер удачной оплаты для url_redirect(или URL оповещения, при возврате) считается по следующей формуле:
MD5_hex(id, benef_order, benef_mail, payee_order, payee_mail, amnt, fee, wording, ts, currency, benef_mail, signature, payment_id)
2) Маркер неудачной оплаты для url_redirect(или URL оповещения, при возврате) считается по следующей формуле:
MD5_hex(benef_order, benef_mail, payee_mail, amnt, fee, wording, ts, currency, benef_mail, signature, result, payment_id)
3) Маркер для URL оповещения, об удачной оплате считается по следующей формуле:
MD5_hex(id, benef_order, benef_mail, payee_order, payee_mail, amnt, fee, wording, ts, currency, benef_mail, signature, result, payment_id)
4) Маркер для URL оповещения, о неудачной оплате считается по следующей формуле:
По той же формуле что и 2)
MD5_hex() – функция которая возвращает MD5 хеш в виде шестнадцатеричного числа от аргумента этой функции. Аргумент – это строчка, которая составляется из параметров точно в таком порядке, в котором они указаны в скобках, отделяя один параметр от другого при помощи запятой, но без пробелов. Если вы в запросе не передавали параметр payment_id, то маркер будет сформирован без него и без запятой перед ним.


Формирование ссылки или формы (UkrMoney)

Ссылка сервиса: https://trans.ukrmoney.com/add_nologged/.
Метод передачи параметров: GET или POST.
Параметры:
benef_mail - E-mail получателя платежа;
amnt - сумма перевода средств. Целая и дробная часть значений разделяются точкой. После точки не более двух цифр. Незначащие нули запрещены!;
currency - валюта платежа. Может принимать значения: UAH USD EUR
wording - назначение платежа (в кодировке UTF-8), не более 255 байт;
benef_order- не обязательный параметр, порядковый номер счета получателя в данной валюте, если не задан, то будет использоваться первый счет. Если задан несуществующий номер, то будет сгенерирована ошибка.
url_redirect - ссылка, на которую переходит пользователь, при успешной оплате и при отмене оплаты. Параметр может быть не обязательным если вы указали «URL оповещения при возврате» в настройках merchant (cм. далее).
payment_id – не обязательный параметр, идентификатор оплаты, который потом используется в «маркере».
Пример:
Допустим, у вас есть свой Интернет-магазин. Покупатель должен заплатить за купленный товар: "Телевизор LG", стоящий 1000 гривен. Деньги должны быть зачислены на ваш аккаунт, в системе UkrMoney.com, с E-mail-ом admin@example.com. После оплаты покупатель должен быть переадресован на страницу: http://www.example.com/tovar_kuplen/.

Либо кнопку находящуюся в форме:


admin@example.com” />







Примечание: приведенная ссылка будет работать на странице с кодировкой UTF-8. На страницах с другими кодировками рекомендуем заменить русские буквы на их латинские аналоги, в нашем примере вместо "wording=Телевизор LG" можно написать "wording=Televizor LG".
Настройка параметров (настройки merchant)
Настройка параметров «Click&Buy» производится на сайте UkrMoney.com в разделе Настройки > Другие настройки > Настройки Merchant:· секретный ключ - не обязательный параметр, если задан то он будет подставляться в «маркер» вместо вашего пароля;
· URL оповещения, при возврате – не обязательный параметр, если не был задан url_redirect параметр, то пользователь переходит на эту ссылку после удачной оплаты или отмены оплаты, параметры передаются GET методом;
· URL оповещения, об удачной оплате - не обязательный параметр, посылать запрос по данному адресу, в обход пользователя, об удачной оплате, параметр result принимает значение Success;
· URL оповещения, об удачной оплате, метод оповещения - метод оповещения POST или GET для запроса об удачной оплате.
· URL оповещения, о неудачной оплате - не обязательный параметр, посылать запрос по данному адресу, в обход пользователя, при неудачной оплате (пользователь отменил оплату), параметр result принимает значение Fail;
· URL оповещения, о неудачной оплате, метод оповещения - метод оповещения POST или GET для запроса о неудачной оплате.
· Для каждого счета галочка «Показывать имя счета при Click&buy» - если галочка выбрана, то человеку который совершает оплату на данный счет будет показываться еще и название этого счета, если же галочка не выбрана – то название счета не будет показываться;

Возврат после оплаты или отмены оплаты, оповещенияПри переходе на url_redirect (или на URL оповещения, при возврате), на URL оповещения, об удачной оплате, на URL оповещения, о неудачной оплате передаются следующие параметры:
· id - идентификатор транзакции;
· benef_mail - E-mail получателя;
· benef_order – порядковый номер счета получателя в данной валюте;
· payee_mail – E-mail плательщика;
· payee_order – порядковый номер счета плательщика в данной валюте;
· amnt – сумма транзакции.
· fee - комиссия;
· wording - назначение платежа (в кодировке UTF-8);
· ts - время транзакции, формат в виде MySQL datetime, пример «2006-12-31 23:59:59»;
· currency – валюта;
· result – Success если оплата удачная, Fail – оплата неудачная (не произведена);
· payment_id – этот тот же параметр который передается в запросе, он может отсутствовать если его не было в запросе.
· marker – маркер, специальное значение, позволяет проверить параметры на подлинность (что запрос пришел от UkrMoney.com) и целостность (что данные не были искажены при передаче по сети).
Примечание: Для совместимости со старой версией маркера в случае удачной оплаты переход url_redirect(или URL оповещения, при возврате) не содержит параметра result и маркер не использует этот параметр, см. формулу 1)
Формула для расчета маркера:
signature – это подпись. Если человек задал секретный ключ то подпись равна этому секретному ключу, иначе подпись это MD5_hex(benef_password), где benef_password – это пароль от аккаунта получателя.
1) Маркер удачной оплаты для url_redirect(или URL оповещения, при возврате) считается по следующей формуле:
MD5_hex(id, benef_order, benef_mail, payee_order, payee_mail, amnt, fee, wording, ts, currency, benef_mail, signature, payment_id)
2) Маркер неудачной оплаты для url_redirect(или URL оповещения, при возврате) считается по следующей формуле:
MD5_hex(benef_order, benef_mail, payee_mail, amnt, fee, wording, ts, currency, benef_mail, signature, result, payment_id)
3) Маркер для URL оповещения, об удачной оплате считается по следующей формуле:
MD5_hex(id, benef_order, benef_mail, payee_order, payee_mail, amnt, fee, wording, ts, currency, benef_mail, signature, result, payment_id)
4) Маркер для URL оповещения, о неудачной оплате считается по следующей формуле:
По той же формуле что и 2)
MD5_hex() – функция которая возвращает MD5 хеш в виде шестнадцатеричного числа от аргумента этой функции. Аргумент – это строчка, которая составляется из параметров точно в таком порядке, в котором они указаны в скобках, отделяя один параметр от другого при помощи запятой, но без пробелов. Если вы в запросе не передавали параметр payment_id, то маркер будет сформирован без него и без запятой перед ним.

четверг, 24 июля 2008 г.

Описание “Click&Buy UkrMoney.com”

Система “Click&Buy UkrMoney.com” (далее Click&Buy) позволяет производить мгновенную оплату товаров и услуг со страниц Интернет-магазина, являющегося клиентом системы UkrMoney.com.

Продавец генерирует ссылку или форму, по которой покупателя переадресовывает на страницу платёжной системы, где он может произвести оплату или отменить ее. После чего, посетитель перенаправляется на заранее определённый URL. При переадресации передаются параметры с помощью которых можно определить была ли произведена оплата или нет (в том числе используется «маркер» по которому определяется достоверность оплаты).Кроме этого, продавец может настроить систему оповещений «об удачной оплате» и «О неудачной оплате» (отмене оплаты пользователя) собственные веб - скрипты в обход пользователя (см. далее настройки merchant).

Описание “Click&Buy UkrMoney.com”

Система “Click&Buy UkrMoney.com” (далее Click&Buy) позволяет производить мгновенную оплату товаров и услуг со страниц Интернет-магазина, являющегося клиентом системы UkrMoney.com.

Продавец генерирует ссылку или форму, по которой покупателя переадресовывает на страницу платёжной системы, где он может произвести оплату или отменить ее. После чего, посетитель перенаправляется на заранее определённый URL. При переадресации передаются параметры с помощью которых можно определить была ли произведена оплата или нет (в том числе используется «маркер» по которому определяется достоверность оплаты).Кроме этого, продавец может настроить систему оповещений «об удачной оплате» и «О неудачной оплате» (отмене оплаты пользователя) собственные веб - скрипты в обход пользователя (см. далее настройки merchant).

вторник, 22 июля 2008 г.

Программная выписка счета в системе WebMoney

Процесс: * Пользователь заходит на страницу, вписывает свой WMID (идентификатор, получаемый при регистрации в системе WebMoney), нажимает кнопку "оплатить" и ему приходит счет для оплаты. * Пользователь платит по счету и переходит по ссылке, указанной в параметрах счета и получает товар.
Следовательно для этого потребуются 2 программы: * Программа обработки данных формы и выписки счета на WMID пользователя. * Программа проверки оплаты счета и выдачи товара.
Для выписки счета на WMID пользователя необходимо выполнить следующий https запрос: https://w3s.webmoney.ru/asp/Invoice.asp?SL=LoginOfStores& SP=PurseOfStores& CL=LoginOfCust& IN=OrderID& D=Desc& AD=InvAddress& A=Amount& E=Experation& P=Period& RN=RequestN& SS=SignStr (эта инофрмация приведена на сайте системы WebMoney, однако если бы задача решалась так просто, я бы не написал эту статью). Теперь про каждый параметр подробнее:


SL=LoginOfStores - WM-идентификатор web-ресурса (просто регистрируете нового пользователя в системе WebMoney для приема платежей с сайта и указываете его WMID);SP=PurseOfStores - кошелек Web-ресурса (номер кошелька, на который будут совершаться платежи - кошелек пользователя с WMID из первого пункта);CL=LoginOfCust - WM-идентификатор покупателя (этот параметр указывает пользователь, программа получает данные из формы);IN=OrderID - номер счета (номер заказа) на Web-ресурсе (в магазине). Номер генерируется программой (1) самостоятельно и хранится в базе Web-ресурса (магазина, сервиса) - по этому номеру в дальнейшем будет определятся состояние счета (оплачен или нет). (номер должен быть целым числом);D=Desc - описание товара, за который выписывается счет. Параметр должен быть строкой от 0 до 255 символов;AD=InvAddress - адрес доставки товара. Параметр должен быть строкой от 0 до 255 символов (сюда будем писать ссылку, по которой пользователь сможет получить товар. Это будет ссылка на программу (2), которой будет передаваться параметр IN=OrderID);A=Amount - сумма счета. Данный параметр формируется программой (1). Параметр должен быть числом с плавающей точкой (разделитель - точка);E=Experation - срок действия счета в днях (целое число от 0 до 255);P=Period - срок действия протекции сделки. Параметр формируется программой (1). (максимальный срок протекции сделки при оплате счета, если указать здесь 0, то счет не будет иметь срока протекции);RN=RequestN - этот параметр является уникальным возрастающим числом. Параметр формируется программой (1) и должен быть всегда больше такого же параметра, указанного в предыдущем запросе. Лучше всего формировать этот параметр из текущего года, месяца, дня, часа, минуты, секунды и сотых секунд. (должен быть целочисленным 16-ти разрядным значением);SS=SignStr - цифровая подписью запроса. Он гарантирует то, что именно ваш Web-ресурс выписал счет.

При подготовке https запроса Основной проблемой является формирование именно SS=SignStr. Сначала должна быть сформирована строка PlanStr как сумма параметров OrderID, LoginOfCust, PurseOfStores, Amount, Desc, InvAddress, Period, Experation, RequestN, описанных выше и точно в таком же порядке. После этого необходимо из строки подписи PlanStr сделать строку цифровой подписи SignStr, для этого используется специальный модуль WMSigner, которому на вход подается строка PlanStr, а он возвращает SignStr.
Исходные коды модуля можно скачать, перейдя по ссылке: go.php?url=download.webmoney.ru/WMSigner.zip, после чего модуль надо будет скомпилировать под ту операционную систему, на которой работает Ваш сайт. Можно отправить этот архив администрации вашего хостинга и попросить скомпилировать, а можно попытать удачу самому, для этого создадим файл poehali.pl со следующим кодом:

#!/usr/bin/perlsystem('g++ cmdbase.cpp crypto.cpp md4.cpp rsalib1.cpp signer.cpp wmsigner.cpp');
print "Content-type:text/html\n\n";print "И все-таки она вертится!";


Теперь создадим папку (ну, например wm) в корневом каталоге сайта и скопируем туда наш скрипт и содержимое архива WMSigner. Права доступа к нашему скрипту необходимо поставить 711. Теперь из строки браузера следует запустить скрипт poehali.pl (записать строку, например go.php?url=www.zahodi-ka.ru/wm/poehali.pl) и подождать ответа скрипта. Если на сервере есть компилятор G++ и необходимые модуля, то в папке wm после запуска окажется файл a.out, который нужно переименовать в wmsigner (маленькими буквами).
Когда модуль уже готов, можно приступить к написанию программы (1), которая и будет его вызывать. В документации на сайте системы WebMoney вызов осуществляется с помощью функции open2, однако такой вариант работает не всегда, поэтому мы будет вызывать с помощью функции system. Создадим программу (назовем ее wschet.pl):

#!/usr/bin/perl
sub dopprobelz # функция дополнения строки нулями вначале{my($str)=@_[0];my($len)=@_[1]; my $delta=$len-length($str);my $hwost='';for (my($a)=0; $a<$delta; $a++) {$hwost=$hwost.'0';};$str=$hwost.$str; return $str;};# подключение модулейuse FileHandle;use IPC::Open2;use CGI;use Socket;use LWP::UserAgent;
# задание параметров запроса# сюда укажите свои данные$OrderID = '999'; # номер счета на Вашем сайте$PurseOfStores ='Z406593169293'; # кошелек сайта$LoginOfStores = '321373645120'; # WMID сайта$LoginOfCust = '083872782699'; # WMID покупателя, зададим как константу$InvAddress = 'INVADDRESS'; # адрес$Amount = '10'; #сумма счета, которую должен оплатить покупатель$Desc = 'DESC'; # описание$Period = '0'; #Срок протекции сделки$Experation = '3'; #Срок действия счета - 3 дня
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time());$RequestN=(1900+$year).dopprobelz($mon, 2);$RequestN=$RequestN.dopprobelz($mday, 2).dopprobelz($hour, 2);$RequestN=$RequestN.dopprobelz($min, 2).dopprobelz($sec, 2).dopprobelz($sec, 2);
$PlanStr="$OrderID$LoginOfCust$PurseOfStores$Amount";$PlanStr=$PlanStr."$Desc$InvAddress$Period$Experation$RequestN";
print "Content-Type: text/html\n\n";
print "Строка подписи \$PlanStr: $PlanStr


";
# вызов модуля WMSigner
pipe(IN,OUT); # создание канала связи (пишешь в OUT, читаешь из IN)OUT->autoflush(1);$pid = open(CHILD,"-"); # разделение на 2 процесса#связывание ввода доч. проц. с дескриптором CHILDif ($pid != 0){ ## если данный поток - родительclose(OUT); # Родителю OUT не нужен, будет писать через CHILDprint CHILD $PlanStr."\004\r\n"; # передача параметров потомкуclose(CHILD); # передача закончена, дескриптор не нужен$SignStr=$_ while (); # Получение данных от клонаclose(IN);waitpid($pid,0);}else{ #### если клон(потомок)close(IN);open(STDOUT,">&=OUT"); # замена стандартного вывода на дескр. OUTclose(OUT);system('./wmsigner'); # запуск модуля WMSigner (будет возвращать данные в OUT)exit;};
print "Цифровая подпись (возвращена WMSigner'ом): $SignStr


";
$W3sUrl="
https://w3s.webmoney.ru/asp/Invoice.asp?SL=$LoginOfStores&";$W3sUrl=$W3sUrl."SP=$PurseOfStores&CL=$LoginOfCust&IN=$OrderID&D=$Desc&";$W3sUrl=$W3sUrl."AD=$InvAddress&A=$Amount&E=$Experation&P=$Period&";$W3sUrl=$W3sUrl."RN=$RequestN&SS=$SignStr";
print "HTTPS запрос к системе:
".$W3sUrl."


";
$ua2 = LWP::UserAgent->new; $res2=$ua2->get($W3sUrl);$buf=$res2->content;
print "Ответ системы:
".$buf; # Далее необходимо произвести разбор буфера и запись счета в базу данных магазина


К этой программе следует положить в папку скомпилированный модуль WMSigner(права доступа 711), резервную копию ключей (при запуске Keeper запросит создать резервную копию кючей и задать пароль для этой копии, после создания скопируйте файл *.kwm на сайт к программе wschet.pl и переименуйте его в keys.kwm, выставьте ему права доступа 440) и файл wmsigner.ini (права доступа 440) следующего содержания

WMID
pass.
/keys.kwm

Где WMID - идентификатор магазина, pass - пароль от резервной копии ключей, ./keys.kwm - путь к файлу ключей.
Теперь детально разберем способ запуска модуля wmsigner из нашей программы. Для вызова модуля используется функция system(), которая связывает потоки ввода-вывода вызываемого процесса с потоками ВВ вызывающей процесс программы, то есть данные, переданные вызывающей программе извне будет получать и запущенный функцией system() процесс и данные, возвращаемые процессом будут выводиться туда же, куда и данные вызывающей программы (в нашем случае в браузер пользователя, что нежелательно). Для разделения потоков ВВ наша программа сначала создает клона, потом этот клон вызывает процесс WMSigner и получает от него данные, а основная программа получает данные уже от своего клона, процесс создания клона и переопределения его стандартного дескриптора ввода на CHILD реализован с помощью функции $pid = open(CHILD,"-").
Если модуль выдаст ошибку -3, знайте, что в wmsigner.ini Вы указали пароль не от резервной копии ключей или скопировали не резервную копию ключей.

понедельник, 7 июля 2008 г.

Формирование заказа. Начало платежа. (WM)

Чтобы инициировать платеж, в точке А (см. рис.1) нам нужно передать Мерчанту ряд параметров, для того чтобы Мерчант знал, какую сумму и в пользу какого продавца списывать с кошелька покупателя. Какие именно действия пользователя будут предшествовать точке А - решать вам. Но помните - к моменту, когда покупатель нажмет кнопку в точке А и перейдет на Мерчант для оплаты, вам обязательно нужно иметь информацию об этом пользователе и его покупке. Как правило, это решается одним из способов в зависимости от вашей конкретной ситуации:Покупатель формирует "корзину покупок" и заполняет информацию о себе, а ваш сайт подсчитывает и сохраняет стоимость его заказа. Такой подход обычно применяется в интернет-магазинах нецифровых товаров.Покупатель проходит регистрацию на сайте, входит в личный аккаунт и указывает сумму, на которую он собирается пополнить свой внутренний счет на вашем сайте. Чаще всего применяется на сайтах интернет-казино, хостинг-провайдеров.Покупатель просто выбирает один товар из каталога и указывает необходимую информацию о себе. Обычно такую схему можно встретить в магазинах цифровых товаров.
Так или иначе, мы не будем сейчас обсуждать описанные подходы и методы. Этой теме посвящена не одна книга по программированию и юзабилити. Однако, для того чтобы демонстрировать подключение сайта к Мерчанту на конкретном примере, условимся о задаче, которая перед нами стоит.
Пусть, нам требуется продавать покупателям некие электронные товары (скажем, коды пополнения мобильных операторов) и выслать их по email после оплаты. Также договоримся для простоты, что покупатель сможет выбирать из каталога и оплачивать за раз только один товар т.е. без формирования "корзины покупок".
Очевидно, что у нас в базе данных должна быть таблица с характеристиками товаров:

Покупатель выбирает товар из каталога, и попадает в точку А. Эта страница на вашем сайте (назовем ее order.php) должна содержать такую html-форму:

https://merchant.webmoney.ru/lmi/payment.asp">



Укажите email для отправки товара:




Будем называть это формой заказа платежа. Вот как выглядит такая страница в нашем примере. Рассмотрим форму детальнее:action - Атрибут action должен отправлять на https://merchant.webmoney.ru/lmi/payment.asp.

method - Должен использоваться метод посыла формы POST.LMI_PAYMENT_AMOUNT - Поле, которое содержит сумму платежа. Дробная часть отделяется точкой. В нашем примере значение LMI_PAYMENT_AMOUNT=0.05.LMI_PAYMENT_DESC - Поле, которое содержит примечание платежа. Должно содержать текст, желательно - наименование товара или услуги, которая продается. Максимальная длина - 255 символов. В нашем примере значение LMI_PAYMENT_DESC="код пополнения Super Mobile". LMI_PAYEE_PURSE - Ваш кошелек, только что подключенный к Мерчанту (см. главу "Предварительные настройки"). Должен состоять из буквы (Z-, R- и т.д.) и 12 цифр. По значению этого поля Мерчант распознает, в пользу какого продавца (иначе говоря, на чей кошелек) производится платеж. В нашем примере LMI_PAYMENT_PURSE="Z155771820786".

Обращаю ваше внимание, что поля LMI_PAYMENT_AMOUNT, LMI_PAYMENT_DESC, LMI_PAYEE_PURSE должны называться именно так, и никак иначе. При этом поля LMI_PAYMENT_AMOUNT и LMI_PAYEE_PURSE являются обязательными.
В той же форме можно передавать и свои произвольные параметры, если это необходимо. При чем, названы эти параметры могут быть как угодно, главное, чтобы они не начинались с префикса LMI_!). В нашем примере мы добавили в форму:Поле id - содержит id выбранного покупателем товара. Берется из таблицы goods.Поле email - покупатель указывает здесь свой email, на который он получит товар после оплаты.
После нажатия на кнопку покупатель попадает на https://merchant.webmoney.ru/lmi/payment.asp, то есть переходит на сайт Мерчанта. Одновременно с этим сайту Мерчанта, естественно, передаются и все параметры нашей формы.

четверг, 3 июля 2008 г.

Подготовительные работы приема WM-платежей

Для использования Web Merchant Interface ваш WMID должен иметь персональный аттестат. Идем по этой ссылке и за несколько секунд получаем аттестат продавца.
Теперь на странице Настройки нужно подключить к Мерчанту кошелек и установить некоторые опции. Для этого напротив нужного кошелька жмем "настроить". Попадаем на страницу с настройкам.

Торговое имя - впишите сюда название вашего сервиса, который будет оплачиваться на данный кошелек. "Торговое имя" плательщик будет видеть на странице Мерчанта перед оплатой (см. рис.3). Ни на что больше оно не влияет.

Secret Key - запишем сюда произвольную строку из 15-20 символов, состоящую из английских букв, цифр и других символов, кроме кавычек. Для чего нужен Secret Key, я расскажу чуть позже.Result URL, Success URL, Fail URL. В эти поля нужно вписать адреса 3-х страниц вашего сайта (обязательно с http:// или https:// в начале). Сами страницы мы будем программировать чуть позже, а пока разберемся, зачем они нужны.На Success URL покупатель будет отправлен Мерчантом в случае успешной оплаты. На Fail URL покупатель будет отправлен, если оплата по какой-то причине не произошла (например, покупатель передумал платить и нажал на кнопку отказа, либо у него оказалось недостаточно средств на кошельке). Страница Result URL - секретная, пользователь ее не видит. Она служит для "общения" сервера Мерчанта с вашим сайтом, т.е. для обмена информацией. Желательно выбирать для скрипта (файла), прописанного в Result URL, не банальное имя. Рядом с Success URL и Fail URL выбираем в качестве метода вызова POST.Позволять использовать URL, передаваемые в форме - галочку не ставим, эта опция нам не нужна.Высылать оповещение об ошибке платежа на кипер - будет ли Мерчант отправлять вам по внутренней WM-почте сообщение в случае возникновения ошибки при совершении платежа пользователем. Ставим галочку, так как это полезная фишка.Метод формирования контрольной подписи - выбираем MD5. Вернемся к разговору о контрольной подписи позже.Тестовый/Рабочий режимы - выбираем "Тестовый", так как в тестовом режиме деньги с кошелька плательщика не списываются, и это очень удобно для проведения тестовых покупок. В самом конце, когда всё будет готово, мы вернемся к данной опции и переведем ее в рабочий режим.Активность - включение\выключение возможности приема платежей на этот кошелек через Мерчант. Естественно, выбираем "Вкл".Прием чеков Paymer.com (ВМ-карт) и Прием платежей с телефонов Telepat.ru - эти опции определяют, разрешена ли оплата с чеков Paymer и WM-кошельков, подключенных к системе Телепат. Ставим "Вкл" для обеих, так как именно они и придают сервису Web Merchant Interface ту универсальность, которая отличает его от других 2-х способов приема платежей в системе WebMoney.
Жмем кнопку [Сохранить].
Я устанавливал настройки для одного из своих Z-кошельков. Точно так же можно настроить и другие кошельки, в т.ч. и кошельки других типов (R, U и т.д.). Если, например, вы планируете принимать оплату за товар/услугу в WMZ и WMR на выбор покупателя, то вам нужно настроить один Z- и один R-кошелек. Настройки совершенно идентичны.

среда, 2 июля 2008 г.

Общий принцип приема WM-платежей

Автоматизация приема WM-платежей может понадобиться самым разным сайтам - от интернет-магазинов до хостинг-провайдеров. Web Merchant Interface (далее для простоты мы будем называть этот сервис просто Мерчант) позволит:1) выполнять заказ моментально после его оплаты, например, отправлять покупателю цифровой товар, пополнять баланс, активировать услугу и т.д.;2) принимать платежи круглосуточно, без остановок и без ручного участия ваших сотрудников.
Общий принцип работы Мерчанта такой (см. рис.1). Вы формируете на своем сайте необходимую информацию о заказе (точка А) и отправляете ее сайту Мерчанта https://merchant.webmoney.ru/. Одновременно с этим и ваш покупатель попадает на этот сайт для совершения платежа. Мерчант авторизует покупателя, предлагает выбрать способ оплаты, проверяет наличие нужной суммы на кошельке или WM-карте, т.е. проводит ряд необходимых идентификаций и проверок. После этого Мерчант списывает WM с кошелька или карты покупателя. В тот же момент уплаченная сумма поступает на ваш кошелек. Мерчант уведомляет ваш сайт о том, что покупка успешно произведена или о том, что возникла какая-либо ошибка (точка D).
Рис.1. Схема взаимодействия вашего сайта с Мерчантом
Таким образом, вам не нужно проверять свой кошелек, чтобы узнать, поступил платеж, или нет. За вас это делает единожды созданный вами робот. Всё работает автоматически, беспрерывно и без вашего участия.

Общий принцип приема WM-платежей

Автоматизация приема WM-платежей может понадобиться самым разным сайтам - от интернет-магазинов до хостинг-провайдеров. Web Merchant Interface (далее для простоты мы будем называть этот сервис просто Мерчант) позволит:1) выполнять заказ моментально после его оплаты, например, отправлять покупателю цифровой товар, пополнять баланс, активировать услугу и т.д.;2) принимать платежи круглосуточно, без остановок и без ручного участия ваших сотрудников.
Общий принцип работы Мерчанта такой (см. рис.1). Вы формируете на своем сайте необходимую информацию о заказе (точка А) и отправляете ее сайту Мерчанта https://merchant.webmoney.ru. Одновременно с этим и ваш покупатель попадает на этот сайт для совершения платежа. Мерчант авторизует покупателя, предлагает выбрать способ оплаты, проверяет наличие нужной суммы на кошельке или WM-карте, т.е. проводит ряд необходимых идентификаций и проверок. После этого Мерчант списывает WM с кошелька или карты покупателя. В тот же момент уплаченная сумма поступает на ваш кошелек. Мерчант уведомляет ваш сайт о том, что покупка успешно произведена или о том, что возникла какая-либо ошибка (точка D).
Рис.1. Схема взаимодействия вашего сайта с Мерчантом
Таким образом, вам не нужно проверять свой кошелек, чтобы узнать, поступил платеж, или нет. За вас это делает единожды созданный вами робот. Всё работает автоматически, беспрерывно и без вашего участия.

вторник, 1 июля 2008 г.

Автоматический прием WM-платежей. Сервис WebMoney Merchant.

Существует 3 способа автоматического приема WebMoney на сайте:

1. Web Merchant Interface
2. Click&Buy Interface
3. Выписка WM-счета с последующей проверкой оплаты. Реализуется с помощью XML-интерфейсов X1 и X3.

Я рекомендую использовать 1-й способ, так как он наиболее универсален - позволяет принимать оплату от пользователей как Keeper Classic, так и Keeper Light, а также от пользователей системы Telepat. Кроме того, он позволяет вашему покупателю оплачивать товар/услугу непосредственно с WM-карты или чека Paymer без необходимости регистрации в системе WebMoney.
2-й и 3-й способы такой универсальностью похвастаться не могут, так как поддерживают только Keeper Classic и Light, а 3-й способ, кроме того, довольно сложен в реализации и не обладает абсолютной моментальностью.
Поэтому в данной статье мы поговорим о Web Merchant Interface и рассмотрим подключение сайта к нему на конкретном примере.
Прежде, чем начать, ответим на важный вопрос: можно ли подключить прием WebMoney в автоматическом режиме, совершенно не обладая навыками программирования? Ответ таков: нет, нельзя. Ни по одному из 3-х способов. Так же, впрочем, как и в случае подключения к сайту любой другой системы электронных денег, вам нужно иметь минимальные навыки программирования.
В некоторых наиболее простых случаях возможно подключение Web Merchant Interface по этому упрощенному руководству без необходимости что-то программировать. Но при этом, хотя сам прием платежей и будет автоматизирован, их обработка все равно останется ручным трудом. А это означает, что не будет и моментальности, поэтому такой подход равносилен обычной публикации на сайте номеров своих WM-кошельков (как, кстати, до сих пор многие и поступают).
Так или иначе, в данном материале я предполагаю, что вы умеете программировать под web хотя бы на минимальном уровне. Если не умеете, то дальше можно не читать - у вас ничего не выйдет. Просто опубликуйте на сайте номера своих кошельков и принимайте платежи вручную. Либо наймите программиста.
Для демонастрации программного кода я буду использовать PHP + СУБД MySQL. Но поскольку я постараюсь сдобрить статью подробными комментариями, для вас не составит труда реализовать подключение к Web Merchant Interface на другом серверном языке, который вы знаете.