미 지급된 아이템의 영수증 정보 요청
상품 구매 과정에서 여러가지 상황으로 인하여 아이템 지급을 실패하거나 취소되는 경우가 발생할 수 있습니다. 이런 상황을 대비하기 위해서는 미 지급된 아이템의 영수증 정보를 요청해야 합니다.
C2SModuleInappV4 클래스의 Restore()
메서드를 호출하여 미 지급된 아이템의 정보를 요청하세요.
Restore()
메서드를 호출한 결과 값이SUCCESS
이고 ReceiptList가 전달된 경우 복구할 아이템이 존재하는 상황입니다. 미 지급된 아이템을 지급하고 완료로 처리하세요.Restore()
메서드를 호출한 결과 값이SUCCESS
가 아닌 경우 게임에서 처리하지 않아도 됩니다.Restore()
메서드를 호출 후 에러가 발생할 경우 유저가 반드시 알아야 하는 에러를 제외하고는 별도 알림 없이 유저가 게임을 계속 플레이할 수 있도록 구현하세요.
C2SModuleInappV4_Restore
- Request
Argument Type Type Description Platform type string 요청 아이템 타입
consumable: 소모성
subscription: 구독형all - Response
Argument Type Type Description Platform type string 요청 아이템 타입
consumable: 소모성
subscription: 구독형all receiptList array 영수증 정보 (Dictionary)
에러 발생 상황에는 비어 있음 자세히all - receiptList 배열 타입
Argument Type Type Description Platform type string 마켓 타입
not_selected
apple_appstore
google_playstore
hive_lebi
onestore
amazon_appstore
samsung_galaxystore
huawei_appgalleryall additionalInfo String 구매 시 전달한 추가 데이터 (JSON String) android(1.21.1.1-) bypassInfo String Hive 영수증 검증 시 필요한 검증 데이터 (구매 영수증 포함) all hiveiapReceipt String 구매 영수증 원본 all product Dictionary 구매 상품 정보 all - product 딕셔너리 타입
Argument Type Type Description Platform marketPid string 마켓에 등록된 상품의 고유 ID all currency string 통화코드
예. KRW, USDall price double 상품 가격 all displayPrice string 상품의 가격 문자열
예. $100.00 자세히all title string 상품의 타이틀 all description string 상품 설명 all productType string 상품 타입
consumable: 소모성
subscription: 구독형all originalJson string 마켓에서 전달된 응답 데이터 Android displayOriginalPrice string 할인 전 가격 문자열 All originalPrice long 할인 전 가격 All iconUrl string 상품 아이콘 (512*512) Android coinsReward int Amazon 코인 획득 금액
Amazon에서만 사용Android
다음은 미 지급된 아이템의 영수증 정보를 요청하는 예제 코드입니다.
API Reference: C2SModule.InappV4.Restore
1 2 3 4 5 6 7 8 9 |
C2SModule.Parameter arg = new C2SModule.Parameter(); C2SModule.Error error; arg[“type”] = “consumable”; // or “subscription” if(!C2SModule.InappV4.Restore(arg. out error)) { // 에러 발생 시 처리 } |
API Reference: C2SModuleInappV4_Restore
1 2 3 4 5 6 7 8 |
C2SModule_Cocos2dx::C2SModuleError eror; Json::Value arg; arg[“type”] = “consumable”; // or “subscription” if( ::C2SModuleInappV4_Restore(strJSON.c_str(), &error ) == false) // 에러 발생 시 처리 |
API Reference: C2SModuleInappV4 Restore
1 2 3 4 5 6 7 8 9 10 11 |
NSError* error; NSString* type = @”consumable”; // or “subscription” NSMutableDictionary* arg = [[NSMutableDictionary alloc] init]; [arg setObject:type forKey:@”type”]; [C2SModuleInappV4 Restore:arg error:&error completionHandler:^(NSDictionary* resultArg, NSError* resultError) { if(resultError == nil) { // 성공 } }]; |
구매 복구 에러코드
에러 | 에러코드 | 설명 |
---|---|---|
NeedInitialize | -305 | 초기화 진행 필요 |
NetworkError | -301 | 네트워크 에러 |
NotSupported | -6 | 구매 불가 상태 (기기 앱 내 구입 차단 등) 지원하지 않는 마켓 설정 |
NeedLogin | -200 | 구매를 진행할 수 없는 사용자 세션 |
InvalidArg | -2 | 파라미터 오류 |
RestoreNotOwnedItem | -306 | 복구할 아이템 없음 |
FailCanMakePayments | -5000 | InApp 구입 차단 설정 상태 (iOS 전용) |
FailOperation | -3 | 기타 오류 Hive IAP 서버 오류 |
구매 영수증 검증 요청
구매 성공 후, 게임 서버에서 아이템을 지급하기 전 Hive IAP의 영수증 검증 API를 이용하여 구매 영수증의 유효성 검증을 구현합니다.
영수증 검증 API 응답값의 hiveiap_transaction_id
는 영수증별로 유니크하게 발급되는 ID이기 때문에 이 값을 게임 서버에 저장 후 영수증의 중복 여부를 체크할 수 있습니다.
Hive IAP 영수증 검증 API를 사용하여 검증하고 모든 Request Parameter의 모든값을 전송하면 매출정보 및 매출에 대한 게임정보의 애널리틱스 전송을 Hive IAP 서버에서 대행합니다. 또한 Hive One 통합조회의 결제 조회를 위한 API를 게임에서 따로 개발할 필요가 없습니다.
자세한 내용은 Hive IAP 영수증 검증 API에서 확인하세요.
구매/복구한 아이템의 지급 완료
상품 구매 후, 아이템 지급을 완료했다면 C2SModuleInappV4 클래스의 TransactionFinish()
메서드를 반드시 호출하여 구매를 완료하세요.
C2SModuleInappV4_TransactionFinish
- Request
Argument Type Type Description Platform pid string 요청 아이템의 Product ID all isPurchaseSuccess bool isPurchaseSuccess는 마케팅 트래킹 로그(Singular, Adjust) 전송 여부 표시
과금을 실제로 성공한 Finish일 경우에만 true로 설정
기본값은 false– - Response
Argument Type Type Description Platform pid string Finish 동작을 성공한 Product ID
실패 상황에는 비어 있음all
다음은 하나의 지급 요청을 완료하는 예제 코드입니다.
API Reference: C2SModule.InappV4.TransactionFinish
1 2 3 4 5 6 7 8 9 |
C2SModule.Parameter arg = new C2SModule.Parameter(); C2SModule.Error error; arg[“pid”] = “item01”; if(!C2SModule.InappV4.TransactionFinish(arg. out error)) { // 에러 발생 시 처리 } |
API Reference: C2SModuleInappV4_TransactionFinish
1 2 3 4 5 6 7 8 |
C2SModule_Cocos2dx::C2SModuleError eror; Json::Value arg; arg[“type”] = “item01”; if( ::C2SModuleInappV4_TransactionFinish(strJSON.c_str(), &error ) == false) // 에러 발생 시 처리 |
API Reference: C2SModuleInappV4 TransactionFinish
1 2 3 4 5 6 7 8 9 10 11 |
NSError* error; NSString* pid = @”item01”; NSMutableDictionary* arg = [[NSMutableDictionary alloc] init]; [arg setObject:pid forKey:@”pid”]; [C2SModuleInappV4 TransactionFinish:arg error:&error completionHandler:^(NSDictionary* resultArg, NSError* resultError) { if(resultError == nil) { // 성공 } }]; |
C2SModuleInappV4_GetAccountUuid
UUIID v3 형태의 vid 해시값입니다. Google Play, AppStore의 경우 구매 요청 시 마켓에 전달되며 이 값을 사용하여 단기간에 동일한 계정에서 여러 기기를 사용해 구매하는 것과 같은 활동을 감지합니다. 영수증에서 확인할 수 있습니다. 항상 소문자(lowercased)로 전달합니다.
- Request
Argument Type Type Description Platform 없음 - Response
Argument Type Type Description Platform accountUuid String UUIID v3 형태의 vid 해시값 all (1.20.3.2+)
다음은 accountUuid를 얻는 예제 코드입니다.
API Reference: C2SModule.InappV4.GetAccountUuid
1 2 3 4 5 6 |
C2SModule.Parameter arg = new C2SModule.Parameter(); C2SModule.Error error; if(!C2SModule.InappV4.GetAccountUuid(arg. out error)) { // 에러 발생 시 처리 } |
API Reference: C2SModuleInappV4_TransactionFinish
1 2 3 4 5 6 7 |
C2SModule_Cocos2dx::C2SModuleError eror; Json::Value arg; if( ::C2SModuleInappV4_GetAccountUuid(strJSON.c_str(), &error ) == false){ // 에러 발생 시 처리 } |
API Reference: C2SModuleInappV4 TransactionFinish
1 2 3 4 5 6 7 8 9 |
NSError* error; NSMutableDictionary* arg = [[NSMutableDictionary alloc] init]; [C2SModuleInappV4 GetAccountUuid:arg error:&error completionHandler:^(NSDictionary* resultArg, NSError* resultError) { if(resultError == nil) { // 성공 } }]; |