> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 트레이딩 빠른 시작

> OpenTrade, AcceptTrade 및 관련 API를 사용해 두 플레이어 간에 인벤토리 아이템을 교환하는 PlayFab 플레이어 간 트레이딩용 빠른 시작입니다.

<Note>
  이 빠른 시작은 사용자가 카탈로그와 인벤토리 아이템에 이미 익숙하다고 가정합니다. 예제 플레이어는 거래하려는 인벤토리 아이템을 이미 소유하고 있어야 합니다.
</Note>

첫 번째 단계는 다른 플레이어에게 거래를 사용할 수 있도록 `OpenTrade` API를 호출하는 것입니다. 선물 수신자를 식별하는 `playfabId`와 현재 인벤토리에 아이템이 있는 플레이어의 `ItemInstanceID`가 필요합니다.

`secondPlayerId`: 선물 수신자를 식별하는 고유 문자열입니다(`PlayFabId`).

`myItemInstanceId`: 현재 플레이어가 소유한 아이템 인스턴스를 식별하는 고유 문자열입니다(`InstanceID`).

```csharp theme={null}
void GiveItemTo(string secondPlayerId, string myItemInstanceId) {
    PlayFabClientAPI.OpenTrade(new OpenTradeRequest {
        AllowedPlayerIds = new List<string> { secondPlayerId }, // PlayFab ID for the friend who will receive your gift
        OfferedInventoryInstanceIds = new List<string> { myItemInstanceId } // The item instanceId fetched from GetUserInventory()
    }, LogSuccess, LogFailure);
}
```

<Note>
  모든 거래는 공개 정보입니다. 모든 플레이어는 다른 플레이어의 오픈 거래와 다른 플레이어의 거래 기록을 볼 수 있습니다(해당 플레이어의 `playFabId`를 알고 있는 경우).
</Note>

이 스니핏에서 `LogSuccess` 콜백은 `result.Trade.TradeId`를 평가하고, `firstPlayFabId`와 `tradeId`를 두 번째 플레이어에게 모두 전송해야 합니다. 저장되지 않으면 두 번째 플레이어는 거래를 평가하거나 수락할 수 없습니다.

<Note>
  현재 미리 보기에서는 거래가 동시 작업으로부터 스레드로부터 안전하도록 해야 합니다. 스레드로부터 안전한 옵션에는 사용자 지정 게임 서버와 CloudScript를 통해 외부 데이터베이스/시스템으로의 Webhook 호출이 포함됩니다. 스레드로부터 안전하지 않은 옵션은 플레이어 데이터 키를 직접 수정하는 CloudScript로 구축할 수 있습니다. 후자의 옵션에는 동시 거래 목록 업데이트가 올바르게 처리되지 않을 수 있는 동시성 문제가 있습니다.
</Note>

첫 번째 플레이어가 거래를 만들고 `playFabId`와 `tradeId`를 두 번째 플레이어에게 전송한 후, 두 번째 플레이어는 `GetTradeStatus` 요청을 통해 거래 요구 사항을 검토할 수 있습니다(선물인지 확인).

<Note>
  가장 관련 있는 **TradeStatus** 값은 **Open**, **Filled**, **Canceled**입니다. 다른 모든 상태는 중간 상태입니다. 거래는 호출 간에 상당한 시간 동안 이러한 중간 상태에 머무를 수 있습니다. 최근에 수정된 거래는 즉시 사용할 수 없을 수 있습니다.
</Note>

```csharp theme={null}
void ExamineTrade(string firstPlayFabId, string tradeId) {
    PlayFabClientAPI.GetTradeStatus(new GetTradeStatusRequest {
        OfferingPlayerId = firstPlayFabId,
        TradeId = tradeId
    }, LogSuccess, LogFailure);
}

If the requirements of that trade are acceptable, the gift can be accepted using AcceptTrade
C# snip
void AcceptGiftFrom(string firstPlayFabId, string tradeId) {
    PlayFabClientAPI.AcceptTrade(new AcceptTradeRequest {
        OfferingPlayerId = firstPlayFabId,
        TradeId = tradeId
    }, LogSuccess, LogFailure);
}
```

완료되면 위의 `AcceptGiftFrom` 함수는 첫 번째 플레이어의 인벤토리에서 두 번째 플레이어에게 선물 아이템을 이전합니다.


## Related topics

- [플레이어 데이터 빠른 시작](/ko/services/playfab/player-progression/player-data/quickstart.md)
- [Player Inventory 빠른 시작](/ko/services/playfab/economy-monetization/economy-v2/inventory/quickstart.md)
- [플레이어 사용자 지정 속성 빠른 시작](/ko/services/playfab/live-service-management/game-configuration/segmentation/player-custom-properties-qs.md)
- [빠른 시작](/ko/services/playfab/economy-monetization/economy-v2/quickstart.md)
- [Photon 빠른 시작](/ko/services/playfab/live-service-management/service-gateway/add-ons/photon/quickstart.md)
