提交会话已完成的资金流转交易
为某个 k-ID 会话提交一笔或多笔已完成的购买。每个事件记录买了什么、花费多少,以及扣款是否成功。请在购买完成后调用本接口;对于周期性购买,每次续订都需提交。 对于已尝试但未完成的扣款,请将 `status` 设为 `failed`,以便家长区分两者。 各事件独立处理。响应中包含每个事件的状态: * `accepted` - 购买已记录。重复提交 `id` 已被接受的事件是安全的空操作:它会再次计为 `accepted`,不会被重复记录,因此网络故障后的重试不会重复累计。 * `rejected` - 购买未通过校验;`reason` 指明违反了哪条规则。 若会话不存在或已被撤销,则整批请求被拒绝。
Authorization
api-key In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/transaction/push" \ -H "Content-Type: application/json" \ -d '{ "sessionId": "b1a6482d-5242-4b4a-aa88-3fa52595a672", "events": [ { "id": "9d4e2f81-7a3b-4c56-8e90-1f2a3b4c5d6e", "type": "purchase", "title": "Starter Pack", "description": "500 coins and a cosmetic item", "amount": 499, "currency": "USD", "timestamp": "2026-06-24T09:00:00Z", "status": "successful", "url": "https://your-webstore.example.com/manage?ref=order-4455667" } ] }'{ "sessionId": "b1a6482d-5242-4b4a-aa88-3fa52595a672", "accepted": 1, "rejected": 0, "events": [ { "id": "9d4e2f81-7a3b-4c56-8e90-1f2a3b4c5d6e", "status": "accepted" } ]}{ "error": "INVALID_INPUT", "errorMessage": "The request was missing a sessionId parameter."}将名义销售方的支付信息规范化为标准格式 POST
将名义销售方(merchant of record)的原始支付载荷规范化为与提供方无关的标准结构,使后续的交易接口无需了解各家提供方的格式。 在 `provider` 中指明名义销售方,并在 `data` 中传入其原始载荷。对于 Xsolla,该载荷是 `payment` webhook 的正文,且必须包含卡片 BIN。
为购买请求家长批准 POST
就一笔购买请求玩家的受信成年人予以批准。请在扣款前调用本接口,并且只在批准到达后再完成购买。请求会保留至 `expiresAt`,此后既不能批准也不能拒绝。 结果通过 `Transaction.PurchaseApprovalResult` webhook 送达,其中携带 `approved`、`denied` 或 `expired`。请将 `expiresAt` 视为截止时间,而不要无限期等待 webhook。 重复提交一个已在等待决定的 `id` 是安全的空操作:会原样返回待处理的请求,不会创建第二个请求,因此网络故障后的重试不会重复提示。 每位玩家最多可有 20 笔购买处于等待决定状态;超出后调用会被 `INVALID_INPUT` 拒绝,直到其中一笔得到处理。