Когда вызывается подпрограмма кредитов buy()
, Facebook отображает эту ошибку, There Was a Problem Processing Your Payment.
и диалоговое окно оплаты не отображается.
Я проверил следующее, но не могу найти проблему:
- Установите URL-адрес обратного вызова в настройках кредитов: http://sharp-journey-4179.herokuapp.com/callback.jsp
- Назначил себя тестером кредитов.
- Проверено, что процедуру обратного вызова можно вызвать из инструмента Facebook Object Debugger.
- Урезан callback.jsp, чтобы просто возвращать готовый ответ на POST-запрос payment_get_items.
- Маршрутизатор Heroku получает POST со статусом 200, но вывод console.log в callback.jsp не получен в журналах Heroku.
- Ответ на 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 указано, что в ответ на запрос на покупку выдается запрос сервера приложений. Нужно ли мне реализовать сервлет для обработки POST и передачи его в мою процедуру обратного вызова? Как Facebook использует название процедуры обратного вызова, callback.jsp
? Нужно ли называть сервлет обратным вызовом?
Это фрагмент моей клиентской процедуры 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>