Интеграция Facebook Credits с AS3-SDK

Я пытаюсь интегрировать Facebook Credits в качестве способа оплаты, используя as3-sdk. Мне удалось заставить работать «earn_credits» и «buy_credits». Однако третья и самая важная опция «buy_item» не отображает диалоговое окно оплаты. Каким-то образом соединение с callback.php кажется причиной проблемы. Примечание. Я ввел URL-адрес обратного вызова в настройках своего приложения, поэтому не забыл об этом. Я использую пример файла php из документации Facebook Developer.

Это мой код 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 Developer (отрывок):

<?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);
  }

Любая помощь очень ценится.


person TicketToRide    schedule 07.04.2012    source источник


Ответы (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, поэтому, надеюсь, эта информация поможет вам решить вашу проблему. Я понимаю, что это не лучший способ отвечать на вопросы, но я вижу, что через пару дней здесь вам никто не ответил, поэтому я подумал, что на данный момент что-нибудь может помочь. :)

person Community    schedule 08.04.2012
comment
Большое спасибо! Я заметил, что вы не используете строку в кодировке json. Но кредиты callback.php со страницы разработчиков fb ожидают, что order_info будет строкой в ​​кодировке json. Знаете ли вы пример callback.php без кода json? - person TicketToRide; 08.04.2012
comment
Мне жаль, что мне придется изучить это подробнее ... как я сказал, это не мое решение, и я даже не пробовал это сам. - person ; 08.04.2012

Спасибо @Ascension Systems!

Это сработало хорошо и намного лучше, чем создание всплывающего окна через html и использование навигации по URL-адресу и т. Д.

Однако одно предостережение, из-за которого ваше решение не сработало для меня изначально:

Если вы полагаетесь на образец 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') ... ) завершится ошибкой, и вы получите неприятное окно: «Приложение не отвечает. Приложение, которое вы используете, не отвечает. Повторите попытку позже".

person Pascal S.    schedule 05.08.2012