Как работает хостинговая касса
RMT.GG остается торговцем. Ваш партнерский магазин отправляет заблокированную сумму и валюту. Покупатель оплачивает на нашей хостинговой странице. После оплаты вы выполняете заказ в своем магазине. Заказы автоматически завершаются, чтобы можно было провести расчет кошелька.
- Покупатель платит точно ту сумму и валюту, которую вы отправляете. Мы не увеличиваем ее.
- Ваша комиссия продавца составляет 4% от этой заблокированной суммы. Листинги на маркетплейсе остаются на уровне 5%.
- Комиссии за обработку карт, PayPal и криптовалюты покрываются платформой в этом процессе.
Требуется белый список
Подайте заявку в Настройках, Хостинговая касса, затем дождитесь одобрения администратора. Неодобренные API ключи получают CHECKOUT_PARTNER_NOT_APPROVED.
Подайте заявку и получите одобрение
После одобрения создайте API-ключ с правами checkout:write и JSON вебхук для checkout.completed на странице настроек Hosted checkout. До одобрения API Hosted checkout остаются заблокированными.
- 1Откройте Настройки → Хостинговая касса и отправьте URL вашего магазина плюс короткое примечание о том, как вы будете использовать кассу.
- 2Дождитесь одобрения администратора. Вы увидите значок ожидания до тех пор.
- 3После одобрения создайте API-ключ и JSON вебхук для checkout.completed в Настройки → Hosted checkout.
API продавца
Используйте это из любого магазина или вашего собственного сервера. Создайте сессию с помощью POST /api/v1/checkout/sessions. Отправьте checkout:write и Idempotency-Key. Перенаправьте покупателя на hosted_url. Слушайте order.paid, затем выполните заказ в вашем магазине.
Создайте сессию хостинговой кассы
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.jsonsession.json
{
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)
{
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[]. Валюта по умолчанию - USD. Дополнительные поля: описание, HTTPS imageUrl, email (предзаполняет страницу оплаты), returnUrl, cancelUrl, invoiceId, categorySlug плюс offering (отправьте оба или ни один), и метаданные. itemName - это заголовок страницы оплаты; описание - это более длинный текст под ним. Покупатель должен подтвердить действующий email перед оплатой. После оплаты покупатель остается на странице подтверждения RMT.GG, чтобы он мог скопировать поля доставки. Если вы установите returnUrl и есть поля доставки, они перейдут в ваш магазин с этого экрана. Если их нет, мы отправим их обратно после короткого обратного отсчета. Если вы пропустите returnUrl или cancelUrl, покупатель останется на странице оплаты RMT.GG после оплаты, отмены или истечения срока.
- При успешной оплате мы добавляем uid заказа к returnUrl как ?order= когда этот URL является HTTPS (или localhost).
- Повторные значения Idempotency-Key или invoiceId используют ту же сессию вместо создания дубликата.
- itemName и описание отображаются только на странице оплаты RMT. Оплата картой, PayPal и криптовалютой использует закодированные метки каталога, такие как Игры · Дополнения, а не название вашего магазина. Установите значение по умолчанию в Настройках, Hosted checkout, или отправьте categorySlug и предложение на сессию.
- Сессии длятся 24 часа. После этого страница оплаты не может быть завершена, активные сессии Stripe и PayPal закрываются, и мы отправляем POST запрос checkout.canceled с причиной истечения срока.
- items[] — это многострочная альтернатива одной сумме плюс itemName. Каждая строка требует имя и сумму. С items сумма может быть опущена и вычисляется из строк, или должна соответствовать сумме, если вы ее отправляете. Количество заблокировано на rmt.gg: покупатели не могут добавлять, удалять или изменять строки. imageUrl должен быть HTTPS; мы его не загружаем. Необязательные поля доставки (текст, пароль или текстовая область) требуют имя и значение. Они отображаются после оплаты на странице подтверждения и в Покупках. Публичный GET сессии включает значения доставки только после оплаты. GET продавца и вебхуки никогда их не включают.
Проверьте статус платежа
Сначала прослушайте checkout.completed. Если вебхук задерживается, выполните GET для сессии. paid равно true, когда покупатель оплатил. Вы можете искать по uid сессии или по invoiceId, который вы отправили.
- GET /api/v1/checkout/sessions/{uid} с использованием uid, возвращенного при создании сессии.
- GET /api/v1/checkout/sessions?invoiceId=YOUR_INVOICE_ID, если вы сохранили свой собственный invoice id.
Искать по invoice id
curl -H "Authorization: Bearer rmt_sk_live_…" \
https://rmt.gg/api/v1/checkout/sessions?invoiceId=inv-12345Digiseller и подобные магазины
Пропустите это, если вы создаете чекауты с помощью API Продавца. Используйте это, когда ваш магазин (например, Digiseller) отправляет покупателя сюда через кастомный метод оплаты. Digiseller отправляет на наш URL оплаты, мы принимаем платеж, затем Digiseller проверяет URL статуса.
- 1Скопируйте URL оплаты, URL статуса и секрет оплаты из Настройки → Хостинговый чекаут.
- 2Вставьте их в Digiseller как кастомный метод оплаты. Держите секрет в тайне.
- 3Затем Digiseller отправляет покупателей к нам для оплаты и проверяет URL статуса на оплаченный или неоплаченный.
- item_name (или название) — это заголовок на странице оплаты. description — это более длинный текст под ним. Если оба имени опущены, используется description в качестве заголовка.
Пример запроса, который отправляет Digiseller
{
"invoice_id": "12345",
"amount": "10.00",
"currency": "USD",
"item_name": "Золотой пакет",
"description": "1000 золота для примера аккаунта",
"signature": "…"
}Предпочитайте JSON вебхук
URL статуса предназначен для Digiseller. Если вы выполняете с сервера, добавьте JSON вебхук и прослушивайте checkout.completed. Вы также можете выполнить GET для сессии в качестве резервного варианта.
JSON вебхуки
Хостинг-касса не использует отдельный вебхуки API. В разделе Разработчик укажите JSON HTTPS конечную точку на те же события, что и продажи на маркетплейсе. После оплаты мы отправляем POST order.paid. После возврата мы отправляем POST order.refunded. Соответствуйте продаже с externalInvoiceId (ваш invoiceId) или partnerSessionUid.
payload order.paid (поля хостинг-кассы)
{
"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 для сессий Seller API.
- Дополнительная подпись использует X-RMT-Timestamp и X-RMT-Signature. Проверьте HMAC так же, как и любой другой вебхук продавца.
- checkout.canceled включает причину buyer_canceled, когда покупатель покидает страницу оплаты без оплаты, или причину expired, когда истекает 24-часовой TTL сессии без оплаты.
- checkout.items перечисляет заблокированные строки (name, description, amount, quantity, imageUrl). Значения доставки никогда не включаются в вебхуки.
Не выполняйте двойное выполнение
Digiseller также получает свой собственный колбек платежа. Если вы также прослушиваете checkout.completed, выполняйте заказ только один раз. Сессии API Продавца никогда не отправляют этот колбек Digiseller.
Email гостей и квитанции
Покупатели должны ввести email на странице оплаты, чтобы мы могли отправить квитанцию и налоговый счет. Соответствующие аккаунты RMT прикрепляются без входа покупателя.
- Если email уже принадлежит аккаунту RMT, заказ появляется в Покупках этого аккаунта. На странице оплаты не устанавливается cookie для входа.
- Новый email создает легковесного пользователя, так что квитанции и последующий вход все еще работают.
- Email необходим для завершения оплаты. Ваш магазин все еще должен слушать событие checkout.completed.
Валюты и лимиты
Используйте поддерживаемую валюту ISO, такую как USD или EUR. Оплата картой лучше всего работает в USD или EUR. Криптовалюта и PayPal могут работать с другими валютами, если провайдер их принимает.
Не в этой версии
В этой версии нет iframe SDK, пользовательского домена страницы оплаты или баланса кошелька на хостинговой странице оплаты. Покупатели используют оплату картой, PayPal или криптовалюту с перенаправлением.
Перед тем как выйти в эфир
Контрольный список для тестирования
Модульные тесты охватывают комиссии, HMAC и повторное использование. Пройдите по этому списку на тестовом сервере, прежде чем отправлять реальных покупателей.
- Подайте заявку, подтвердите значок ожидания, затем получите одобрение администратора. Учетные данные появляются только после одобрения. Неодобренный ключ на POST /api/v1/checkout/sessions возвращает 403.
- Создайте сессию с itemName, описанием и categorySlug плюс предложением (или сохранённым по умолчанию). Откройте hosted_url. Заголовок — это название предмета; описание находится ниже. Страница оплаты не имеет верхнего навигационного меню или боковой панели. Оплачивайте картой в USD или EUR. Страницы оплаты картой, PayPal и криптовалютой должны показывать метку каталога, такую как Игры · Дополнения, а не название вашего магазина.
- Подтвердите checkout.completed, который включает invoiceId, checkout.uid и источник, затем выполните заказ в вашем магазине. Отмените страницу оплаты и подтвердите checkout.canceled с причиной buyer_canceled. Позвольте сессии пройти более 24 часов и подтвердите checkout.canceled с причиной expired, которая больше не может быть оплачена.
- Для Digiseller вставьте URL оплаты, URL статуса и секрет оплаты в кастомный метод оплаты. Подтвердите, что Digiseller может видеть статус оплаты, и что вы выполняете заказ только один раз.
- Оплатите с помощью существующего email RMT: заказ попадает в Покупки, и квитанция отправляется, без куки для входа. Новый email создает легковесного пользователя. Email необходим на странице оплаты.
- Скрытое синтетическое предложение не должно появляться в поиске на рынке. На хосте с ограниченным доступом по списку ожидания, маршруты /pay/:uid и адаптера все еще работают.
- Отправьте опциональные imageUrl и items[], если вам нужно изображение продукта или несколько заблокированных строк. Убедитесь, что на странице оплаты нет контролей количества. После оплаты поля доставки появляются в Покупках и на странице заказа. Только HTTPS URL изображений.
Связанные руководства
Подайте заявку на хостинговую кассу
Откройте Настройки → Хостинговая касса, чтобы подать заявку, или перейдите к справке по API после одобрения.