Transaction.PurchaseApprovalResult
当购买批准请求得到处理时发出:父母批准、父母拒绝,或请求在无人答复的情况下到期。这是对 /transaction/request-purchase 调用的答复,也是您的产品获知结果的唯一途径。
请为您的端点订阅此事件
k-ID 只会把 Transaction.PurchaseApprovalResult 投递给已订阅它的端点,其余端点会被丢弃,既不尝试投递也不报错。请在产品的 Developer Settings 页面为您的端点选择它。请参阅开始之前。
一个请求恰好产生一个 Transaction.PurchaseApprovalResult。请通过 data.id 将它与请求关联,该值就是您的产品发送给 /transaction/request-purchase 的 id。
字段
| 字段 | 类型 | 必需 | 说明 |
|---|---|---|---|
eventType | string | 是 | 始终为 "Transaction.PurchaseApprovalResult" |
data | object | 是 | 购买批准结果数据 |
data.id | string (UUID) | 是 | 批准请求 ID,与您的产品发送给 /transaction/request-purchase 的 id 一致 |
data.sessionId | string (UUID) | 是 | 请求购买所针对的会话 ID |
data.productId | number | 是 | 产品 ID |
data.status | string | 是 | approved、denied 或 expired |
data.resolvedAt | string (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 时才完成购买,并把 denied 和 expired 都当作“不要扣款”。由于请求会在 24 小时后到期,请不要无限期等待 Webhook:/transaction/request-purchase 返回的 expiresAt 就是过后不再有答复到来的时点。
投递保证为至少一次,因此同一结果可能到达多次。请按 Webhooks 概述的说明,让您的处理逻辑按 data.id 幂等。
它不会触发的情况
- 该购买没有请求过批准。
- 产品的 Purchase Controls 能力(需要 Transactions)已关闭,因此
/transaction/request-purchase返回FEATURE_DISABLED,不会创建请求。