IAP v4 实时订阅通知

实时订阅通知帮助您的游戏实现多种类型的订阅,例如宽限期、暂停和暂停,通过接收订阅状态。实时订阅通知 APIIAP 服务器端调用,并将请求发送到您的游戏服务器。它将通过此 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

      通知类型

    • 苹果
    • 谷歌: 订阅在宽限期/挂起/暂停状态下,基于 hiveiap_receipt_subscription_state 的值。请将此字段用作参考数据。
    字符串
    sub_type 通知的子类型。仅适用于苹果通知 子类型信息 字符串
    hiveiap_market_id 付费市场代码
    1. 苹果应用商店
    2. 谷歌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

    订阅状态

    1. 活跃
    2. 在宽限期
    3. 挂起
    4. 暂停
    5. 过期
    目前仅可发送 Google 订阅数据。根据修订后的 Google 政策,从 2020 年 11 月 1 日起,帐户保留和恢复功能是必需的。此 API 检查订阅状态。
    • 宽限期:它将到期延长,直到用户的支付状态恢复正常(仅适用于在 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 > 游戏 服务器)
> POST /hive/Iap_subscription_notification HTTP/2
> Host: misample.com2us.net // (游戏服务器提供的API端点示例)
> user-agent: curl/7.68.0
> accept: /> content-type: text/html
> content-length: 1211
> POST /hive/Iap_subscription_notification HTTP/2
> Host: misample.com2us.net // (游戏服务器提供的API端点示例)
> user-agent: curl/7.68.0
> accept: /> content-type: text/html
> content-length: 1369

 

  • 响应规范 (游戏 服务器 > IAP)
    字段名称 描述 类型 是否必填
    result_code 响应代码
    • 0: 应用成功。除非游戏服务器错误,否则响应为成功
    • 其他代码: 应用失败
    整数
    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>