Hive SDK v1.19.1부터 IAP v1의 지원을 종료합니다. Hive SDK v1.19.1 이상의 환경에서는 Hive IAP v4를 적용하시기 바랍니다.
본 가이드는 Hive IAP v1에 대해 안내하며, Hive SDK v1.19.0 이하 환경에서 적용하실 수 있습니다.
서버 영수증 검증을 자체적으로 개발하여 사용하는 게임팀은 다음 내용을 확인해야한다.
아이템 지급시 사용하는 MARKET PID는 영수증 또는 영수증 검증 결과에서 가져와야 한다.
SDK에서 전달하는 MARKET PID는 메모리 변조의 해킹의 위험이 있기 때문이다.
마켓 별로 아래 사항을 확인 후 적용해야한다.
구글은 서버 자체 검증이므로 영수증에서 추출한다. Hive SDK에서 전달한 transaction값을 json parsing 해서 object로 변환 후 productId필드를 추출하여 사용한다.
구글 영수증 예시
1 2 3 4 |
{ "transaction":"{\"orderId\":\"GPA.3355-6683-0298-02400\",\"packageName\":\"com.gamevil.heiroflight.android.google.global.normal\",\"productId\":\"com.gamevil.heiroflight.android.google.global.normal.symbolpack\",\"purchaseTime\":1521549092720,\"purchaseState\":0,\"developerPayload\":\"{\\\"vid\\\":\\\"10000803995\\\",\\\"vid_type\\\":\\\"v4\\\",\\\"uid\\\":null,\\\"market_currency\\\":\\\"VND\\\",\\\"market_price\\\":699000000000,\\\"game_currency\\\":\\\"VND\\\",\\\"game_price\\\":699000,\\\"server_id\\\":\\\"SEA\\\",\\\"additionalInfo\\\":null}\",\"purchaseToken\":\"hgafkabbihbebgnhcbcapjoo.AO-J1OyynU0uVm6jNWKIbm5WHFbWe_S3OIK4x6VMAyWl_bS88eDVnfJjeTsGIqhwk8t4DaSKt3ECd9asXJGm6mTFMoPQo0WR7qoBjv2kX877ZhPA25yvvEcrSH1DZctvP2R2y7Ur8_TjMkVZxf35WVPsX3ZrqSBXBzPjmkBuy9j3UdWL3mTy4Ef-iUDkV162bDPRVc-C2zZIs3xOI5Io4LPV9pXEEaKne-mxuwENN4H5PLn_ud5F3L0\"}", "signature":"Gm3NrJfLF+oOfb3dcoqwNfyUYhAMh3xBqmXCP1QTnM3y6hD1LFcp2GMkxXeCjiEb5Q7PGZVoqnkkm4es2ZPXJwZ7jWhQtXYpTEI1YoC6pYS8UdTqEjHPSc\/fugXVOZ5halJJGHxmTfWmqa6xTJOYl\/JJF68Vvbm7\/kMLjSuiWkTplcSgy5N1qlFQUjrJg7gmj1pVJiMFVQguvlvvjvGkYYKuLyaclHyckPU8UCvK6RFPinqLxuusX9eTQHDqFsQ1OWJVgwexZWiUIDnrNiogiR\/IPL8e8bsEABftE5fAfZkIejFPzS8u5p4f2x+AfIHcqRLfzsDSCUZpdiuen0GFfw==" } |
Apple
애플 영수증 검증 결과를 json parsing하여 object로 변환 후 receipt(object)안의 product_id 필드를 추출한다.
애플 영수증 검증 결과 예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
{ "receipt":{ "original_purchase_date_pst":"2018-03-20 09:01:56 America/Los_Angeles", "unique_identifier":"500e3c40c0d1ebd68084dd097631ee2f304a2291", "original_transaction_id":"60000416940641", "bvrs":"1081", "app_item_id":"1203069334", "transaction_id":"60000416940641", "quantity":"1", "unique_vendor_identifier":"DBBE684F-AB19-43FE-A5FC-BAF722BB2043", "product_id":"com.gamevilusa.mlbpilive.ios.apple.global.normal.livepackage82", "item_id":"1218041827", "version_external_identifier":"825539629", "bid":"com.gamevilusa.mlbpilive.ios.apple.global.normal", "is_in_intro_offer_period":"false", "purchase_date_ms":"1521561716911", "purchase_date":"2018-03-20 16:01:56 Etc/GMT", "is_trial_period":"false", "purchase_date_pst":"2018-03-20 09:01:56 America/Los_Angeles", "original_purchase_date":"2018-03-20 16:01:56 Etc/GMT", "original_purchase_date_ms":"1521561716911" }, "status":0 } |
One Store (또는 TStore)
원스토어 영수증 검증 결과를 json parsing하여 object로 변환 후 product(array)안의 product_id필드를 추출한다.
원스토어 영수증 검증 결과 예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "product":[ { "appid":"OA00676107", "bp_info":"", "charge_amount":1100, "detail_pname":"초특가패키지2", "log_time":"20180320011233", "product_id":"0910077012", "tid":"" } ], "message":"정상검증완료.", "detail":"0000", "count":1, "status":0 }{"result":0,"market_pid":"0910077012","environment":"production"} |
Amazone
아마존 영수증 검증 결과를 json parsing하여 object로 변환 후 productId 필드를 추출한다.
아마존 영수증 검증 결과 예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "betaProduct":false, "cancelDate":null, "parentProductId":null, "productId":"com.gamevilusa.dungeonlink.android.amazon.global.normal.2atpackage", "productType":"CONSUMABLE", "purchaseDate":1505286934229, "quantity":1, "receiptId":"7lfj1L8eQCyEItcJvq-mys2e1lml1x1K-htC3w3Rt-4=:1:11", "renewalDate":null, "term":null, "termSku":null, "testTransaction":false } |
Lebi
러비 영수증 검증 결과를 json parsing하여 object로 변환 후 orderInfo(object)안의 billitemid 필드를 추출한다.
러비 영수증 검증 결과 예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "result_code":200, "result_msg":"Success", "orderInfo":{ "tradeno":4313217, "uid":195892629, "vid":0, "trademoney":240, "tradedate":"2017-11-17 10:07:01", "billitemid":"050301002002", "itemname":"Test2", "game_name":"Hive SDK", "appid":"com.com2us.hivesdk.normal.freefull.google.global.android.common" } } |