호스팅 체크아웃 작동 방식
RMT.GG는 상인으로 남아 있습니다. 귀하의 파트너샵은 잠긴 금액과 통화를 보냅니다. 구매자는 우리의 호스팅 페이지에서 결제합니다. 결제 후 귀하의 상점에서 상품을 배송합니다. 주문은 자동으로 완료되어 지갑 정산이 진행됩니다.
- 구매자는 귀하가 보낸 정확한 금액과 통화를 지불합니다. 우리는 이를 부풀리지 않습니다.
- 귀하의 판매자 수수료는 그 잠긴 금액의 4%입니다. 마켓플레이스 목록은 일반적으로 5%입니다.
- 카드, PayPal 및 암호화폐 처리 수수료는 이 흐름에서 플랫폼이 부담합니다.
허용 목록 필요
설정, 호스팅 체크아웃에서 신청한 후 관리자의 승인을 기다리세요. 승인되지 않은 API 키는 CHECKOUT_PARTNER_NOT_APPROVED를 받습니다.
신청하고 승인받기
승인 후, checkout:write 권한이 있는 API 키와 Hosted checkout 설정 페이지에서 checkout.completed에 대한 JSON 웹훅을 생성하세요. 승인 전까지는 호스팅된 체크아웃 API가 차단됩니다.
- 1설정 → 호스팅 체크아웃을 열고 상점 URL과 체크아웃 사용 방법에 대한 간단한 메모를 제출하세요.
- 2관리자가 승인할 때까지 기다리세요. 그때까지는 대기 중 배지가 표시됩니다.
- 3승인 후, Settings → Hosted checkout에서 API 키와 checkout.completed에 대한 JSON 웹훅을 생성하세요.
판매자 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입니다. 선택적 필드: description, HTTPS imageUrl, email(결제 페이지를 미리 채움), returnUrl, cancelUrl, invoiceId, categorySlug 및 offering(둘 다 또는 둘 다 없음)과 메타데이터입니다. itemName은 결제 페이지 제목이며, description은 그 아래의 긴 설명입니다. 구매자는 결제 전에 유효한 이메일을 확인해야 합니다. 결제 후 구매자는 RMT.GG 확인 페이지에 머무르며 배송 필드를 복사할 수 있습니다. returnUrl을 설정하고 배송 필드가 있는 경우, 해당 화면에서 상점으로 이동합니다. 배송 필드가 없으면 짧은 카운트다운 후 다시 돌아옵니다. returnUrl 또는 cancelUrl을 생략하면, 구매자는 결제, 취소 또는 만료 후 RMT.GG 결제 페이지에 머무릅니다.
- 성공 시, 해당 URL이 HTTPS(또는 localhost)일 때 returnUrl에 ?order=로 주문 uid를 추가합니다.
- Idempotency-Key 또는 invoiceId 값을 반복하면 동일한 세션을 재사용하고 중복을 생성하지 않습니다.
- itemName과 설명은 RMT 결제 페이지에만 표시됩니다. 카드, PayPal 및 암호화폐 결제는 항상 상점 제목이 아닌 Games · Add-ons와 같은 카탈로그 코드 레이블을 사용합니다. 기본값은 설정, 호스팅 결제에서 설정하거나 세션에서 categorySlug와 offering을 전송하세요.
- 세션은 24시간 동안 지속됩니다. 그 이후에는 결제 페이지가 완료되지 않으며, 진행 중인 Stripe 및 PayPal 세션이 종료되고, 우리는 checkout.canceled를 이유가 만료됨으로 POST합니다.
- items[]는 단일 amount와 itemName 본문의 다중 행 대안입니다. 각 행에는 이름과 금액이 필요합니다. items가 있는 경우 amount는 생략할 수 있으며 행에서 계산되거나 전송할 경우 합계와 일치해야 합니다. 수량은 rmt.gg에서 고정되어 있습니다: 구매자는 행을 추가, 제거 또는 변경할 수 없습니다. imageUrl은 HTTPS여야 하며, 우리는 이를 가져오지 않습니다. 선택적 배송 필드(텍스트, 비밀번호 또는 텍스트 영역)는 이름과 값이 필요합니다. 결제 후 확인 페이지와 구매 내역에 표시됩니다. 공개 세션 GET은 결제 후에만 배송 값을 포함합니다. 판매자 GET 및 웹훅은 결코 포함하지 않습니다.
결제 상태 확인
먼저 checkout.completed를 수신하세요. 웹훅이 지연되면 세션을 GET하세요. 구매자가 결제했을 때 paid는 true입니다. 세션 uid 또는 보낸 invoiceId로 조회할 수 있습니다.
- 세션을 생성할 때 반환된 uid를 사용하여 GET /api/v1/checkout/sessions/{uid}를 호출하세요.
- 자신의 invoice id를 저장한 경우 GET /api/v1/checkout/sessions?invoiceId=YOUR_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설정 → Hosted checkout에서 결제 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 엔드포인트를 마켓플레이스 판매와 동일한 이벤트에 지정하세요. 결제 후 order.paid를 POST합니다. 환불 후 order.refunded를 POST합니다. 판매를 externalInvoiceId(귀하의 invoiceId) 또는 partnerSessionUid로 매칭하세요.
order.paid 페이로드 (호스팅 체크아웃 필드)
{
"id": "whd_…",
"type": "order.paid",
"created": "2026-08-14T12:00:00.000Z",
"data": {
"order": {
"uid": "ord_…",
"status": "PAID",
"partnerSessionUid": "…",
"externalInvoiceId": "inv-12345",
"partnerSource": "api"
}
}
}- source는 Seller API 세션을 위한 API입니다.
- 선택적 서명은 X-RMT-Timestamp와 X-RMT-Signature를 사용합니다. HMAC을 다른 판매자 웹훅과 동일한 방식으로 검증하세요.
- checkout.canceled는 구매자가 결제 페이지를 떠날 때 구매자가 취소한 이유를 buyer_canceled로 포함하며, 24시간 세션 TTL이 만료되었을 때는 이유가 expired로 포함됩니다.
- checkout.items는 잠긴 항목(이름, 설명, 금액, 수량, imageUrl)을 나열합니다. 배송 값은 웹훅에 포함되지 않습니다.
중복 이행하지 마세요
Digiseller는 자체 결제 콜백도 받습니다. checkout.completed를 수신하는 경우 주문을 한 번만 이행하세요. Seller API 세션은 Digiseller 콜백을 절대 전송하지 않습니다.
게스트 이메일 및 영수증
구매자는 결제 페이지에 이메일을 입력해야 영수증과 세금 계산서를 보낼 수 있습니다. 일치하는 RMT 계정은 구매자가 로그인하지 않고도 연결됩니다.
- 이메일이 이미 RMT 계정에 속하는 경우, 주문은 해당 계정의 구매 목록에 나타납니다. 결제 페이지에서는 로그인 쿠키가 설정되지 않습니다.
- 새 이메일은 경량 사용자 생성으로 영수증 및 이후 로그인도 작동합니다.
- 결제를 완료하려면 이메일이 필요합니다. 귀하의 상점은 여전히 checkout.completed를 수신해야 합니다.
통화 및 한도
USD 또는 EUR와 같은 지원되는 ISO 통화를 사용하세요. 카드 결제는 USD 또는 EUR에서 가장 잘 작동합니다. 제공자가 수락하는 경우 다른 통화에 대해서도 암호화폐와 PayPal이 작동할 수 있습니다.
이 버전에서는 지원되지 않음
호스팅 결제 페이지에는 iframe SDK, 맞춤 결제 페이지 도메인 또는 지갑 잔액이 없습니다. 구매자는 카드, PayPal 또는 암호화폐 리디렉션 체크아웃을 사용합니다.
라이브 전 확인 사항
스테이징 체크리스트
단위 테스트는 수수료, HMAC 및 재사용을 포함합니다. 실제 구매자를 보내기 전에 스테이징에서 이 목록을 확인하세요.
- 신청하고, 대기 중 배지를 확인한 후 관리자가 승인하도록 하세요. 자격 증명은 승인될 때만 나타납니다. POST /api/v1/checkout/sessions에서 승인되지 않은 키는 403을 반환합니다.
- itemName, 설명, categorySlug 및 offering(또는 저장된 기본값)으로 세션을 생성하세요. hosted_url을 엽니다. 제목은 아이템 이름이며, 설명은 그 아래에 있습니다. 결제 페이지에는 상단 내비게이션이나 사이드바가 없습니다. USD 또는 EUR로 카드로 결제하세요. 카드, PayPal 및 암호화폐 페이지는 '게임 · 추가 콘텐츠'와 같은 카탈로그 레이블을 표시해야 하며, 상점 제목은 표시되지 않아야 합니다.
- checkout.completed를 확인하면 invoiceId, checkout.uid 및 source가 포함되며, 이후 상점에서 이행합니다. 결제 페이지를 취소하고 reason buyer_canceled로 checkout.canceled를 확인하세요. 세션이 24시간을 초과하도록 두고 checkout.canceled를 reason expired로 확인하면 여전히 결제할 수 없습니다.
- Digiseller의 경우, 결제 URL, 상태 URL 및 결제 비밀을 맞춤 결제 방법에 붙여넣으세요. Digiseller가 결제 상태를 확인할 수 있는지 확인하고, 주문을 한 번만 이행하세요.
- 기존 RMT 이메일로 결제: 주문은 구매 목록에 들어가고 영수증이 발송되며, 로그인 쿠키가 없습니다. 새로운 이메일은 경량 사용자 계정을 생성합니다. 결제 페이지에서 이메일이 필요합니다.
- 숨겨진 합성 제공은 마켓플레이스 검색에 나타나지 않아야 합니다. 대기 리스트가 있는 호스트에서는 /pay/:uid 및 어댑터 경로가 여전히 작동합니다.
- 제품 이미지나 여러 개의 잠긴 항목이 필요하면 선택적 imageUrl 및 items[]를 전송하세요. 결제 페이지에 수량 조절이 없음을 확인하세요. 결제 후 배송 필드는 구매 내역 및 주문 페이지에 나타납니다. HTTPS 이미지 URL만 가능합니다.
관련 가이드
호스팅 체크아웃 신청하기
설정 → 호스팅 체크아웃을 열어 신청하거나 승인 후 API 참조로 이동하세요.