PDA

Просмотр полной версии : WebMoney Merchant Interface на flash


iseller
25.11.2010, 06:08
Нужно вставить во флешку мерчант интерфейс вебмани. Webmoney.ru предлагает простой пример организации приема платежа через html:

<!-- pay.html -->
<html>
<head>
<title>Pay</title>
</head>
<body>

<form id=pay name=pay method="POST" action="https://merchant.webmoney.ru/lmi/payment.asp">

<p>пример платежа через сервис Web Merchant Interface</p>
<p>заплатить 1 WMZ...</p>

<p>
<input type="hidden" name="LMI_PAYMENT_AMOUNT" value="1.0">
<input type="hidden" name="LMI_PAYMENT_DESC" value="тестовый платеж">
<input type="hidden" name="LMI_PAYMENT_NO" value="1">
<input type="hidden" name="LMI_PAYEE_PURSE" value="Z145179295679">
<input type="hidden" name="LMI_SIM_MODE" value="0">
</p>
<p>
<input type="submit" value="submit">
</p>
</form>

</body>
</html>


Нужно сделать аналогичное на AS2, чтобы кнопка «оплатить» находилась во флеш-клипе.

mooncar
25.11.2010, 10:08
Наверное, вам нужно не просто чтобы кнопка "находилась" во флеше, но и платеж обеспечивался при ее нажатии? Но приведенный код во флеш вы не вставите.
Для выполнения того, что делает форма, попробуйте использовать класс LoadVars и его метод sendAndLoad. См. пример в хелпе.
Второе.
По приведенному вами коду в браузер после нажатия кнопки загружается код, которые выдает payment.asp, то есть обрабатывающий скрипт. Нужен ли его вывод или нет, неизвестно, смотрите сами. Ведь если будете использовать sendAndLoad скрипт отработается, но перезагрузки страницы не произойдет. Если там есть какая-то важная инфа, необходимая для вывода юзеру, нужно получить вывод скрипта в том же sendAndLoad, распарсить и отрисовать во флешке.

iseller
25.11.2010, 12:25
Благодарю за ответ
Мне нужно, чтобы при нажатии кнопки выполнялось это действие:

<form id=pay name=pay method="POST" action="https://merchant.webmoney.ru/lmi/payment.asp">

И соответственно отправлялись эти переменные:

<input type="hidden" name="LMI_PAYMENT_AMOUNT" value="1.0">
<input type="hidden" name="LMI_PAYMENT_DESC" value="тестовый платеж">
<input type="hidden" name="LMI_PAYMENT_NO" value="1">
<input type="hidden" name="LMI_PAYEE_PURSE" value="Z145179295679">
<input type="hidden" name="LMI_SIM_MODE" value="0">

Возвращать во флеш никакие данные не нужно.

mooncar
25.11.2010, 12:38
Я же написал - используйте метод sendAndLoad. HTML код во флеше не будет работать.

Гляньте синтаксис в хелпе.
Вкратце - создаете экземпляр LoadVars, задаете ему переменные, которые есть в форме (LMI_PAYMENT_AMOUNT и т.д, то что name) и их значения (то, что в value), вызываете по нажатию произвольной кнопки скрипт payment.asp с помощью sendAndLoad методом POST.
Это сложнее описать, проще сделать - работы на 5 минут.

Если что-то тут и не получится - это по причине необходимости использования https, а не http.
Для этого надо почитать про метод allowInsecureDomain. Тут я вам не смогу подсказать, не использовал.

Добавлено через 9 минут
var slv:LoadVars = new LoadVars();
slv.LMI_PAYMENT_AMOUNT = '1.0';
slv.LMI_PAYMENT_DESC = 'тестовый платеж';
slv.LMI_PAYMENT_NO = '1';
slv.LMI_PAYEE_PURSE = 'Z145179295679';
slv.LMI_SIM_MODE = '0';

var rlv:LoadVars = new LoadVars();
rlv.onLoad = function (suc:Boolean) //для получения ответа, что соединение со скриптом состоялось
{
if (suc)
{
trace('отправка удалась');
}
};

btn_send.onRelease = function()
{
slv.sendAndLoad('https://merchant.webmoney.ru/lmi/payment.asp', rlv, 'POST');
};


Кнопочку нарисуйте и задайте ей на сцене имя btn_send.

iseller
25.11.2010, 13:05
Пишет, что отправляет)
И еще вопрос - что где дописать, чтобы флеш сначала открывал браузер и в нем уже отправлял эти запросы на сервер?

mooncar
25.11.2010, 13:18
Пишет, что отправляет)
И еще вопрос - что где дописать, чтобы флеш сначала открывал браузер и в нем уже отправлял эти запросы на сервер?
В контексте начала темы "Нужно вставить во флешку мерчант интерфейс вебмани" вопрос непонятен.
Зачем вам открывание браузера, если вы хотите все из флеша делать?

Если вы хотите, чтобы открывалась ваша HTML страничка с этой формой, просто используйте getURL
btn_send.onRelease = function()
{
getURL('pay.html', '_blank');
};

iseller
25.11.2010, 13:57
Да, запутал я Вас..

На сайте есть флешка, где посетитель выбирает что оплачивать, за сколько, итого после выбора им товара(ов) в флешке остаются переменные – цена, название товара. После этого переменные подставляю в:

<input type="hidden" name="LMI_PAYMENT_AMOUNT" value="1.0">
<input type="hidden" name="LMI_PAYMENT_DESC" value="тестовый платеж">
<input type="hidden" name="LMI_PAYMENT_NO" value="1">
<input type="hidden" name="LMI_PAYEE_PURSE" value="Z145179295679">
<input type="hidden" name="LMI_SIM_MODE" value="0">

И отправяю их соответственно на

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

После этого браузер запрашивает авторизацию кошелька -> авторизация -> оплата товара с параметрами, которые были переданы.

mooncar
25.11.2010, 15:12
Ну напишите php-скрипт, вызов которого происходил бы из флешки с открытием новой страницы и получением из нее введенных данных.
Данные передать ему можно с помощью GET-строки:

LMI_PAYMENT_AMOUNT = value1;
LMI_PAYMENT_DESC = value2;
...
btn_send.onRelease = function()
{
getURL('pay.php?LMI_PAYMENT_AMOUNT=' + value1 + '&LMI_PAYMENT_DESC=' + value2.... , '_blank');
};
В pay.php получите эти данные и пусть они будут сразу стоять в скрытых полях выведенной формы.
Кусок pay.php для такого решения:
....
<form id=pay name=pay method="POST" action="https://merchant.webmoney.ru/lmi/payment.asp">
....
<input type="hidden" name="LMI_PAYMENT_AMOUNT" value="<?php echo $_GET['LMI_PAYMENT_AMOUNT'] ?>" />
<input type="hidden" name="LMI_PAYMENT_DESC" value="<?php echo $_GET['LMI_PAYMENT_DESC'] ?>" />
....
<input type="submit" value="submit" />
</form>
.....

То есть юзеру нужно сперва кликнуть кнопку во флеше для подтверждения выбора, а потом, после загрузки страницы, сгенерированной pay.php, останется только кликнуть кнопку на этой странице уже для отправки данных к payment.asp.

iseller
25.11.2010, 15:29
Ясно, так еще сложнее) Думал на флеше это все будет реализовать проще..
Буду искать обходные пути.
Благодарю за ответы!

mooncar
25.11.2010, 15:34
Я вам указал обходной путь.
Превращаете pay.html в pay.php и вызываете его по клику из флеша с передачей данных и автоматической их подстановкой в скрытые поля формы.

Добавлено через 3 минуты
Ха, попробуйте более простое решение:
var slv:LoadVars = new LoadVars();
slv.LMI_PAYMENT_AMOUNT = '1.0';
slv.LMI_PAYMENT_DESC = 'тестовый платеж';
slv.LMI_PAYMENT_NO = '1';
slv.LMI_PAYEE_PURSE = 'Z145179295679';
slv.LMI_SIM_MODE = '0';


btn_send.onRelease = function()
{
slv.send('https://merchant.webmoney.ru/lmi/payment.asp', '_blank', 'POST');
};

send, в отличии от sendAndLoad, загрузит страницу.

Только пробуйте это из опубликованной на странице флешки, а не просто из запущенной swf!
Потому что
The Flash test environment always uses the GET method. To test using the POST method, be sure you are attempting to use it from within a browser.

iseller
25.11.2010, 15:41
СПС
последнее - это то, что нужно)
правда, пока вебмани ругается, не хочет принимать, но разберемся)
позже отпишусь

mooncar
25.11.2010, 15:50
Тестите из браузера, не забудьте, что я писал в конце.
И на хостинг загрузите.

iseller
25.11.2010, 16:38
ура!

var slv:LoadVars = new LoadVars();
slv.LMI_PAYMENT_AMOUNT = '1.0';
slv.LMI_PAYMENT_DESC = 'тестовый платеж';
slv.LMI_PAYMENT_NO = '1';
slv.LMI_PAYEE_PURSE = 'Z145179295679';
slv.LMI_SIM_MODE = '0';


btn_send.onRelease = function()
{
slv.send('https://merchant.webmoney.ru/lmi/payment.asp', '_blank', 'POST');
};

Это работает после размещения на странице и настройки интерфейса.
Огромное человеческое СПАСИБО.

скиньте мне в приват номер WMR, или если нет, то свой мобильный(и название оператора) - перекину чистосимволическую "спасибку"