托管结账

在设置中申请,等待批准,然后创建一个会话并将买家发送到RMT支付页面。订单支付后您进行履行。获得批准的合作伙伴支付锁定金额的4%。

从你的商店接收付款。RMT.GG 是记录商。使用卖家 API 将买家引导到 RMT 支付页面。

托管结账的工作原理

RMT.GG保持为记录商户。您的合作商店发送锁定金额和货币。买家在我们的托管页面上付款。付款后,您在商店中交付。订单自动完成,以便钱包结算可以进行。

  • 买家支付的金额和货币与您发送的完全一致。我们不会增加金额。
  • 您的卖家费用是该锁定金额的4%。市场列表保持在通常的5%。
  • 卡、PayPal和加密货币处理费用由平台承担。

需要白名单

在设置中申请,托管结账,然后等待管理员批准。未批准的API密钥将收到CHECKOUT_PARTNER_NOT_APPROVED。

申请并获得批准

获得批准后,在托管结账设置页面创建一个带有 checkout:write 权限的 API 密钥和一个用于 checkout.completed 的 JSON webhook。在获得批准之前,托管结账 API 将保持被阻止状态。

  1. 1打开设置 → 托管结账并提交您的商店URL以及关于您将如何使用结账的简短说明。
  2. 2等待管理员批准。在此之前,您将看到一个待处理的徽章。
  3. 3获得批准后,在设置 → 托管结账中创建一个 API 密钥和一个用于 checkout.completed 的 JSON webhook。

卖家API

从任何商店或您自己的服务器使用此功能。使用POST /api/v1/checkout/sessions创建一个会话。发送checkout:write和一个Idempotency-Key。将买家重定向到hosted_url。监听order.paid,然后在您的商店中履行。

创建一个托管结账会话

bash
curl -X POST -H "Authorization: Bearer rmt_sk_live_…" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: inv-12345" \
  https://rmt.gg/api/v1/checkout/sessions \
  -d @session.json

session.json

javascript
{
  amount: 10, // required when items is omitted
  currency: "USD", // optional; defaults to USD
  itemName: "Gold pack", // required when items is omitted; alias title
  description: "1000 gold for account example", // optional
  imageUrl: "https://cdn.shop.example/gold.png", // optional, HTTPS only
  categorySlug: "games", // send with offering, or omit both
  offering: "Mods", // send with categorySlug
  email: "[email protected]", // optional
  returnUrl: "https://your-shop.example/thanks", // optional
  cancelUrl: "https://your-shop.example/cancel", // optional
  invoiceId: "12345" // optional
}

多个锁定行,带可选交付(session.json)

javascript
{
  currency: "USD",
  invoiceId: "12345", // optional
  items: [ // required when amount is omitted
    {
      name: "Gold pack", // required per line
      description: "1000 gold", // optional
      amount: 10, // required per line
      quantity: 1, // optional, default 1
      imageUrl: "https://cdn.shop.example/gold.png", // optional, HTTPS only
      delivery: [ // optional
        { name: "Code", type: "text", value: "XXXX-YYYY" } // name and value required; type is optional
      ]
    }
  ]
}
  • 发送金额加上 itemName(或标题)用于单个物品,或非空的 items[] 数组。货币默认为美元。可选字段:描述、HTTPS 图片链接、电子邮件(预填支付页面)、返回链接、取消链接、发票 ID、类别标识符以及产品(发送两者或都不发送),以及元数据。itemName 是支付页面的标题;描述是下面的详细说明。买家必须在付款前确认有效的电子邮件。付款后,买家将停留在 RMT.GG 确认页面,以便他们可以复制交付字段。如果您设置了返回链接并且有交付字段,他们将从该页面继续到您的商店。如果没有,我们将在短暂倒计时后将他们送回。如果您省略了返回链接或取消链接,买家在付款、取消或过期后将停留在 RMT.GG 支付页面上。
  • 成功后,我们将订单 uid 附加到 returnUrl,格式为 ?order=,当该 URL 是 HTTPS(或 localhost)时。
  • 重复的Idempotency-Key或invoiceId值将重用相同的会话,而不是创建重复项。
  • itemName 和描述仅在 RMT 支付页面上显示。卡、PayPal 和加密货币结账使用类似 Games · Add-ons 的目录编码标签,而不是你的商店标题。在设置中设置默认值,或在会话中发送 categorySlug 和 offering。
  • 会话持续24小时。之后支付页面无法完成,进行中的Stripe和PayPal会话将关闭,我们将POST checkout.canceled,原因是过期。
  • items[] 是单个金额加上 itemName 的多行替代方案。每行需要名称和金额。使用 items 时,可以省略金额,并从行中计算,或者如果您发送它,则必须与总和匹配。数量在 rmt.gg 上是锁定的:买家无法添加、删除或更改行。imageUrl 必须是 HTTPS;我们不会获取它。可选的交付字段(文本、密码或文本区域)需要名称和数值。它们在付款后的确认页面和购买中显示。公共会话 GET 仅在付款后包含交付值。卖家 GET 和网络钩子从不包含它们。

检查支付状态

首先监听 checkout.completed。如果 webhook 延迟,请获取会话。买家支付时 paid 为 true。您可以通过会话 uid 或您发送的 invoiceId 查找。

  • 使用创建会话时返回的 uid 进行 GET /api/v1/checkout/sessions/{uid}。
  • 如果您存储了自己的发票 ID,请使用 GET /api/v1/checkout/sessions?invoiceId=YOUR_INVOICE_ID。

通过发票 ID 查找

bash
curl -H "Authorization: Bearer rmt_sk_live_…" \
  https://rmt.gg/api/v1/checkout/sessions?invoiceId=inv-12345

Digiseller 和类似商店

如果您使用卖家 API 创建结账,请跳过此步骤。当您的商店(例如 Digiseller)通过自定义支付方式将买家发送到此处时使用。Digiseller 发送到我们的支付 URL,我们处理付款,然后 Digiseller 检查状态 URL。

  1. 1从设置 → 托管结账中复制支付 URL、状态 URL 和支付密钥。
  2. 2将它们粘贴到 Digiseller 作为自定义支付方式。保持密钥私密。
  3. 3然后 Digiseller 将买家发送给我们付款,并检查状态 URL 以确认是否已付款。
  • item_name(或标题)是支付页面的标题。description 是下面的详细说明。如果两个名称都被省略,则使用 description 作为标题。

Digiseller 发送的示例请求

json
{
  "invoice_id": "12345",
  "amount": "10.00",
  "currency": "美元",
  "item_name": "金币包",
  "description": "1000金币用于账户示例",
  "signature": "…"
}

更喜欢 JSON webhook

状态 URL 是为 Digiseller 准备的。如果您从自己的服务器进行履行,请添加 JSON webhook 并监听 checkout.completed。您也可以作为备份获取会话。

JSON 网络钩子

托管结账不使用单独的网络钩子 API。在开发者部分,将 JSON HTTPS 端点指向与市场销售相同的事件。付款后我们 POST order.paid。退款后我们 POST order.refunded。通过 externalInvoiceId(你的 invoiceId)或 partnerSessionUid 匹配销售。

order.paid 负载(托管结账字段)

json
{
  "id": "whd_…",
  "type": "order.paid",
  "created": "2026-08-14T12:00:00.000Z",
  "data": {
    "order": {
      "uid": "ord_…",
      "status": "已付款",
      "partnerSessionUid": "…",
      "externalInvoiceId": "inv-12345",
      "partnerSource": "api"
    }
  }
}
  • source 是卖家 API 会话的 API。
  • 可选签名使用 X-RMT-Timestamp 和 X-RMT-Signature。以与其他卖家网络钩子相同的方式验证 HMAC。
  • checkout.canceled 包含 reason buyer_canceled,当买家在未付款的情况下离开支付页面,或 reason expired,当 24 小时会话 TTL 过期未付款时。
  • checkout.items 列出锁定行(名称、描述、金额、数量、imageUrl)。交付值从不包含在网络钩子中。

不要重复履行

Digiseller 也会获得自己的支付回调。如果您也监听 checkout.completed,请仅在一次履行订单。卖家 API 会话从不发送 Digiseller 回调。

访客电子邮件和收据

买家必须在支付页面输入电子邮件,以便我们可以发送收据和税务发票。匹配的 RMT 账户会在不登录买家的情况下附加。

  • 如果电子邮件已经属于RMT账户,则订单将出现在该账户的购买中。支付页面上不会设置登录cookie。
  • 新电子邮件会创建一个轻量级用户,因此收据和后续登录仍然有效。
  • 完成付款需要电子邮件。您的商店仍应监听 checkout.completed。

货币和限制

使用支持的ISO货币,如美元(USD)或欧元(EUR)。卡片结账在美元或欧元中效果最佳。加密货币和PayPal在提供商接受的其他货币中仍然可以使用。

在此版本中不可用

托管支付页面上没有iframe SDK、自定义支付页面域或钱包余额。买家使用卡、PayPal或加密货币重定向结账。

上线前

阶段检查清单

单元测试涵盖费用、HMAC和重用。在您发送真实买家之前,请在阶段中逐步检查此列表。

  • 申请,确认待处理徽章,然后让管理员批准。凭证仅在获得批准时出现。未批准的密钥在POST /api/v1/checkout/sessions上返回403。
  • 创建一个包含itemName、描述和categorySlug的会话,以及提供的产品(或保存的默认值)。打开hosted_url。标题是物品名称;描述在下面。支付页面没有顶部导航或侧边栏。使用美元或欧元的卡片支付。卡片、PayPal和加密货币页面应显示类似于“游戏 · 附加内容”的目录标签,而不是您的商店标题。
  • 确认 checkout.completed 包含 invoiceId、checkout.uid 和 source,然后在你的商店中完成。取消支付页面并确认 checkout.canceled,原因是 buyer_canceled。让会话超过 24 小时,并确认 checkout.canceled,原因是 expired 不能再付款。
  • 对于 Digiseller,将支付 URL、状态 URL 和支付密钥粘贴到自定义支付方式中。确认 Digiseller 可以看到已付款状态,并且您仅履行一次订单。
  • 使用现有的 RMT 电子邮件付款:订单将进入购买记录,并发送收据,无需登录 cookie。新的电子邮件会创建一个轻量级用户。支付页面上需要电子邮件。
  • 隐藏的合成报价不得出现在市场搜索中。在等待列表限制的主机上,/pay/:uid和适配器路由仍然有效。
  • 如果需要产品图片或多个锁定行,请发送可选的 imageUrl 和 items[]。确认支付页面没有数量控制。付款后,交付字段会出现在购买和订单页面上。仅支持 HTTPS 图片 URL。

相关指南

申请托管结账

打开设置 → 托管结账进行申请,或在获得批准后跳转到API参考。