0

クレジットbuy()ルーチンが呼び出されると、Facebook はこのエラーを表示There Was a Problem Processing Your Payment.し、支払いダイアログは表示されません。

以下を確認しましたが、問題が見つかりません。

  1. クレジット設定でコールバック URL を設定します: http://sharp-journey-4179.herokuapp.com/callback.jsp
  2. 自分をクレジット テスターに​​設定します。
  3. Facebook Object Debugger ツールからコールバック ルーチンにアクセスできることを確認しました。
  4. payment_get_items POST に対して定型応答を単純に返すように、callback.jsp を絞り込みました。
  5. Heroku ルーターはステータス 200 の POST を受信しますが、callback.jsp の console.log 出力は Heroku ログで受信されません。
  6. payment_get_items への応答は次のとおりです。

"{\"content\":[{\"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 \"}],\"メソッド\":\"payments_get_items\"}"

Facebook クレジットのドキュメントには、購入リクエストに応じてアプリケーション サーバー リクエストが発行されることが記載されています。POST を処理してコールバック ルーチンに渡すには、サーブレットを実装する必要がありますか? Facebook は Callback ルーチンの名前をどのように使用していcallback.jspますか? サーブレットに 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

Facebookから受け取ったクレジットコールバックPOSTSを処理するサーブレットを実装する必要がありました。起動ディレクトリのMain.javaルーチンにサーブレットを作成しました。Main.javaで、コンテキストaddServletMappingを追加して、すべてのコールバックPOST要求をサーブレットに送信しました。context.addServletMappingの最初のアグリメントは、アプリのクレジット設定に入力されたクレジットコールバックURLの最後の区切り文字の後のテキストと一致します。したがって、サーブレットにCallbackという名前を付ける必要はありません。

要約すると、FacebookはクレジットコールバックPOSTSをHTTP経由でコールバックURLに送信します。開発者は、サーブレットを作成し、次のいずれかを実行する必要があります。

  1. コールバックPOSTSをサーブレットにマップし、Javaのサーブレットで処理を実行します。Credits Callback URLは、アプリのURLに追加される一意のテキスト文字列です。
  2. サーブレットをcallback.jspファイルにマップするweb.xmlファイルを作成します。Credits Callback URLは、URLに追加されたcallback.jspファイルです。
于 2012-06-28T23:04:04.453 に答える