# 集成 Direct-to-Consumer (D2C) 支付提供商工作流程

> 按照此工作流程将 D2C 支付提供商与应用内购(IAP)集成，以便您可以控制如何以及在哪里向用户提供和销售 IAP 商品。

本指南概述了将 D2C 支付提供商与 Unity 应用内购 (IAP) 集成的端到端工作流程。工作流程涵盖了促进平台外交易所需的基本步骤，从如何通过 Unity Dashboard（Unity 后台）配置商店到如何实现必要的客户端和服务器端逻辑。按照此顺序，您可以确保玩家获得一致的购买体验，同时还能在 Unity Gaming Services (UGS) 环境和您选择的支付网关之间保持安全通信。

此集成使用充当记录商家 (MoR) 的 D2C 支付提供商。这意味着付款提供商承担处理付款的法律责任，包括税务合规、防止欺诈、争议和客户支持方面的支持。通过利用支付提供商作为 MoR，可以显著降低平台外交易的运营开销和合规性负担。

要将 Unity 应用内购 (IAP) 与 D2C 支付提供商集成，请完成以下步骤：

1. [在 Unity Editor 中配置您的环境](#configure-your-environment-in-the-unity-editor)
2. [创建 Remote Catalog](#create-your-remote-catalog)
3. [初始化服务以处理启动顺序](#initialize-services-to-handle-the-start-up-sequence)
4. [获取远程目录](#fetch-your-remote-catalog)
5. [配置 Webhook 或 Cloud Code 模块以实现购买（可选）](#configure-a-webhook-or-cloud-code-module-for-purchase-fulfillment-\(optional\))
6. [配置付款提供商](#configure-your-payment-provider)
7. [配置路由规则](#configure-your-routing-rules)
8. [完成购买](#fulfill-purchases)
9. [测试集成](#test-your-integration)

> **Important:**
>
> Apple 和 Google 现在支持特定地区的外部 Web 链接和第三方付款。由于资格、费用和技术要求因平台和地域市场而异，因此您有责任遵守每个平台和地区的要求。

## 先决条件##prerequisites

要将 D2C 支付提供商与 IAP 集成，您需要满足以下要求：

* 已安装 Unity Editor 2022.3 或更高版本（建议使用 Unity 6.0 或更高版本），并提供了适用于目标平台的构建支持模块，例如：
  * Android 构建支持
  * iOS 构建支持
* [连接到 Unity 项目](/iap/get-started.md#enable-and-configure-the-iap-service-for-your-project)的 Cloud 项目。

您需要安装以下包：

* 安装 IAP v5.4。
  * 有关更多信息，请参阅[升级到 IAP 版本 5](../upgrade-to-iap-v5)。
* 安装并配置 [Unity Authentication](/authentication.md) 来管理玩家身份。
* 安装 [Deployment](https://docs.unity3d.com/Packages/com.unity.services.deployment@latest) 包以部署商品目录。

> **Important:**
>
> 建议的最佳做法是不要使用匿名登录作为身份验证方法，因为匿名登录不会在会话令牌丢失后持续购买。如果无摩擦 特定于平台的提供程序 (/authentication/ approaches-to-authentication#platform-specific-authentication)对应用程序不可行，请参阅 匿名身份验证和链接 (/authentication/anonymous-auth-and-linking)。

## 在 Unity Editor 中配置您的环境##configure-your-environment-in-the-unity-editor

在 Unity Editor 中设置的环境定义了在代码中初始化 Unity Gaming Services 后的 Unity IAP 运行位置。要设置环境，请按照以下步骤操作：

1. 在 Unity Editor 中，选择 **Edit**（编辑）> **Project Settings**...（**项目设置**...）> \*\*Environments（\*\*服务）。
2. 选择要 IAP 运行的目标环境：**开发**、**过渡**或**生产**。

## 创建 Remote Catalog##create-your-remote-catalog

要使用付款提供商，您需要将商品目录上传到 Unity IAP Remote Catalog 服务。Remote Catalog 服务允许您为用户提供最新产品，而无需安装新版本。要创建远程目录，请执行以下操作：

1. 创建 Unity IAP 商品目录。
2. 将目录上传到 Remote Catalog 服务。

有关更多信息，请参阅[创建远程目录](./configure-remote-catalog.md)。

## 初始化服务以处理启动顺序##initialize-services-to-handle-the-start-up-sequence

创建一个脚本来初始化 Unity Gaming Services (UGS) 以处理 IAP 的启动顺序。此启动脚本初始化 UGS，处理 Authentication 事件，登录玩家，然后触发 IAP 初始化。

有关更多信息和代码示例，请参阅[初始化服务以](./initialize-services.md)处理启动顺序。

## 获取远程目录##fetch-your-remote-catalog

您需要创建一个连接到 `StoreController` 的脚本来显式获取部署的 Remote Catalog。将此脚本附加到与[初始化脚本](#initialize-services-to-handle-the-start-up-sequence)相同的游戏对象。

有关更多信息和代码示例，请参阅[获取远程目录](./fetch-remote-catalog.md)。

## 配置 Webhook 或 Cloud Code 模块以实现购买（可选）##configure-a-webhook-or-cloud-code-module-for-purchase-fulfillment-(optional)

Unity IAP 为平台外支付提供商管理授权，类似于 Apple 和 Google 为其商店处理授权的方式。如果需要将购买与后端同步或使用服务器授权，可以选择配置 Webhook 或 Cloud Code 模块来接收购买事件。

有关更多信息，请参阅[配置 Webhook 或 Cloud Code 模块以实现购买](./configure-fulfilment.md)。

## 配置付款提供商##configure-your-payment-provider

您可以根据业务需求（例如定价模型或内容类型）选择要用于 IAP 的支持付款提供商。您负责与外部支付提供商管理和商定价格。

有关内容类型和限制的信息，请参阅特定支付提供商的文档：

* [条带：禁止和限制的业务](https://stripe.com/en-th/legal/restricted-businesses)
* [Coda：禁止的内容策略](https://www.coda.co/prohibited-content-policy/)

有关更多信息，请参阅[配置付款提供](./configure-payment-provider.md)商。

## 配置路由规则##configure-your-routing-rules

要激活付款提供商，您需要定义提供商路由规则。通过路由，您可以针对特定的玩家属性来确定您向每个玩家提供的付款提供商及其显示顺序。

有关更多信息，请参阅[添加路由规则](./routing.md)。

## 完成购买##fulfill-purchases

当玩家完成购买时，Unity IAP 会创建订单并跟踪其履行状态。您必须在授予玩家购买后确认（完成）购买。

> **Important:**
>
> 即使您也在自己的后端系统中管理授权，也必须始终将订单标记为使用 Unity IAP 完成。对于消耗品，Unity IAP 会阻止玩家再次购买同一商品，直到完成上一个订单。

您可以通过以下方式将订单标记为已完成：

| **方法**                                                                         | **何时使用**                          | **解决方案结果**                                           |
| ------------------------------------------------------------------------------ | --------------------------------- | ---------------------------------------------------- |
| [通过 SDK](#fulfill-purchases-through-the-sdk)                                   | 您的游戏授予客户端和服务器授权的权利不是优先级。          | 您的游戏客户端会确认购买客户端并使用 IAP 服务作为真相来源。                     |
| [服务器验证以及 SDK](#fulfill-purchases-with-both-the-sdk-and-server-side-validation) | 游戏需要服务器端验证，但您希望避免管理 Webhook。      | 后端使用客户端的订单 ID 在履行订单之前直接从 Unity IAP `GET API`中获取购买状态。 |
| [通过后端 API](#fulfill-purchases-through-the-backend-api)                         | 您的游戏使用服务器授权权限。                    | 后端接收 Webhook 事件，在系统中授予授权，并调用 API 将订单标记为已履行。          |
| [通过 Cloud Code 模块](#use-a-cloud-code-module-to-fulfill-purchases)              | 游戏使用服务器端逻辑进行授权和实现，而无需管理自己的后端基础架构。 | 游戏使用 Cloud Code 模块和终端来处理服务器端的购买事件。                   |

### 通过 SDK 完成购买##fulfill-purchases-through-the-sdk

使用与 Apple 和 Google 购买相同的方法在游戏客户端中确认购买。在授予玩家权限后，客户端代码必须处理每个订单的`OnPurchasePending`回调和调用`ConfirmPurchase`。这将确认订单并将其关闭。有关详细信息，请参阅 Unity IAP [购买](./purchases-sdk.md)文档。

> **Important:**
>
> 对于付款提供商，必须在调用`UnityIAPServices`或`StoreController`时指定商店名称 (`PaymentProvider.Name`)。`PaymentProvider.Name` 指定直接到消费者提供商集成，不返回提供商的显示名称。

#### 使用 SDK 和服务器端验证完成购买##fulfill-purchases-with-both-the-sdk-and-server-side-validation

如果使用 IAP SDK 实现购买，仍然可以调用后端 API 进行购买验证以实现服务器授权工作流程。

有关更多信息，请参阅[使用服务器端验证](./purchases-sdk.md#use-server-side-validation-alongside-the-sdk)以及 SDK。

### 通过后端 API 完成购买##fulfill-purchases-through-the-backend-api

如果您的游戏使用服务器授权授权，请实现后端系统管理授权并实现购买。

有关更多信息，请参阅[通过后端 API](./implement-backend.md) 完成购买。

### 使用 Cloud Code 模块实现购买##use-a-cloud-code-module-to-fulfill-purchases

如果您的游戏使用服务器授权权限，则可以使用 Cloud Code 模块来验证购买事件、完成购买并调用订单 API。

有关更多信息，请参阅[使用 Cloud Code 模块实现购买](./cloud-code-fulfillment.md)。

## 测试集成##test-your-integration

测试您的集成以确保其正常工作，并确保您可以成功实现用户购买。

如需了解更多信息，请参阅[测试集成](./test-integration.md)。

## 外部购买平台合规性##platform-compliance-for-external-purchases

Unity 不会代表您执行 Apple 或 Google 平台合规性。您有责任在发送外部购买之前确定自己的资格并满足每个平台的要求。Unity 提供合规性回调 (`SetComplianceCheck`) 和 Webhook 交易令牌来帮助您实现自己的流程。

有关更多信息，请参阅[遵守 Apple 和 Google 外部购买要求](./external-purchase-compliance.md)。

## 功能支持##feature-support

IAP 目前不支持以下功能：

* 通过 D2C 付款提供商订阅。
* Unity Analytics 对 D2C 交易的支持。
* 原生 Apple 和 Google 购买的托管权利。
* 用户的替代计费选择。
