> ## 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.

# 交易快速入门

> PlayFab 玩家对玩家交易快速入门，使用 OpenTrade、AcceptTrade 及相关 API 在两名玩家之间交换库存物品。

<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

- [快速入门](/zh-CN/services/playfab/economy-monetization/economy-v2/quickstart.md)
- [Economy（旧版）快速入门](/zh-CN/services/playfab/economy-monetization/economy/quickstart.md)
- [Android 快速入门](/zh-CN/services/playfab/sdks/c/quickstart-android.md)
- [iOS 快速入门](/zh-CN/services/playfab/sdks/c/quickstart-ios.md)
- [Linux 快速入门](/zh-CN/services/playfab/sdks/c/quickstart-linux.md)
