Facebook 信用回调例程未调用

Facebook credits callback routine not invoked

本文关键字:调用 例程 回调 Facebook      更新时间:2023-09-26

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

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

  1. 在积分设置中设置回调网址:http://sharp-journey-4179.herokuapp.com/callback.jsp
  2. 将自己设置为学分测试员。
  3. 已验证是否可以从 Facebook 对象调试器工具访问回调例程。
  4. Peared 回调.jsp简单地将预制响应返回给 payments_get_items POST。
  5. Heroku
  6. 路由器收到状态为 200 的 POST,但控制台.log回调输出.jsp在 Heroku 日志中未收到。
  7. 对payments_get_items的回应是:
"{''"内容":

[{''"标题":''"我的应用 ''",''"描述":''"这是我的应用 .''",''"价格":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 信用文档指出,应用程序服务器请求是为了响应购买请求而发出的。 我是否需要实现一个 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);
}

这是我的回调.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>

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

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

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