# 購入

> Use the SDK to make virtual purchases and redeem real money purchases.

`Purchases` 名前空間のメソッドを使用すると、現在サインインしているプレイヤーのために購入を行うことができます。

> **Note:**
>
> この名前空間のすべてのメソッドは、[EconomyException](./exceptions.md#economyexception) をスローする可能性があります。

## MakeVirtualPurchaseAsync##makevirtualpurchase

ID によって指定される仮想購入を行います。

このメソッドには `MakeVirtualPurchaseOptions` オブジェクトを任意で指定できます。これは、購入のコストに含める必要がある、プレイヤーインベントリ内のアイテムの `PlayersInventoryItems` ID を指定するために使用できます。これらを指定しないと、コストに含めるアイテムが自動的に選択されます。

`MakeVirtualPurchaseResult` を返します。

例:

```cs title="C#"
string purchaseID = "BUY_A_SWORD";
MakeVirtualPurchaseResult purchaseResult = await EconomyService.Instance.Purchases.MakeVirtualPurchaseAsync(purchaseID);
```

`PlayersInventoryItem` ID を使用する代わりの例:

```cs title="C#"
string purchaseID = "BUY_A_SWORD";
MakeVirtualPurchaseOptions options = new MakeVirtualPurchaseOptions
{
    PlayersInventoryItemIds = new List<string> { "playersInventoryItemId1", "playersInventoryItemId2" }
};

MakeVirtualPurchaseResult purchaseResult = await EconomyService.Instance.Purchases.MakeVirtualPurchaseAsync(purchaseID, options);
```

### MakeVirtualPurchaseOptions##makevirtualpurchaseoptions

`MakeVirtualPurchaseAsync` 呼び出しの任意のオブジェクト。これには以下のフィールドがあります。

* `PlayersInventoryItemIds`:  文字列のリスト。デフォルトは `null` です。購入のコストに含める、プレイヤーインベントリ内のアイテムの `PlayersInventoryItem` ID。

### MakeVirtualPurchaseResult##makevirtualpurchaseresult

このオブジェクトは、`MakeVirtualPurchaseAsync` 呼び出しによって返されます。以下のフィールドが含まれます。

* `Costs`: この購入にかかったコストを表す `Costs` オブジェクト。これにはさらに 2 つのフィールドがあります。

  * `Currency`: この購入を行うために使用された通貨を示す [`CurrencyExchangeItem`](#currencyexchangeitem) のリスト。
  * `Inventory`: この購入を行うためにコストとして使用されるアイテムを示す [`InventoryExchangeItem`](#inventoryexchangeitem) のリスト。

* `Rewards`: この購入と引き換えに与えられるゲーム内報酬を表す `Rewards` オブジェクト。これにも上記と同じ 2 つのフィールドがあります。

  * `Currency`: この購入において与えられるゲーム内報酬の通貨を示す [`CurrencyExchangeItem`](#currencyexchangeitem) のリスト。
  * `Inventory`: この購入においてゲーム内報酬として与えられるアイテムを示す [`InventoryExchangeItem`](#inventoryexchangeitem) のリスト。

## RedeemAppleAppStorePurchaseAsync##redeemappleappstorepurchaseasync

Apple App Store のレシートを送信してリアルマネーでの購入に対してアイテムを授受します。これは検証されます。有効な場合、設定で定義されたゲーム内報酬がプレイヤーのインベントリと通貨残高に適用されます。

必須の [`RedeemAppleAppStorePurchaseArgs`](#redeemappleappstorepurchaseargs) オブジェクトを指定します。これを使用して購入の詳細情報を指定します。

```cs title="C#"
RedeemAppleAppStorePurchaseArgs args = new RedeemAppleAppStorePurchaseArgs("PURCHASE_ID", "RECEIPT_FROM_APP_STORE", 0, "USD");
RedeemAppleAppStorePurchaseResult purchaseResult = await EconomyService.Instance.RedeemAppleAppStorePurchaseAsync(args);
```

### RedeemAppleAppStorePurchaseArgs##redeemappleappstorepurchaseargs

`RedeemAppleAppStorePurchaseAsync` 呼び出しの引数オブジェクト。これには以下のフィールドがあります。

* `RealMoneyPurchaseId`: 文字列。行う購入の設定 ID。
* `Receipt`: 文字列。Apple App Store から返されるレシートデータ。
* `LocalCost`: 整数。購入のコスト (補助通貨形式の整数)。例えば、$1.99 USD は 199 です。
* `LocalCurrency`: 文字列。購入で使用された通貨の ISO-4217 コード。

### RedeemAppleAppStorePurchaseResult##redeemappleappstorepurchaseresult

このオブジェクトは、`RedeemAppleAppStorePurchaseAsync` 呼び出しによって返されます。以下のフィールドが含まれます。

* `Verification`: 検証サービスからのレシート確認の詳細。

  * `Status`: レシート確認のステータス。以下のどれかになります。

    * `VALID`: 購入は有効でした。
    * `VALID_NOT_REDEEMED`: 購入は有効でしたが、前に確認されています。まだアイテム授受が行われていません。
    * `INVALID_ALREADY_REDEEMED`: 購入についてすでにアイテム授受が行われました。
    * `INVALID_VERIFICATION_FAILED`: レシート検証サービスから、レシートデータが有効でないと返されました。
    * `INVALID_ANOTHER_PLAYER`: レシートが、以前に別のプレイヤーによって使用され、検証されています。
    * `INVALID_CONFIGURATION`: サービス設定が無効です。その他の情報はレスポンスの詳細セクションを参照してください。
    * `INVALID_PRODUCT_ID_MISMATCH`: 購入設定のストア製品識別子がレシートのものと一致しません。

  * `Store`: レシート検証サービスの詳細情報。これには 3 つのフィールドがあります。

    * `Code`: Apple App Store 確認サービスから送信されたステータスコード。
    * `Message`: 返されたステータスコードのテキストによる説明。
    * `Receipt`: 購入レシートデータ。

* `Rewards`: この購入と引き換えに与えられるゲーム内報酬を表す `Rewards` オブジェクト。これには以下のフィールドがあります。

  * `Currency`: この購入において与えられるゲーム内報酬の通貨を示す [`CurrencyExchangeItem`](#currencyexchangeitem) のリスト。
  * `Inventory`: この購入においてゲーム内報酬として与えられるアイテムを示す [`InventoryExchangeItem`](#inventoryexchangeitem) のリスト。

### EconomyAppleAppStorePurchaseFailedException##economyappleappstorepurchasefailedexception

`RedeemAppleAppStorePurchaseAsync` は、タイプ `EconomyAppleAppStorePurchaseFailedException` の例外をスローすることがあります。これは `EconomyException` を継承し、`Data` と呼ばれる 1 つの追加フィールドがあります。

`Data` フィールドのタイプは `RedeemAppleAppStorePurchaseResult` です ([上記](#redeemappleappstorepurchaseresult) を参照)。

> **Note:**
>
> この `Data` フィールドは、`Exception` 基本クラスの `Data` フィールドとは違います。

## RedeemGooglePlayPurchaseAsync##redeemgoogleplaypurchaseasync

Google Play ストアのレシートを送信してリアルマネーでの購入に対してアイテムを授受します。これは検証されます。有効な場合、設定で定義されたゲーム内報酬がプレイヤーのインベントリと通貨残高に適用されます。

必須の [`RedeemGooglePlayStorePurchaseArgs`](#redeemgoogleplaystorepurchaseargs) オブジェクトを指定します。これを使用して購入の詳細情報を指定します。

```cs title="C#"
RedeemGooglePlayStorePurchaseArgs args = new RedeemGooglePlayStorePurchaseArgs("PURCHASE_ID", "PURCHASE_DATA", "PURCHASE_DATA_SIGNATURE", 0, "USD");
RedeemGooglePlayPurchaseResult purchaseResult = await EconomyService.Instance.RedeemGooglePlayPurchaseAsync(args);
```

### RedeemGooglePlayStorePurchaseArgs##redeemgoogleplaystorepurchaseargs

`RedeemGooglePlayPurchaseAsync` 呼び出しの引数オブジェクト。これには以下のフィールドがあります。

* `RealMoneyPurchaseId`: 文字列。行う購入の設定 ID。
* `PurchaseData`: 文字列。アプリ内課金が正常に行われると返される、JSON でエンコードされた文字列。
* `PurchaseDataSignature`: 文字列。アプリ内課金が正常に行われると返される、`PurchaseData` のシグネチャ。
* `LocalCost`: 整数。購入のコスト (補助通貨形式の整数)。例えば、$1.99 USD は 199 です。
* `LocalCurrency`: 文字列。購入で使用された通貨の ISO-4217 コード。

### RedeemGooglePlayPurchaseResult##redeemgoogleplaypurchaseresult

このオブジェクトは、`RedeemGooglePlayPurchaseAsync` 呼び出しによって返されます。以下のフィールドが含まれます。

* `Verification`: 検証サービスからのレシート確認の詳細。

  * `Status`: レシート確認のステータス。以下のどれかになります。

    * `VALID`: 購入は有効でした。
    * `VALID_NOT_REDEEMED`: 購入は有効でしたが、前に確認されています。まだアイテム授受が行われていません。
    * `INVALID_ALREADY_REDEEMED`: 購入についてすでにアイテム授受が行われました。
    * `INVALID_VERIFICATION_FAILED`: レシート検証サービスから、レシートデータが有効でないと返されました。
    * `INVALID_ANOTHER_PLAYER`: レシートが、以前に別のプレイヤーによって使用され、検証されています。
    * `INVALID_CONFIGURATION`: サービス設定が無効です。その他の情報はレスポンスの詳細セクションを参照してください。
    * `INVALID_PRODUCT_ID_MISMATCH`: 購入設定のストア製品識別子がレシートのものと一致しません。

  * `Store`: レシート検証サービスの詳細情報。これには 1 つのフィールドがあります。

    * `Receipt`: 購入レシートデータ。

* `Rewards`: この購入と引き換えに与えられるゲーム内報酬を表す `Rewards` オブジェクト。これには以下のフィールドがあります。

  * `Currency`: この購入において与えられるゲーム内報酬の通貨を示す [`CurrencyExchangeItem`](#currencyexchangeitem) のリスト。
  * `Inventory`: この購入においてゲーム内報酬として与えられるアイテムを示す [`InventoryExchangeItem`](#inventoryexchangeitem) のリスト。

### EconomyGooglePlayStorePurchaseFailedException##economygoogleplaystorepurchasefailedexception

`RedeemGooglePlayPurchaseAsync` は、タイプ `EconomyGooglePlayStorePurchaseFailedException` の例外をスローすることがあります。これは `EconomyException` を継承し、`Data` と呼ばれる 1 つの追加フィールドがあります。

`Data` フィールドのタイプは `RedeemGooglePlayPurchaseResult` です ([上記](#redeemgoogleplaypurchaseresult) を参照)。

> **Note:**
>
> この `Data` フィールドは、`Exception` 基本クラスの `Data` フィールドとは違います。

## CurrencyExchangeItem##currencyexchangeitem

このオブジェクトは、購入で使用された通貨を表します。これには以下のフィールドがあります。

* `Id`: 通貨の ID。
* `Amount`: 購入で使用された通貨の金額。

## InventoryExchangeItem##inventoryexchangeitem

このオブジェクトは、購入に含まれるインベントリアイテムを表します。これには以下のフィールドがあります。

* `Id`: 通貨の ID。
* `Amount`: 購入で使用された/ゲーム内報酬を与えられた、このインベントリアイテムの数量。
* `InstanceIds`: 購入で使用された/ゲーム内報酬を与えられた、インスタンス ID のリスト。
