【问题标题】:Integrate Facebook Credits with AS3-SDK将 Facebook Credits 与 AS3-SDK 集成
【发布时间】:2012-04-07 20:21:20
【问题描述】:

我正在尝试使用 as3-sdk 将 Facebook Credits 集成为一种支付方式。我设法让“earn_credits”和“buy_credits”正常工作。然而,第三个也是最重要的选项“buy_item”并没有出现在支付对话框中。不知何故,与 callback.php 的连接似乎是问题的原因。注意:我已经在我的应用程序设置中输入了回调 URL,所以我没有忘记。我使用 Facebook 开发者文档中的示例 php 文件。

这是我的 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编码可能是问题,但我不确定。

我使用 Facebook 开发者文档中的示例 php 文件(摘录):

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

任何帮助,非常感谢。

【问题讨论】:

    标签: actionscript-3 flash facebook-graph-api facebook-php-sdk facebook-as3-api


    【解决方案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 可以帮助您解决问题。我意识到这不是回答问题的最佳方式,但我可以在这里看到几天后,没有人回答你,所以我认为此时任何事情都可以提供帮助。 :)

    【讨论】:

    • 非常感谢!我注意到,您没有使用 json 编码的字符串。但是来自 fb 开发者页面的 credits callback.php 期望 order_info 是一个 json 编码的字符串。你知道没有 json 代码的 callback.php 示例吗?
    • 很抱歉,我将不得不进一步研究它......就像我说这不是我的解决方案,我什至没有亲自尝试过。
    【解决方案2】:

    谢谢@Ascension Systems!

    这效果很好,比通过 html 创建弹出窗口和使用 navigateToURL 等要好得多...

    但有一个警告,导致您的解决方案最初不适用于我:

    如果您依赖 Facebook 提供的 callback.php 示例(在本页末尾: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 的 callback.php 中的 if 语句 ( if ($item_id == '1a') ... ) 将失败,您会看到一个令人不快的窗口:“App Not Responding 您正在使用的应用程序没有响应。请稍后再试。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-09
      • 2014-08-27
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      • 2023-03-18
      • 1970-01-01
      • 2012-01-25
      相关资源
      最近更新 更多