--- title: "设置网店" description: "Tokenz 网店是由 Tokenz 托管的游戏商店。玩家在网店购买物品,Tokenz 负责收款,你的游戏服务器发放物品。你在控制台中搭建网店,无需自己开发店面。" source: "https://docs.tokenz.one/zh-CN/v2/checkout/webshop" api_version: "v2" locale: "zh-CN" version_status: "current" docs_stage: "prod" --- # 设置网店 Tokenz 网店是由 Tokenz 托管的游戏商店。玩家在网店购买物品,Tokenz 负责收款,你的游戏服务器发放物品。你在控制台中搭建网店,无需自己开发店面。 先在测试模式中完成所有设置并进行一次测试购买,然后通过一份清单上线:网店和订单端点可从测试复制,产品和玩家 ID 验证需在正式环境中重新设置。 ## 开始之前 控制台右上角的开关用于在测试和正式之间切换。测试和正式各自有独立的产品、网店和 Webhook 端点,所以你在测试中的设置不会改变正式网店。测试购买使用[测试卡](https://docs.tokenz.one/zh-CN/v2/checkout/testing#%E5%AE%8C%E6%88%90%E4%B8%80%E6%AC%A1%E6%88%90%E5%8A%9F%E7%9A%84%E6%B5%8B%E8%AF%95%E6%94%AF%E4%BB%98),不会向任何人收费。 你的游戏服务器为网店承担两项工作: - **交付订单。** Tokenz 把每笔已支付的订单发送到你服务器上的端点,由服务器发放物品。 - **验证玩家 ID。** 玩家付款前,Tokenz 会询问你的服务器,玩家输入的 ID 是否存在,确保物品发到真实的账户。 在服务器完成这两项工作之前,你也可以先试用网店。参见[还没有服务器?](https://docs.tokenz.one/zh-CN/v2/checkout/webshop#no-server-yet)。 ## 1. 添加产品 切换到测试模式,打开 **商店** > **产品**。逐个创建物品,或从文件导入商品目录。参见[导入产品](https://docs.tokenz.one/zh-CN/v2/product/import)。 已发布的产品会在网店中出售,草稿不会显示。 ## 2. 搭建网店 打开 **商店** > **网店编辑器**,选择 **编辑网店**。选定网店地址,然后为每种销售语言添加 Logo、颜色和文字。编辑器旁的预览会显示玩家看到的网店。 玩家在付款前输入玩家 ID。在 **玩家 ID 帮助** 中写明游戏里在哪里显示 ID,一两句话即可,附上截图会更清楚。玩家从玩家 ID 输入框中的帮助图标打开这段说明。 网店准备好后,选择 **发布**。在测试中发布不会让网店公开,只是让它可以进行测试购买。 ## 3. 设置发货 在 **商店** > **网店编辑器** 中选择 **设置发货**。在 **发货** 页面设置订单如何到达你的游戏服务器。 1. 在 **订单发送到哪里** 中输入服务器上接收订单的 HTTPS 地址,然后选择 **保存端点**。 2. 复制签名密钥。Tokenz 只在保存端点时显示一次。服务器用它确认每笔订单来自 Tokenz。参见[保护你的 Webhook 端点](https://docs.tokenz.one/zh-CN/v2/checkout/webhooks-get-started#3.-%E4%BF%9D%E6%8A%A4%E4%BD%A0%E7%9A%84-webhook-%E7%AB%AF%E7%82%B9)。 3. 选择 **发送测试事件**。Tokenz 会发送一笔已支付的示例订单,你的服务器应在 5 秒内响应。 端点会收到所有订单、退款和争议事件。每笔已支付的订单以 `order.succeeded` 事件送达,`playerId` 中是玩家,物品列表中带有 SKU。把物品发放给该玩家,并在收到 `refund.created` 时收回。事件说明见 [Webhook](https://docs.tokenz.one/zh-CN/v2/checkout/webhooks#%E4%BA%8B%E4%BB%B6%E7%9A%84%E7%A7%8D%E7%B1%BB)。 由别人来开发端点?在 **交给开发人员** 中选择 **复制设置说明**。说明列出端点、它接收的事件和你的产品,并附一笔示例订单。说明中不含签名密钥,请另外发送。 ### 还没有服务器? 在测试模式中,**发货** 页面提供 **使用 Tokenz 测试服务器**。它接受所有测试订单,不会向游戏发放任何东西。在你设置测试验证 URL 之前,测试预览也会不经验证直接接受输入的玩家 ID。所以你可以在编写服务器代码之前进行测试购买。服务器准备好后,改为输入它的地址。 ## 4. 验证玩家 ID Tokenz 通过你服务器上的验证 URL 验证玩家 ID,它与接收订单的端点是分开的。打开 **设置** > **开发者** > **用户验证**,或在 **发货** 页面选择 **打开用户验证**。测试和正式环境各有自己的 URL 和签名密钥,所以先在测试模式中设置: 1. 选择 **设置验证**,输入你服务器上的 HTTPS 地址并保存。 2. 复制签名密钥。它只在生成时显示一次。 3. 输入一个真实的玩家 ID,选择 **发送测试验证**,确认你的服务器能够响应。 之后玩家输入 ID 时,Tokenz 会在付款前向这个 URL 发送一个 `user.validation` 请求,其中包含玩家输入的 ID。你的正式 URL 应答 `true` 后,Tokenz 可能在几分钟内复用这个应答,不再调用你的服务器,所以不要依靠这项验证来立即封禁账号。请参阅 [应答的复用](https://docs.tokenz.one/zh-CN/v2/checkout/webhooks#player-id-check-reuse)。在设置测试 URL 之前,测试预览接受任何玩家 ID,所以等你的服务器能够响应时再设置。 ```json { "id": "9f8d3c2b-1a4e-4f6d-8b0c-2e5a7d9f1c34", "object": "user.validation", "createdAt": "2026-07-22T09:15:00Z", "test": true, "credentials": { "type": "playerId", "playerId": "player-42931" } } ``` 以 HTTP `200` 响应,并说明玩家是否存在: ```json { "valid": true } ``` - 无论玩家是否存在,都返回 `200`。Tokenz 会把其他状态码视为服务故障,玩家将无法购买。 - 在 3 秒内响应。否则玩家无法付款,并会被提示重试。 - 只返回 `valid`。输入 ID 的任何人都能读到你的响应,所以不要发送关于玩家的其他信息。 - 当 `test` 为 `true` 时,用你的测试玩家来核对 ID。 - 像处理订单一样验证 `Tokenz-Signature` 标头,但要使用验证 URL 的签名密钥。 完整的请求和应答说明请参阅 [玩家 ID 验证](https://docs.tokenz.one/zh-CN/v2/checkout/webhooks#player-id-checks)。 ## 5. 进行测试购买 在 **商店** > **网店编辑器** 中选择 **打开预览**。它会打开你在测试中最后发布的网店。用[测试卡](https://docs.tokenz.one/zh-CN/v2/checkout/testing#%E5%AE%8C%E6%88%90%E4%B8%80%E6%AC%A1%E6%88%90%E5%8A%9F%E7%9A%84%E6%B5%8B%E8%AF%95%E6%94%AF%E4%BB%98)购买一件物品,然后确认服务器已发放该物品。控制台处于测试模式时,订单也会显示在 **订单** 中。 ## 6. 上线 把控制台切换到正式,打开 **商店** > **网店编辑器**。**上线** 清单列出正式环境还需要的内容,每项旁边都有一个按钮: | 项目 | 操作 | | --- | --- | | 协议 | 通过页面顶部的 **激活账户** 签署。正式收款开始前,Tokenz 会审核协议。项目由其所属组织的协议涵盖。 | | 正式环境在售商品 | 正式环境有自己的产品。选择 **添加商品**,在正式环境中重新创建或导入。 | | 商店 | 选择 **从测试复制**,用测试中已发布的网店替换正式环境的草稿。 | | 订单端点 | 如果测试订单发送到你自己的服务器,选择 **用于正式环境**,把正式订单也发送到那里。正式环境有自己的签名密钥,只显示一次。否则选择 **设置** 并输入服务器地址。 | | 玩家 ID 验证 | 正式环境有自己的验证 URL。选择 **设置** 打开正式环境的 **用户验证**,输入你服务器的地址,并复制正式环境的签名密钥。 | 所有项目准备好后,即可使用 **启用网店**。启用后,正式网店会发布,玩家可以通过网店地址访问。 ## 需要帮助? [联系 Tokenz 支持](https://tokenz.one/zh/support),并附上你的网店地址。