IAP v4 通知实时订阅

實時訂閱通知幫助您的遊戲實現多種訂閱類型,例如在寬限期內、暫停和掛起,通過接收訂閱狀態。實時訂閱通知 APIIAP 伺服器端調用,並將請求發送到您的遊戲伺服器。它將通過此 API 的請求主體實時傳遞用戶訂閱的狀態變更。因此,您的遊戲伺服器應提供一個 API 端點 (URL) 以接收此信息到 Hive 伺服器。

API URL 可以在 the Hive 控制台 > App Center > Game List > Game details > Game server > Market Server Notification URL 中註冊。如果遊戲伺服器按地區劃分,且每個地區都應接收通知,請逐一提供 URL。然後,IAP 將通知發送到所有遊戲伺服器。

 

IAP 將實時訂閱狀態從 Hive 伺服器發送到遊戲伺服器。因此,請確保遊戲伺服器打開以下伺服器 IP 的入站防火牆以接收通知。

  • 43.202.181.138
  • 3.38.239.17

 

  • 請求 規範 ( IAP > 遊戲 伺服器)
    欄位名稱 描述 類型 是否必填
    notification_type

      通知類型

    • Apple
    • Google: 在寬限期/暫停/掛起的訂閱基於 hiveiap_receipt_subscription_state 的值。請將此欄位用作參考資料。
    字串 Y
    sub_type 通知的子類型。僅適用於 Apple 通知 子類型資訊 字串 N
    hiveiap_market_id 付費市場代碼
    1. Apple App Store
    2. Google Play Store
    整數 Y
    hiveiap_receipt_verify_result 從市場驗證伺服器發送的收據的驗證結果 物件 Y
    hiveiap_receipt_start_date_ms 訂閱的開始時間 (Unix 時間戳毫秒) 字串 Y
    hiveiap_receipt_expire_date_ms 訂閱的結束時間 (Unix 時間戳毫秒) 如果此值已更改,您需要在您的遊戲中應用此值以適用於所有通知類型。例如,您需要更改用戶遊戲項目的訂閱到期日期。 字串 Y
    hiveiap_receipt_autoresume_date_ms
    • 如果訂閱已暫停,則為訂閱恢復的時間 (Unix 時間戳毫秒)
    • 如果訂閱未暫停,則收到“”
    字串 N
    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。 整數 Y
    hiveiap_receipt_refund_date_ms 這是進行購買退款的時間(unix 時間戳,毫秒)。預設值為 0。 整數 Y
  • 呼叫 ( 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: 應用成功。除非遊戲伺服器錯誤,否則回應為成功
    • 其他代碼: 應用失敗
    整數 Y
    result_msg 回應訊息 字串 Y

    • 回應 (遊戲 伺服器 > 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>