发送消费信息
本 API 用于在应用用户请求退款时,将用户消费信息发送到应用商店。
'消费信息传输' API 通过 Hive 服务器与应用服务器之间的 Server-to-Server 通信方式运作:Hive 服务器向应用服务器发送消费信息传输请求后,应用服务器将响应值返回给 Hive 服务器。
Note
目前,消费信息的传输仅支持苹果App Store。
操作流程¶
'消费信息传输' API 调用及响应的整体操作流程概括如下。
- 应用:配置 API 端点以准备服务器 URL
- 应用:在 Hive 控制台中选择启用消费信息传输,注册服务器 URL
- 应用客户端:在应用运行状态下同意传输应用内商品消费信息
- 应用用户:在应用中请求退款
- Apple:向 Hive 服务器发送消费信息请求(CONSUMPTION_REQUEST)
- Hive 服务器:向应用注册的服务器 URL 发送 POST API 请求,从应用服务器接收响应值形式的消费信息数据
- Hive 服务器:向应用商店传输消费信息(成功时 Apple 返回 HTTP 202 响应)
Warning
如果应用客户端未在同意弹窗中同意信息传输,即使 Hive 服务器从应用服务器接收到数据,也无法将其传输到应用商店。用户同意与否(customerConsented)并非由应用服务器传输,而是由 Hive 服务器自行设置。
要传输到应用商店的消费信息中,也包含仅存在于应用服务器上的数据。在这种情况下,若要让 Hive 服务器将消费信息传输到应用商店,应用服务器必须先将数据传递给 Hive 服务器。
应用服务器 URL 是应用服务器为向 Hive 服务器传递数据而开放的 API 端点。配置好 API 端点并注册为应用服务器 URL 后,每当用户请求退款时,Hive 服务器都会向该 API 端点发送 POST 请求,并从应用服务器接收所需数据。Hive 服务器会汇总这些数据,并代表应用完成向应用商店传输消费信息。
API 端点配置(服务器 URL)¶
应用服务器在通过注册为服务器 URL 的 API 端点接收请求时,必须根据请求参数中的用户信息(player_id)和交易信息(transaction_id)查询消费信息,并返回符合响应规范的数据。
禁用防火墙规则¶
为使 Hive 服务器能够向应用服务器的 API 端点发送请求,应用服务器需要针对以下 IP 地址禁用防火墙入站规则。
| Hive 服务器 IP |
|---|
| 15.165.223.210 |
| 3.34.158.195 |
| 43.202.20.33 |
| 13.209.91.38 |
| 3.34.235.15 |
| 15.165.134.120 |
禁用防火墙规则后,请参阅以下内容配置 API 端点。
API 请求(Hive 服务器 → 应用服务器)配置¶
这是从 Hive 服务器发送到应用服务器的 POST 请求信息。
| API 信息 | 描述 |
|---|---|
| Method | POST |
| Response Format | JSON |
| Content-type | application/json |
Request body¶
请求正文信息如下所示。
| 名称 | 类型 | 必需 (必需: M, 可选: O) | 描述 |
|---|---|---|---|
| gameindex | Integer | M | 应用中心游戏索引 |
| appid | String | M | 应用中心 AppID |
| server_id | String | M | 应用服务器 ID |
| player_id | String | M | 应用内用户标识符(购买验证时使用的用户识别值)。对应 V1 的 user_seq |
| transaction_id | String | M | Apple 原始交易 ID(originalTransactionId) |
请求正文示例如下所示。
{
"gameindex": 539,
"appid": "com.com2us.hivesdk.normal.freefull.apple.global.ios.universal",
"server_id": "server_01",
"player_id": "222333",
"transaction_id": "2000000123456789"
}
API 响应(应用服务器 → Hive 服务器)配置¶
应用服务器需要将处理结果代码(code)、结果消息(message)、消费信息(data)传递给 Hive 服务器。
Response body¶
Hive 服务器通过 code 值判断是否成功。若为 200 则视为成功并使用 data,其他代码则不传输该条数据,并将 message 记录为原因。code 为必填项,如果未发送,将作为错误处理,不传输该条数据。
| 名称 | 类型 | 必需 (必需: M, 可选: O) | 描述 |
|---|---|---|---|
| code | Integer | M | 处理结果代码(请参考下表)。仅 200 为成功,其他代码均作为错误处理 |
| message | String | O | 处理结果消息,用于错误时说明原因 |
| data | Object | M | 响应数据(成功时必填) |
| ┕ delivery_status | String | M | 消耗性商品的传递状态,须为下列传递状态值之一 |
| ┕ refund_preference | String | O | 退款偏好,须为下列退款偏好值之一 |
| ┕ consumption_percentage | Integer | O | 消费比例,单位为 millipercent,取值范围 0~100000(100000 = 100%) |
| ┕ sample_content_provided | Integer | O | 是否提供示例内容,0 或 1 |
响应成功示例如下所示。
{
"code": 200,
"message": "OK",
"data": {
"delivery_status": "DELIVERED",
"refund_preference": "GRANT_FULL",
"consumption_percentage": 100000,
"sample_content_provided": 0
}
}
响应代码¶
| 值 | 描述 |
|---|---|
| 200 | 成功 |
| 400 | 请求值有误 |
| 500 | 服务器错误 |
传递状态(delivery_status)¶
表示消耗性商品的传递状态,必须为以下 5 个值之一(必填)。
| 值 | 含义 |
|---|---|
| DELIVERED | 消耗性商品已正常传递且可正常使用 |
| UNDELIVERED_QUALITY_ISSUE | 因质量问题未能传递 |
| UNDELIVERED_WRONG_ITEM | 传递了与购买内容不符(错误)的商品 |
| UNDELIVERED_SERVER_OUTAGE | 因服务器故障未能传递 |
| UNDELIVERED_OTHER | 因其他原因未能传递 |
退款偏好(refund_preference)¶
将应用倾向的退款处理方式传递给 Apple(可选)。发送该值时须为以下 3 个值之一。
| 值 | 含义 |
|---|---|
| GRANT_FULL | 倾向于给予全额退款 |
| DECLINE | 倾向于不退款(拒绝) |
| GRANT_PRORATED | 倾向于给予部分(按比例)退款(主要用于订阅) |
Warning
以下值无效时,将不会传输到应用商店,该条数据会被排除。
delivery_status为必填项,且须为上述 5 个值之一。- 发送
refund_preference时须为上述 3 个值之一。 - 发送
consumption_percentage时须为 0~100000 范围内的整数。
Note
以下是 Hive 服务器根据 Apple 规则自动调整的行为。
- 若
delivery_status不是DELIVERED,则consumption_percentage将以 0 发送。 - 若
refund_preference为GRANT_PRORATED(订阅),则会省略consumption_percentage。