【问题标题】:Facebook credits callback routine not invoked未调用 Facebook 积分回调例程
【发布时间】:2012-06-18 22:44:26
【问题描述】:

调用 credits buy() 例程时,Facebook 会显示此错误 There Was a Problem Processing Your Payment.,并且不会显示付款对话框。

我已经验证了以下,但我找不到问题:

  1. 在信用设置中设置回调地址:http://sharp-journey-4179.herokuapp.com/callback.jsp
  2. 将自己设置为信用测试员。
  3. 已验证可以从 Facebook 对象调试器工具访问回调例程。
  4. 向下查询 callback.jsp 以简单地将预设响应返回到 payment_get_items POST。
  5. Heroku 路由器收到状态为 200 的 POST,但在 Heroku 日志中未收到 callback.jsp 中的 console.log 输出。
  6. 对 payment_get_items 的响应是:

"{\"content\":[{\"title\":\"我的应用 \",\"说明\":\"这是我的应用 .\",\"price\":2,\"product_url\":\"http://www.facebook.com/images/gifts/21.png\",\"image_url\":\"http: //www.facebook.com/images/gifts/21.png\"}],\"方法\":\"payments_get_items\"}"

Facebook Credit 文档指出应用服务器请求是为响应购买请求而发出的。我是否需要实现一个 Servlet 来处理 POST 并将其传递给我的回调例程? Facebook 如何使用回调例程的名称callback.jsp? Servlet 是否需要命名为 Callback?

这是我的客户buy() 例程的片段:

// The dialog only opens if you've implemented the
// Credits Callback payments_get_items.
function buy() {
  var obj = {
    method: 'pay',
    action: 'buy_item',
    // You can pass any string, but your payments_get_items must
    // be able to process and respond to this data.
    order_info: {'item_id': '1a1'},
    dev_purchase_params: {'oscif': true}
  };

  FB.ui(obj, js_callback);
}

这是我的 callback.jsp 代码:

<script type="text/javascript">

var secret = 'xxxxxxxxxxxxxxxxxxxxx';

console.log("In fnf callback.jsp");

//$request_type = $_POST['method'];
// Setup response.
var return_data = '';

var item = {
  title: 'My App',
  description: 'This is my app.',
  price: 2,
  product_url: 'http:\/\/www.facebook.com\/images\/gifts\/21.png',
  image_url: 'http:\/\/www.facebook.com\/images\/gifts\/21.png'
};

var content_array = new Array;
content_array[0] = item;

// Construct response.
var response = {
   content: content_array,
   method: 'payments_get_items'
};

// Response must be JSON encoded.
return_data = JSON.stringify(response);

// Send response.
alert(return_data);

</script>

【问题讨论】:

    标签: java javascript facebook-credits


    【解决方案1】:

    我需要实现一个 Servlet 来处理从 Facebook 收到的积分回调 POSTS。我在启动目录的 Main.java 例程中创建了一个 Servlet。在 Main.java 中,我添加了一个上下文 addServletMapping 来将所有回调 POST 请求发送到 Servlet。 context.addServletMapping 的第一个 agument 匹配在您的应用的 Credits Settings 中输入的 Credits Callback URL 中最后一个分隔符之后的文本。所以,servlet 不需要命名为 Callback。

    总之,Facebook 通过 HTTP 将积分回调 POSTS 发送到回调 URL。作为开发人员,您需要创建一个 Servlet 并执行以下操作之一:

    1. 将回调 POSTS 映射到 Servlet 并在 Java 中的 Servlet 中进行处理。 Credits 回调 URL 是附加到您的应用程序 URL 的唯一文本字符串。
    2. 创建一个 web.xml 文件,在其中将 Servlet 映射到 callback.jsp 文件。 Credits Callback URL 是附加到您的 URL 的 callback.jsp 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      • 2016-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多