IAP v4 แจ้งเตือนการสมัครสมาชิกแบบเรียลไทม์

การแจ้งเตือนการสมัครสมาชิกแบบเรียลไทม์ช่วยให้เกมของคุณสามารถดำเนินการสมัครสมาชิกประเภทต่างๆ เช่น ในช่วงเวลาที่ได้รับการยกเว้น, หยุดชั่วคราว, และหยุดโดยการรับสถานะการสมัครสมาชิก การแจ้งเตือนการสมัครสมาชิกแบบเรียลไทม์ API จะถูกเรียกจากฝั่งเซิร์ฟเวอร์ IAP และจะส่งคำขอไปยังเซิร์ฟเวอร์เกมของคุณ มันจะส่งการเปลี่ยนแปลงสถานะของการสมัครสมาชิกของผู้ใช้ผ่านเนื้อหาคำขอของ API นี้แบบเรียลไทม์ ดังนั้นเซิร์ฟเวอร์เกมของคุณควรจัดเตรียมจุดสิ้นสุด API (URL) เพื่อรับข้อมูลนี้ไปยัง Hive Server.

URL ของ API สามารถลงทะเบียนได้ใน the Hive Console > App Center > Game List > Game details > Game server > Market Server Notification URL หากเซิร์ฟเวอร์เกมถูกแบ่งตามภูมิภาคและแต่ละภูมิภาคต้องการรับการแจ้งเตือน ให้จัดเตรียม URL ทีละรายการ จากนั้น IAP จะส่งการแจ้งเตือนไปยังเซิร์ฟเวอร์เกมทั้งหมด.

 

IAP ส่งสถานะการสมัครสมาชิกแบบเรียลไทม์จาก Hive Server ไปยังเซิร์ฟเวอร์เกม ดังนั้นโปรดตรวจสอบว่าเซิร์ฟเวอร์เกมเปิดไฟร์วอลล์ขาเข้าของเซิร์ฟเวอร์ IP ต่อไปนี้เพื่อรับการแจ้งเตือน.

  • 43.202.181.138
  • 3.38.239.17

 

  • Request Specification ( IAP > Game server)
    ชื่อฟิลด์ คำอธิบาย ประเภท จำเป็น
    notification_type

      ประเภทการแจ้งเตือน

    • Apple
    • Google: การสมัครสมาชิกในระยะเวลาผ่อนผัน/ระงับ/หยุดชั่วคราว ขึ้นอยู่กับค่าของ hiveiap_receipt_subscription_state กรุณาใช้ฟิลด์นี้เป็นข้อมูลอ้างอิง.
    String Y
    sub_type ประเภทย่อยของการแจ้งเตือน ใช้เฉพาะสำหรับการแจ้งเตือนของ Apple ข้อมูลประเภทย่อย. String N
    hiveiap_market_id รหัสตลาดที่ชำระเงิน
    1. Apple App Store
    2. Google Play Store
    Integer Y
    hiveiap_receipt_verify_result ผลการตรวจสอบใบเสร็จที่ส่งจากเซิร์ฟเวอร์การตรวจสอบตลาด Object Y
    hiveiap_receipt_start_date_ms เวลาเริ่มต้นของการสมัครสมาชิก (Unix TimeStamp Milliseconds) String Y
    hiveiap_receipt_expire_date_ms เวลาสิ้นสุดของการสมัครสมาชิก (Unix TimeStamp Milliseconds) หากค่าตัวนี้ถูกเปลี่ยนแปลง คุณต้องนำไปใช้ในเกมของคุณสำหรับประเภทการแจ้งเตือนทั้งหมด ตัวอย่างเช่น คุณต้องเปลี่ยนวันที่หมดอายุของการสมัครสมาชิกของไอเท็มเกมของผู้ใช้ในเกมของคุณ. String Y
    hiveiap_receipt_autoresume_date_ms
    • เวลาที่การสมัครสมาชิกกลับมาทำงานอีกครั้งหากการสมัครสมาชิกถูกหยุดชั่วคราว (Unix TimeStamp Milliseconds)
    • “” จะถูกส่งหากการสมัครสมาชิกไม่ได้ถูกหยุดชั่วคราว
    String N
    hiveiap_receipt_subscription_state

    สถานะการสมัครสมาชิก

    1. ใช้งาน
    2. ในระยะเวลาผ่อนผัน
    3. ระงับ
    4. หยุดชั่วคราว
    5. หมดอายุ
    ขณะนี้ข้อมูลการสมัครสมาชิกของ Google เท่านั้นที่สามารถส่งได้ ฟีเจอร์การระงับบัญชีและการกู้คืนเป็นสิ่งจำเป็นตั้งแต่วันที่ 1 พฤศจิกายน 2020 โดยปฏิบัติตามนโยบาย Google ที่แก้ไขแล้ว API นี้ตรวจสอบสถานะการสมัครสมาชิก
    • ระยะเวลาผ่อนผัน: ขยายวันหมดอายุจนกว่าสถานะการชำระเงินของผู้ใช้จะกลับสู่ปกติ (ใช้เฉพาะในระยะเวลาผ่อนผันที่ตั้งไว้ใน Google Play Console).
    • การระงับบัญชี: การอนุญาตให้ใช้เนื้อหาไม่ได้รับการอนุญาตเนื่องจากมีปัญหาการชำระเงินรวมถึงเวลาหมดอายุสิ้นสุด แต่จะขยายเวลาหมดอายุการสมัครสมาชิกเมื่อกู้คืนการสมัครสมาชิกที่ชำระเงินหลังจากสถานะการชำระเงินกลับสู่ปกติ (เก็บสถานะการระงับสูงสุด 30 วัน).
    จำนวนเต็ม N
    hiveiap_apple_info วัตถุนี้มีค่า key เพื่อระบุใบเสร็จการสมัครสมาชิกในผลการตรวจสอบใบเสร็จการสมัครสมาชิกของ Apple ใช้เฉพาะสำหรับใบเสร็จการสมัครสมาชิกใน App Store เท่านั้น ส่งมอบเมื่อรหัสตอบกลับเป็น 0 (การตรวจสอบสำเร็จ). วัตถุ N
    ㄴ original_transaction_id นี่คือค่า key เพื่อระบุใบเสร็จการสมัครสมาชิกของ Apple สำหรับบัญชี App Store ค่านี้จะคงที่สำหรับผลิตภัณฑ์เดียวกันที่ซื้อ หรือสำหรับผลิตภัณฑ์ในกลุ่มเดียวกันที่อัปเกรด ลดระดับ ซื้อใหม่ หรือยกเลิกการซื้อ (อนุญาตให้มี 16 ตัวอักษร แต่สามารถแตกต่างกันได้เนื่องจากไม่มีแนวทางเฉพาะเกี่ยวกับความยาวของสตริงนี้). สตริง N
    hiveiap_google_info ค่า key เพื่อระบุใบเสร็จในผลการตรวจสอบใบเสร็จการสมัครสมาชิกของ 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`。 String Y
    hiveiap_receipt_cancel_date_ms นี่คือเวลาที่ (unix timestamp, ms) เมื่อการสมัครสมาชิกถูกยกเลิก ค่าเริ่มต้นคือ 0. จำนวนเต็ม ใช่
    hiveiap_receipt_refund_date_ms นี่คือเวลาที่ทำการคืนเงิน (unix timestamp, ms) เมื่อมีการซื้อคืนเงิน โดยค่าปริยายคือ 0. จำนวนเต็ม Y
  • โทร ( IAP > Game server)
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 ที่ให้จากเซิร์ฟเวอร์เกมของคุณ)
  • Request ( IAP > Game server)
> 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 endpoint ที่ให้จากเซิร์ฟเวอร์เกมของคุณ)
> 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>