![]() |
|
||||||||||
|
|||||
|
Регистрация: May 2011
Сообщений: 24
|
Здравствуйте.
Ставлю функцию монетизации на Flash-приложение, и никак не могу одолеть алгоритм проведения платежа: - Ставлю слушатель на стандартную утилиту Forticom: ForticomAPI.addEventListener(ApiCallbackEvent.CALL_BACK, onPaymentResponse); - Вызываю метод Forticom: ForticomAPI.showPayment('Product Name', 'Product Desctiption', 'IDDQD', 5, null, null, 'ok', 'true'); Появляется платежная форма, со всеми переданными параметрами. Нажимаю "Купить" - в мониторе запросов "Bad Request", редирект на вход в одноклассники в приложении. В колбэке onPaymentResponse(e:ApiCallbackEvent) стоит алерт и запрос на игровой сервер. Я понимаю, что ещё необходимо отправить на Одноклассники (?) callbacks.payment , затем передать опять же на одноклассники <?xml version="1.0" encoding="UTF-8"?> <callbacks_payment_response xmlns="http://api.forticom.com/1.0/"> true </callbacks_payment_response> , но как преступить к этим действиям, если колбэк платежной формы не срабатывает? Вопрос: собственно предыдущий, или какова полная схема событийных метаморфоз этого нелегкого алгоритма? Спасибо. |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Вот пример работающего callback-скрипта на PHP для ОК (где-то у них на форумах взял). Наш серверный программер сделал на его основе и все работает нормально. После того, как пользователь выбрал платеж в штатной форме ОК, их сервер дергает ваш сервер и затем уже возникает их событие, которое нужно отловить и передать в свою флешку (если подключение как iframe).
<?php
header('Content-Type: application/xml; charset=utf-8');
error_reporting(E_ERROR);
//параметры приложения
$appKey="...";
$application_secret_key = "...";
//читаем переданные параметры
$method = $_REQUEST["method"];
$application_key = $_REQUEST["application_key"];
$call_id = $_REQUEST["call_id"];
$sig = $_REQUEST["sig"];
$uid = $_REQUEST["uid"];
$amount = $_REQUEST["amount"];
$transaction_time = $_REQUEST["transaction_time"];
$product_code = $_REQUEST["product_code"];
$transaction_id = $_REQUEST["transaction_id"];
//проверяем метод
if($method != "callbacks.payment") {
header('invocation-error: 3');
print('<?xml version="1.0" encoding="UTF-8"?>');
?>
<ns2:error_response xmlns:ns2='http://api.forticom.com/1.0/'>
<error_code>3</error_code>
<error_msg>Method does not exist.</error_msg>
</ns2:error_response>
<?php
die();
}
//проверяем appKey
if($appKey != $application_key) {
header('invocation-error: 101');
print('<?xml version="1.0" encoding="UTF-8"?>');
?>
<ns2:error_response xmlns:ns2='http://api.forticom.com/1.0/'>
<error_code>101</error_code>
<error_msg>Parameter application_key not specified or invalid</error_msg>
</ns2:error_response>
<?php
die();
}
//собираем переданные параметры без учета sig
$i = 0;
$params = array();
foreach ($_GET as $key => $value) {
if($key != "sig") {
$params[$i] = "$key=$value";
$i++;
}
}
sort($params);
$params = join('', $params);
$mySig = md5($params . $application_secret_key);
//проверяем подпись
if($sig != $mySig) {
header('invocation-error: 104');
print('<?xml version="1.0" encoding="UTF-8"?>');
?>
<ns2:error_response xmlns:ns2='http://api.forticom.com/1.0/'>
<error_code>104</error_code>
<error_msg>Invalid signature.</error_msg>
</ns2:error_response>
<?php
die();
}
//TODO: 1) Transaction ID is unique and Application/Game server must ignore transactions with duplicated ID.
//TODO: It must return positive result, if transaction was processed successfully earlier.
//TODO: 2) Cообщаем серверу о поступившем платеже
//TODO: 3) Cохраняем в БД успешную транзакцию
//отдаем успешный статус
print('<?xml version="1.0" encoding="UTF-8"?>');
?>
<callbacks_payment_response xmlns="http://api.forticom.com/1.0/">true</callbacks_payment_response>
|
|
|||||
|
Регистрация: May 2011
Сообщений: 24
|
Благодарю что откликнулся, mikhailk
Скрипт я видел, и насколько я разбираюсь в РНР, $_REQUEST["application_key"] - это уже пришедшие данные, но как они приходят ? Что надо прослушивать ? >>> их сервер дергает ваш сервер Каким образом? Добавлено через 1 час 54 минуты и продолжение темы: как прослушать приходящий на сервер callback.payment? |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Подключаетесь как iframe?
У меня получилось так: 1. Пользователь внутри приложения нажимает кнопку "купить то-то за столько-то ОК". Это вызывает вызов штатного интерфейса ОК с формой платежей изнутри флеша: ExternalInterface.call('FAPI.UI.showPayment', productName, 'Product Desctiption', varNum, productPrice, null, null, 'ok', 'true'); 2. Открывается штатное окно платежей ОК 3. Пользователь подтверждает совершение платежа 4. Сервер ОК дергает наш сервер приложения по тому адреса коллбэк-скрипта, который указан в профиле приложения (пример коллбэк-скрипта я привел выше). 5. Этот скрипт подтверждает серверу ОК легитимность платежа. 6. Сервер ОК передает в клиент событие showPayment, которые я ловлю на уровне js-обвязки (js-функция paymentConfirm обеспечивает передачу данных внутрь флешки через ExternalInterface): Имя функции API_callback - это зарезервированное имя, на которое от сервера ОК приходит событие. |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:15. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|