Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.11.2011, 16:34
mono.solar вне форума Посмотреть профиль Отправить личное сообщение для mono.solar Найти все сообщения от mono.solar
  № 1  
Ответить с цитированием
mono.solar

Регистрация: May 2011
Сообщений: 24
По умолчанию Payment Process в Одноклассниках

Здравствуйте.
Ставлю функцию монетизации на 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>
, но как преступить к этим действиям, если колбэк платежной формы не срабатывает?

Вопрос: собственно предыдущий, или какова полная схема событийных метаморфоз этого нелегкого алгоритма?

Спасибо.

Старый 17.11.2011, 17:23
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 2  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: 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>

Старый 18.11.2011, 12:06
mono.solar вне форума Посмотреть профиль Отправить личное сообщение для mono.solar Найти все сообщения от mono.solar
  № 3  
Ответить с цитированием
mono.solar

Регистрация: May 2011
Сообщений: 24
Благодарю что откликнулся, mikhailk
Скрипт я видел, и насколько я разбираюсь в РНР, $_REQUEST["application_key"] - это уже пришедшие данные, но как они приходят ? Что надо прослушивать ?

>>> их сервер дергает ваш сервер
Каким образом?

Добавлено через 1 час 54 минуты
и продолжение темы: как прослушать приходящий на сервер callback.payment?

Старый 18.11.2011, 16:26
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 4  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Подключаетесь как iframe?

У меня получилось так:

1. Пользователь внутри приложения нажимает кнопку "купить то-то за столько-то ОК". Это вызывает вызов штатного интерфейса ОК с формой платежей изнутри флеша:

Код AS3:
ExternalInterface.call('FAPI.UI.showPayment', productName, 'Product Desctiption', varNum, productPrice, null, null, 'ok', 'true');

2. Открывается штатное окно платежей ОК

3. Пользователь подтверждает совершение платежа

4. Сервер ОК дергает наш сервер приложения по тому адреса коллбэк-скрипта, который указан в профиле приложения (пример коллбэк-скрипта я привел выше).

5. Этот скрипт подтверждает серверу ОК легитимность платежа.

6. Сервер ОК передает в клиент событие showPayment, которые я ловлю на уровне js-обвязки (js-функция paymentConfirm обеспечивает передачу данных внутрь флешки через ExternalInterface):

Код:
function API_callback(method, result, data){
	if (method=="showPayment") paymentConfirm(data);
}
Имя функции API_callback - это зарезервированное имя, на которое от сервера ОК приходит событие.

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:06.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 23:06.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.