0

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

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

  1. 在 Credits Settings 中设置回调 url: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\":\"我的应用\",\"description\":\"这是我的应用。\",\"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>
4

1 回答 1

0

我需要实现一个 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 文件。
于 2012-06-28T23:04:04.453 回答