Интеграция кредитов Facebook с AS3-SDK
Я пытаюсь интегрировать кредиты Facebook как способ оплаты, используя as3-sdk. Мне удалось заставить работать "earn_credits" и "buy_credits". Однако третья и самая важная опция, "buy_item", не показывает диалог оплаты. Почему-то причиной проблемы является подключение к callback.php. Примечание. Я ввел URL-адрес обратного вызова в настройках своих приложений, поэтому не забыл об этом. Я использую пример php-файла из документации разработчика Facebook.
Это мой код as3.
public static function buyItem ():void
{
var theAction:String = "buy_item";
var order_info:Object = { "item_id":"1a" };
var jOrder:String = JSON.encode(order_info);
var data:Object = {
action:theAction,
order_info:jOrder,
dev_purchase_params: {"oscif":true}
};
Facebook.ui("pay", data, purchaseCallback);
}
Я думаю, что кодировка JSON может быть проблемой, но я не уверен.
Я использую пример php-файла из документации разработчика Facebook (отрывок):
<?php
$app_secret = '***********************';
// Validate request is from Facebook and parse contents for use.
$request = parse_signed_request($_POST['signed_request'], $app_secret);
// Get request type.
// Two types:
// 1. payments_get_items.
// 2. payments_status_update.
$request_type = $_POST['method'];
// Setup response.
$response = '';
if ($request_type == 'payments_get_items') {
// Get order info from Pay Dialog's order_info.
// Assumes order_info is a JSON encoded string.
$order_info = json_decode($request['credits']['order_info'], true);
// Get item id.
$item_id = $order_info['item_id'];
// Simulutates item lookup based on Pay Dialog's order_info.
if ($item_id == '1a') {
$item = array(
'title' => '100 some game cash',
'description' => 'Spend cash in some game.',
// Price must be denominated in credits.
'price' => 1,
'image_url' => '**********************/banner1.jpg',
);
// Construct response.
$response = array(
'content' => array(
0 => $item,
),
'method' => $request_type,
);
// Response must be JSON encoded.
$response = json_encode($response);
}
Любая помощь, очень ценится.
2 ответа
Итак, я не могу подтвердить, что это работает, но согласно этому форуму, это делает:
var title:String = "TITLE FOO";
var desc:String = "FOO";
var price:String = "200";
var img_url:String = [some image url];
var product_url:String = [some product url];
// create order info object
var order_info:Object = {
"title":title,
"description":desc,
"price":price,
"image_url":img_url,
"product_url":product_url
};
// calling the API ...
var obj:Object = {
method: 'pay.prompt',
order_info: order_info,
purchase_type: 'item',
credits_purchase: false
};
Facebook.ui('pay', obj, callbackFunction);
Я вижу, что этот пример немного отличается от вашего на стороне AS3, так что, надеюсь, этот nfo поможет вам решить вашу проблему. Я понимаю, что это не лучший способ отвечать на вопросы, но я вижу, что через пару дней здесь никто не ответил вам, поэтому я подумал, что что-то может помочь на этом этапе.:)
Спасибо @Ascension Systems!
Это сработало хорошо и намного лучше, чем создание всплывающего окна через HTML, использование navigateToURL и т. Д...
Одно предостережение, которое заставило ваше решение изначально не работать на меня:
Если вы полагаетесь на образец callback.php, предоставленный Facebook (в конце этой страницы: http://developers.facebook.com/docs/credits/callback/), то вам нужно добавить этот тег в ваш объект order_info:
var item_id:String = "1a";
var order_info:Object = {
"title":title,
"description":desc,
"price":price,
"image_url":img_url,
"product_url":product_url,
"item_id":item_id
};
Без определения item_id оператор if в callback.php Facebook ( if ($item_id == '1a') ...) завершится ошибкой, и вы получите неприятное окно: "Приложение не отвечает" Приложение, которое вы используете, не является отвечаю. Пожалуйста, попробуйте позже. "