IAP v4 实时订阅通知
实时订阅通知帮助您的游戏实现多种类型的订阅,例如宽限期、暂停和暂停,通过接收订阅状态。实时订阅通知 API 从 IAP 服务器端调用,并将请求发送到您的游戏服务器。它将通过此 API 的请求体实时传递用户订阅的状态变化。因此,您的游戏服务器应提供一个 API 端点(URL)以接收此信息到 Hive 服务器。
API URL 可以在 the Hive 控制台 > 应用 中心 > 游戏 列表 > 游戏 详情 > 游戏 服务器 > 市场 服务器通知 URL 中注册。如果游戏服务器按区域划分,并且每个区域都应该接收通知,请逐个提供 URL。然后,IAP 将通知发送到所有游戏服务器。
IAP 将实时订阅状态从 Hive 服务器发送到游戏服务器。因此,请确保游戏服务器打开以下服务器 IP 的入站防火墙以接收通知。
- 43.202.181.138
- 3.38.239.17
- 请求 规范 ( IAP > 游戏 服务器)
字段名称 描述 类型 必需 notification_type 字符串 是 sub_type 通知的子类型。仅适用于苹果通知 子类型信息。 字符串 否 hiveiap_market_id 付费市场代码 - 苹果应用商店
- 谷歌Play商店
整数 是 hiveiap_receipt_verify_result 来自市场验证服务器发送的收据的验证结果 对象 是 hiveiap_receipt_start_date_ms 订阅的开始时间 (Unix时间戳毫秒) 字符串 是 hiveiap_receipt_expire_date_ms 订阅的结束时间 (Unix时间戳毫秒) 如果此值被更改,您需要在您的游戏中应用此值以适用于所有通知类型。例如,您需要更改用户游戏项目的订阅到期日期。 字符串 是 hiveiap_receipt_autoresume_date_ms - 如果订阅被暂停,则为订阅恢复时间 (Unix时间戳毫秒)
- 如果订阅未暂停,则接收到“”
字符串 否 hiveiap_receipt_subscription_state 订阅状态
- 活跃
- 在宽限期
- 挂起
- 暂停
- 过期
- 宽限期:它将到期延长,直到用户的支付状态恢复正常(仅适用于在 Google Play 控制台上设置的宽限期)。
- 帐户保留:由于支付存在问题以及到期时间结束,未授予使用内容的权限,但在支付状态恢复正常后恢复已付费订阅时,它会延长订阅到期时间(保持保留状态最长 30 天)。
整数 N hiveiap_apple_info 该对象具有用于识别Apple订阅收据的键值,仅用于App Store订阅收据。仅在响应代码为0(验证成功)时提供。 对象 N ㄴ original_transaction_id 这是识别Apple订阅收据的键值。对于App Store账户,该值在购买相同产品或在同一组中升级、降级、重新购买或取消购买时保持不变(允许16个字符,但由于没有关于该字符串长度的具体指南,可能会有所不同)。 字符串 N hiveiap_google_info 用于识别Google订阅收据验证结果中的收据的键值 仅适用于Play Store上的订阅收据。仅在响应代码为0(验证成功)时发送该值。 对象 N ㄴ purchase_token 收据中的购买令牌。 令牌值需要200个字符及以上,长度变化可用,因为Google指南没有限制。 字符串 N ㄴ purchase_token_hash 通过对`purchase_token`字段的值进行哈希生成(sha1)。 由于`purchase_token`值的长度较长,处理哈希以便从数据库中搜索并保存(40个字符)。 字符串 N ㄴ linked_purchase_token 如果在升级、降级、取消或重新激活后新发出订阅收据,则该字段的值可以识别旧收据中的购买令牌。 如果存在值,建议强制过期。 令牌值需要200个字符及以上,长度变化可用,因为Google指南没有限制。 (但是,在Play Store上重新激活时不会有新发放) 字符串 N ㄴ linked_purchase_token_hash 通过对`linked_purchase_token`字段的值进行哈希生成(sha1)。 由于`linked_purchase_token`值的长度较长,处理哈希以便从数据库中搜索并保存(40个字符)。 字符串 N hiveiap_iap_payload 这是游戏公司定义的购买元信息。 如果没有定义元信息,则返回 `null`。 字符串 是 hiveiap_receipt_cancel_date_ms 这是订阅被取消的时间(unix 时间戳,毫秒)。默认值为 0。 整数 是 hiveiap_receipt_refund_date_ms 这是进行购买退款时的时间(unix 时间戳,毫秒)。默认值为 0。 整数 是
- 拨打 ( IAP > 游戏 服务器)
curl -L -v
-d '{"notification_type":"SUBSCRIBED","sub_type":"RESUBSCRIBE","hiveiap_market_id":1,"hiveiap_market_pid":"com.com2us.hivesdk.normal.freefull.apple.global.ios.universal.arshive001","hiveiap_receipt_verify_result":{"status":0,"receipt":{"transactionId":"2000000326618738","originalTransactionId":"2000000287618347","webOrderLineItemId":"2000000026848658","bundleId":"com.com2us.hivesdk.normal.freefull.apple.global.ios.universal","productId":"com.com2us.hivesdk.normal.freefull.apple.global.ios.universal.arshive001","subscriptionGroupIdentifier":"20519034","purchaseDate":1683534980000,"originalPurchaseDate":1677492217000,"expiresDate":1683535160000,"quantity":1,"type":"Auto-Renewable Subscription","appAccountToken":"5e657cde-3651-34c0-93fa-1e9cfccfafa2","inAppOwnershipType":"PURCHASED","signedDate":1688470718581,"environment":"Sandbox","transactionReason":"RENEWAL","storefront":"KOR","storefrontId":"143466"}},"hiveiap_receipt_start_date_ms":"1683534980000","hiveiap_receipt_expire_date_ms":"1683535160000","hiveiap_apple_info":{"original_transaction_id":"2000000287618347"},"hiveiap_iap_payload":"{\"server\":\"1\",\"character\":\"1\"}","hiveiap_receipt_cancel_date_ms":0,"hiveiap_receipt_refund_date_ms":0}' \
-H "Content-Type: text/html" \
https://sandbox-misample.com2us.net/hive/Iap_subscription_notification // (the API endpoint example provided from your game server)
curl -L -v
-d '{"notification_type":"13","hiveiap_market_id":2,"hiveiap_market_pid":"sub01","hiveiap_receipt_verify_result":{"kind":"androidpublisher#subscriptionPurchaseV2","startTime":"2023-07-25T08:00:19.285Z","regionCode":"KR","subscriptionState":"SUBSCRIPTION_STATE_EXPIRED","latestOrderId":"GPA.3319-2535-4331-99754..0","canceledStateContext":{"userInitiatedCancellation":{"cancelTime":"2023-07-25T08:07:21.881Z"}},"testPurchase":[],"acknowledgementState":"ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED","externalAccountIdentifiers":{"obfuscatedExternalAccountId":"84530982-c9c3-3114-b0dc-848dd7e8bf76"},"lineItems":[{"productId":"sub01","expiryTime":"2023-07-25T08:10:09.583Z","autoRenewingPlan":[],"offerDetails":{"basePlanId":"p1w"}}]},"hiveiap_receipt_start_date_ms":"1690272019000","hiveiap_receipt_expire_date_ms":"1690272609000","hiveiap_receipt_autoresume_date_ms":"","hiveiap_receipt_subscription_state":4,"hiveiap_google_info":{"purchase_token_hash":"5a109e5da69467a706a180fca423e09ab7671389","purchase_token":"eejgienjlbapbnojcnjipdib.AO-J1OxxtNGzvOT7-mSeeAORzZ0GZ90t33v7UQn-t4xPAPGLCQqQAPFmvDK3p3wO8ZwXfYCwmVk9pTI93P8k4IyZJn2XI7ES-EJEFPOLpmUzlXXsOndqbhu1oPRu7V4ddTIUCVB_cHjGKvRnZu1DUu2dEd603grO2Q","linked_purchase_token":"","linked_purchase_token_hash":""},"hiveiap_iap_payload":null,"hiveiap_receipt_cancel_date_ms":1690272441000,"hiveiap_receipt_refund_date_ms":0}' \
-H "Content-Type: text/html" \ (the API endpoint example provided from your game server)
- 请求 ( IAP > 游戏 服务器)
字段名称 | 描述 | 类型 | 是否必填 |
result_code | 响应代码
| 整数 | 是 |
result_msg | 响应消息 | 字符串 | 是 |
- 响应 (游戏 服务器 > IAP)
< HTTP/2 200
< server: nginx
< date: Fri, 25 Mar 2022 06:56:17 GMT
< content-type: application/json; charset=utf-8
{"result_code":0,"result_msg":"OK"}</pre>