본문으로 건너뛰기

Transaction.PurchaseApprovalResult

구매 승인 요청이 해결될 때 발생합니다. 부모가 승인했거나, 부모가 거부했거나, 답변 없이 만료된 경우입니다. 이것은 /transaction/request-purchase 호출에 대한 답변이며 제품이 결과를 알 수 있는 유일한 방법입니다.

엔드포인트를 이 이벤트에 구독하세요

k-ID는 Transaction.PurchaseApprovalResult를 구독한 엔드포인트에만 전달하고, 나머지에는 전달 시도나 오류 없이 버립니다. 제품의 Developer Settings 페이지에서 엔드포인트에 대해 선택하세요. 시작하기 전에를 참조하세요.

하나의 요청에 대해 Transaction.PurchaseApprovalResult는 정확히 한 번 발생합니다. /transaction/request-purchase에 제품이 보낸 id와 같은 값인 data.id로 요청과 연결하세요.

필드

필드유형필수설명
eventTypestring항상 "Transaction.PurchaseApprovalResult"
dataobject구매 승인 결과 데이터
data.idstring (UUID)승인 요청 ID로, 제품이 /transaction/request-purchase에 보낸 id와 일치합니다
data.sessionIdstring (UUID)구매가 요청된 세션 ID
data.productIdnumber제품 ID
data.statusstringapproved, denied 또는 expired
data.resolvedAtstring (date-time)요청이 이 결과에 도달한 시각으로, RFC 3339 형식입니다

예시

{
"eventType": "Transaction.PurchaseApprovalResult",
"data": {
"id": "9d4e2f81-7a3b-4c56-8e90-1f2a3b4c5d6e",
"sessionId": "b1a6482d-5242-4b4a-aa88-3fa52595a672",
"productId": 42,
"status": "approved",
"resolvedAt": "2026-06-24T15:12:00Z"
}
}

상태

status의미대응
approved부모가 구매를 승인했습니다.구매를 완료합니다.
denied부모가 구매를 거절했습니다.청구하지 마세요. 부모가 거절했음을 플레이어에게 알립니다.
expired요청 후 24시간 안에 부모가 답변하지 않았습니다.청구하지 마세요. 플레이어에게 구매를 다시 제안할 수 있습니다.

expired는 오류가 아니며 전달 실패도 아닙니다. 요청이 만료된 후 플레이어에게 구매를 다시 제안할 수 있습니다.

청구하기 전에 승인받으세요

결과는 구매를 게이트하며, 구매를 기록하는 것이 아닙니다. approved일 때만 구매를 완료하고, deniedexpired는 모두 "청구하지 않음"으로 처리하세요. 요청은 24시간 후에 만료되므로 웹훅을 무한정 기다리지 마세요. /transaction/request-purchase가 반환한 expiresAt이 그 이후로는 답변이 오지 않는 시점입니다.

전달은 최소 한 번이므로 같은 결과가 두 번 이상 도착할 수 있습니다. 웹훅 개요의 설명대로 핸들러를 data.id에 대해 멱등하게 만드세요.

발생하지 않는 경우

  • 구매에 대해 승인이 요청되지 않았습니다.
  • 제품에서 Purchase Controls 기능(Transactions 필요)이 꺼져 있어 /transaction/request-purchaseFEATURE_DISABLED를 반환하고 요청이 생성되지 않습니다.