2012-06-18 3 views
0

Когда вызывается подзаголовок buy(), Facebook отображает эту ошибку, There Was a Problem Processing Your Payment. и Диалог платежей не отображается.Facebook вызывает callback-процедуру, которая не вызывается

Я проверил следующее, но я не могу найти проблему:

  1. Set обратного вызова URL в настройках кредитов: http://sharp-journey-4179.herokuapp.com/callback.jsp
  2. Установить себя в качестве тестера Credits.
  3. Проверено, что процедура обратного вызова может быть достигнута с помощью средства отладки объектов Facebook.
  4. Перенесенный вызов callback.jsp, чтобы просто вернуть сохраненный ответ на POST-платеж payments_get_items.
  5. Маршрутизатор Heroku получает POST со статусом 200, но вывод console.log в callback.jsp не получен в журналах Heroku.
  6. Ответ на payments_get_items является:

"{\" содержание \ ": [{\" название \ ": \" Мое приложение \ "\ "Описание \": \" Это мое приложение . \ ", \" 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 утверждает, что приложение Запрос сервера выдается в ответ на запрос на покупку. Нужно ли мне реализовать сервлет для обработки POST и передать его в мою процедуру обратного вызова? Как Facebook использует имя процедуры обратного вызова, callback.jsp? Нужен ли сервлет для вызова Callback?

Это snipit моего клиента 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> 

ответ

0

мне нужно реализовать сервлет для обработки кредитов обратного вызова ПОСТЫ, полученные от facebook. Я создал Servlet в моей программе Main.java в каталоге запуска. В Main.java я добавил контекст addServletMapping, чтобы отправить все запросы POST обратного вызова на Servlet. Первый атрибут context.addServletMapping соответствует тексту после последнего деления в URL-адресе обратного вызова Credits, введенном в настройках Credits для вашего приложения. Таким образом, сервлет не нужно называть Callback.

Таким образом, Facebook отправляет обратные вызовы обратного вызова к URL-адресу обратного вызова через HTTP. В качестве разработчика вам необходимо создать сервлет и выполнить одно из следующих действий:

  1. Откажитесь от POSTS к сервлету и выполните обработку в сервлете на Java. URL обратного вызова Credits - это уникальная текстовая строка, добавленная к URL вашего приложения.
  2. Создайте файл web.xml, в котором вы сопоставляете Servlet с файлом callback.jsp. Обратный URL-адрес Credits - это файл callback.jsp, добавленный к вашему URL-адресу.

 Смежные вопросы

  • Нет связанных вопросов^_^