1

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

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

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

Любая помощь, действительно ценится.

ответ

1

Хорошо, так что я не могу подтвердить, что это работает, но according to this forum, он делает:

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

+0

Большое спасибо! Я заметил, что вы не используете кодированную json строку. Но кредиты callback.php с страницы разработчиков fb ожидают, что order_info будет кодировкой json. вы знаете пример callback.php aw/o json code? – TicketToRide

+0

Прошу прощения, мне нужно будет изучить его больше ... как я уже сказал, это не мое решение, и я даже не пробовал это себя. –

0

Спасибо @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 определена, если заявление в Facebook llback.php (if ($ item_id == '1a') ...) не удастся, и вы получите неприятное окно: «Приложение не отвечает Приложение, которое вы используете, не отвечает. Повторите попытку позже. »