支払いLite

支払いLiteは、ゲームのアプリ内購入を定義し管理する新しい方法です。この新機能により、サーバーレス決済ソリューションを開発することができます。

独自のサーバーを持っている場合は、支払いを受ける手順を参考にして、独自の支払い製品を定義しホスティングすることができます。

概要

支払いLiteは、ゲームのアプリ内購入を行う新しい方法です。productsがアプリダッシュボードでID、名前、説明、価格、通貨、画像を直接割り当てます。その後product IDが、通常の支払いフローで要求されるOG Object URLの代わりにJavaScript呼び出しに渡され、支払いフローを開始します。こうすることで、サーバーへのプッシュを行う必要がなくなり、製品の作成と変更のフローがスムーズになります。

製品を作成する

製品を作成するには、アプリダッシュボードの[キャンバス支払い]に移動し、[製品]サブセクションを表示します。

製品を作成するには、右上の[新規製品を作成]ボタンをクリックします。製品情報ダイアログで、Product IDTitleDescriptionPriceを入力し、ドロップダウンメニューから通貨を選択して、製品の50 x 50ピクセルの画像をアップロードします。

支払いLiteでは、1つの製品の支払いダイアログにのみ対応しています。ゲーム内通貨の販売を検討している場合、製品は通貨バンドルを反映している必要があります。

製品リストAPI

ゲーム内で販売する製品を定義したら、ゲーム内ストアを構築します。こうすることで、プレイヤーは興味のある製品を選択できるようになります。販売予定の製品の情報が正確であるようにするため、製品リストAPIを使用して製品情報を収集することができます。製品のリストを取得するには、以下のエンドポイントを呼び出します。

GET https://graph.facebook.com/APP_ID/products

パラメーターは以下のとおりです。

パラメーター名 必須

product_ids

文字列

アプリの製品IDのコンマ区切りのリスト

いいえ

呼び出しと応答の例

FB.api(
  '/app/products', 
  'get', 
  function(response) {
    console.log(response);
  }
);
FB.API(
  "app/products",
  HttpMethod.GET,
  this.productCallback // callback that receives a IGraphResult
);
{
  "data": [
    {
      "title": "100 coins lite package",
      "product_id": "payments_lite_test_01",
      "product_type": "managed",
      "description": "Package of 100 coins to test Payments Lite",
      "price": "$1.00",
      "price_amount_cents": 100,
      "price_currency_code": "USD"
    },
    {
      "title": "Friend Smash!",
      "product_id": "480369938658210_premium",
      "product_type": "managed",
      "description": "One time purchase to play game",
      "price": "$0.01",
      "price_amount_cents": 1,
      "price_currency_code": "USD"
    }
  ],
  "paging": {
    "cursors": {
      "before": "QVFIUlg1cXRqcnVad05taFRVRlZAZAU2tQdWNSd0FKRDh1TTJMdGd3azVTZA3ZAZAOFgzcXZAaZAlQ1N1VMMmRmZAXpUNG9KX2tsSWhYVlB6Yko2cEotUXZAiRGgzQkFKc0lJLUQzVlJxbHVPampZAS19SWEQ4",
      "after": "QVFIUmRiSGltU1BKQnRqWTRxNkd1WktUTHFKMmxvaEwtV2dSYUtpeDJxQnN0Ri1mZAnF0TG1Ub3oyWnphSExqZAU5qQzNNZAmFrejVnSTlaRVVGMXdSSlNsNE13"
    }
  }
}

25を超える製品を設定した場合、応答は最初の25個のみを返します。残りを取得する方法については、https://developers.facebook.com/docs/graph-api/using-graph-api#pagingを参照してください。

UIを呼び出す

ユーザーが製品を選択したら、支払いダイアログを呼び出して購入の完了を促します。これは、Facebook Javascript SDK FBオブジェクトのui機能を通じて行うことができます。

支払いダイアログを呼び出すには、最初のパラメーターとしてJSONオブジェクトを指定し、以下のキーを設定します。

パラメーター名 必須

method

文字列

pay

はい

action

文字列

purchaseiap

はい

product_id

文字列

あなたの製品ID

はい

developer_payload

文字列

開発者によって開始された取引であることを認証するためのペイロードを定義する文字列。

いいえ

quantity

整数

定義されている場合は、常に1でなければなりません。

いいえ

ダイアログを呼び出すコードの例

FB.ui(
  {
    method: 'pay',
    action: 'purchaseiap',
    product_id: 'com.fb.friendsmash.coins.10',
    developer_payload: 'this_is_a_test_payload'
  },
  response => (console.log(response)) // Callback function
);
FB.PayWithProductId(
  "com.fb.friendsmash.coins.10",
  "purchaseiap",
  1,
  null, null, null, null, null,
  this.payCallback  // Callback function that receives an IPayResult
);

フローの完了後、取引の結果を確認するには、呼び出しの2番目のパラメーターにコールバック関数を指定します。この関数は、取引の情報を含むオブジェクトか、エラーコードおよびメッセージで呼び出されます

成功した応答の例

{
  app_id: 241431489326925,
  developer_payload: "this_is_a_test_payload",
  payment_id: 860496004080598,
  product_id: "com.fb.friendsmash.coins.10",
  purchase_time: 1473719771,
  purchase_token: "10157567446205226",
  signed_request: "M3fQFj6MlK7WJi597QgCvMlMLh7fl_...",
}

エラーが発生した取引の例

{
  error_code: 1383010, 
  error_message: "User canceled the order."
}

プレイヤーが購入したものをリスト表示する

支払いLiteでは、検証と購入管理のため、購入したものをリスト表示して消費されるようにすることができます。こうすることで、プレイヤーがゲーム内で消費できない製品を購入するのを防ぐことができます。ベストプラクティスとして、ゲームが読み込まれた時点でのプレイヤーの購入について調べ、まだ使い切っていない購入品がないかどうか確認することをおすすめします。

プレイヤーが購入したものをリスト表示するには、アプリの/APP_ID/purchasesエンドポイントをユーザーアクセストークンと共に使用します。この呼び出しは、現在のプレイヤーがまだ消費していない購入品すべてのリストを、対応する購入情報と共に返します。

例えば、以下のような呼び出しを使用します。

FB.api(
  '/app/purchases',
  'get',
  {access_token: 'ACCESS_TOKEN'},      // user access token
   payload => {        // callback function
     console.log('purchases payload:');
     console.log(payload);
   }
);
FB.API(
  "/app/purchases?access_token=YOUR_ACCESS_TOKEN",
  HttpMethod.GET,
  this.purchasesCallback // callback that receives a IGraphResult
);

応答の例

{
  data: [
    {
      app_id: 241431489326925,
      developer_payload: "this_is_a_test_payload",
      payment_id: 860496004080598,
      product_id: "com.fb.friendsmash.coin",
      purchase_time: 1473719771,
      purchase_token: "10157567446205226",
      signed_request: "M3fQFj6MlK7WJi597QgCvMlMLh7fl_...",
    },
    {
      ...
    }
  ],
  paging: {
    cursors: {
      after: "M3fQFj6MlK7WJi597QgCvMlMLh7fl...",
      before: "M3fQFj6MlK7WJi597QgCvMlMLh7...",
    }
  }
}

この応答から返されたsigned_requestについて詳しくは、このセクションを参照してください。

購入が25回を超える場合、応答では最初の25回のみを返します。残りを取得する方法については、https://developers.facebook.com/docs/graph-api/using-graph-api#pagingを参照してください。

Graph API v11.0 以降、consumedフィールドの名前がis_consumedに変更されています。

購入品を消費する

製品が購入され、署名済みリクエストと開発者のペイロードを使用した正当な購入であることが確認されたら、購入された製品や通貨をプレイヤーに付与します。この時点では、購入された製品が消費可能な場合(通貨や1回のみ使用可能なアイテムなど)、この購入を使用済みとして記録し、ユーザーが再度同じ製品を購入できるようにします。消費されない製品(特別な機能のアンロックや特別VIPプログラムなど)の場合、使用済みとせず、ユーザーが同じ製品を複数回購入できないようにします。

購入を使用済みにするには、JavaScriptのコールバックか、前述したプレイヤーの購入リストにあるpurchase_tokenを使用する必要があります。購入を使用済みにするには、以下のGraph APIエンドポイントを呼び出します。

POST	https://graph.facebook.com/PURCHASE_TOKEN/consume

Facebook JavaScript SDKを使用する例

FB.api(
  '/' + PURCHASE_TOKEN + '/consume',    // Replace the PURCHASE_TOKEN
  'post',
  {access_token: access_token},         // Replace with a user access token
  result => {
    console.log('consuming product', productId, 'with purchase token', purchaseToken);
    console.log('Result:');
    console.log(result);
  }
);
FB.API(
  "/YOUR_PURCHASE_TOKEN/consume?access_token=YOUR_ACCESS_TOKEN",
  HttpMethod.POST,
  this.consumeCallback // callback that receives a IGraphResult
);

成功した応答の例

{
  success: true,
}

申し立て

申し立ては元の支払いの完了後しばらくしてから生じる可能性があるため、申し立てを処理するには、プレイヤーが申し立てプロセスを開始するときに開発者が通知を受け取れるように、サーバーコンポーネントが必要になります。サーバーレスの支払いシステムである支払いLiteでは、すべての申し立ては自動的に払い戻されてクローズされます。決済の実装と、サーバーコンポーネントを使用して申し立てを処理する方法について詳しくは、支払いを受ける申し立てをご覧ください。