IAP v4 实时订阅通知
通过实时订阅通知,游戏服务器实时接收来自Hive IAP服务器的用户订阅状态信息。用户可以利用这些信息实现订阅暂停、保留和暂停功能。
Warning
要使用实时订阅通知功能,您必须在市场控制台中设置通知 URL。
实时订阅通知 API 通过从 Hive IAP 服务器向游戏服务器发出调用来工作,并在请求体中包含订阅状态更改信息,并实时传输。由于游戏服务器接收到订阅状态更改信息,因此必须向 Hive 提供 API 端点 (URL)。
API URL 可以在 the Hive 控制台 > App Center > Game List > Game details > Game server > Market 服务器通知 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" \ (游戏服务器提供的API端点示例)
- 请求 ( 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>