1. 상점 카테고리 정보 얻기
UMyStoveSDKObject::StoveSDKFetchShopCategories 함수로 해당 게임에 대한 상점 카테고리 정보를 조회합니다. 카테고리 정보에는 부모 카테고리에 대한 아이디를 포함하고 있어 계층적 구조로 상점을 구성할 수 있습니다.
FStoveResult UMyStoveSDKObject::StoveSDKFetchShopCategories()
{
FStoveResult ErrorResult = Super::StoveSDKFetchShopCategories();
if(ErrorResult.Result == StovePCResult::STOVE_PC_NO_ERROR)
{
// 성공 처리
}
return ErrorResult;
}
C++
복사
UMyStoveSDKObject::StoveSDKFetchShopCategories 함수가 정상적으로 처리되면 OnFetchShopCategories 콜백이 호출됩니다.
콜백에 전달되는 FStoveShopCategory 구조체에는 상점 카테고리에 대한 메타정보가 포함되어 있습니다.
•
FStoveShopCategory.CategoryId : 카테고리 아이디
•
FStoveShopCategory.ParentCategoryId : 부모 카테고리 아이디
•
FStoveShopCategory.DisplayNo : 카테고리 순서
•
FStoveShopCategory.Name : 카테고리명
•
FStoveShopCategory.Depth : 카테고리 깊이 (최상위 카테고리의 경우 1)
void UMyStoveSDKObject::OnFetchShopCategories(int Size, FStoveShopCategories* Categories)
{
/*Add the 'walkthrough' codes here.*/
OnLog("[OnFetchShopCategories]");
OnLog("ShopCategories size = %d ", Size);
for (int i = 0; i < Size; i++, Categories++)
{
OnLog(" -> Index: %d", i);
OnLog("---------------------------------------------- --------");
OnLog(" CategoryId : %s", *(Categories->CategoryId));
OnLog(" ParentCategoryId : %s", *(Categories->ParentCategoryId));
OnLog(" DisplayNo : %d", Categories->DisplayNo);
OnLog(" Name : %s", *(Categories->Name));
OnLog(" Depth : %d", Categories->Depth);
OnLog("---------------------------------------------- --------");
}
}
C++
복사
UMyStoveSDKObejct::StoveSDKFetchShopProducts 함수가 실행중에 오류가 발생하면 OnError 콜백이 호출됩니다.
FStoveError 구조체의 ExternalError 필드를 통해 외부 오류를 확인할 수 있습니다.
ExternalError | Description |
500 | Internal Server Error
⇒ 스토브 담당자에게 문의 부탁드립니다. |
999999 | 정의되지 않은 오류
⇒ 스토브 담당자에게 문의 부탁드립니다. |
2. 상품 정보 호출
UMyStoveSDKObject::StoveSDKFetchProducts 함수로 해당 게임에 대한 상품 정보를 조회합니다.
// 입력 파라미터
// FString CategoryId : 파트너스에서 등록한 카테고리 식별자(빈문자열 전달시 전체 카테고리 조회)
// bool IsRefresh : true 인 경우 Web API 조회, false 인 경우 PC SDK 의 Cache 조회
FStoveResult UMyStoveSDKObject::StoveSDKFetchProducts(const FString& CategoryId, const bool IsRefresh)
{
/*Add the 'walkthrough' codes here.*/
FStoveResult ErrorResult = Super::StoveSDKFetchProducts(CategoryId, IsRefresh);
if (ErrorResult.Result == StovePCResult::STOVE_PC_NO_ERROR)
{
// 성공처리
}
return ErrorResult;
}
C++
복사
UMyStoveSDKObject::StoveSDKFetchProducts 함수가 정상적으로 처리되면 OnFetchProducts 콜백이 호출됩니다.
콜백에 전달되는 FStoveProduct 구조체에는 상품에 대한 메타정보가 포함되어 있습니다.
•
FStoveProduct.ProductId : 상품 아이디
•
FStoveProduct.GameItemId : 상품 아이디에 매핑되는 게임 내 아이템 아이디
•
FStoveProduct.Name : 상품명
•
FStoveProduct.Description : 상품 설명
•
FStoveProduct.Quantity : 개별 상품 수량
•
FStoveProduct.ProductTypeCode : 상품 유형 코드 (1: 패키지 게임 상품, 2: 인 게임 상품, 3: 패키지 아이템)
•
FStoveProduct.CategoryId : 카테고리 아이디
•
FStoveProduct.CurrencyCode : 통화 코드
•
FStoveProduct.Price : 상품 정가 (표기시에는 CurrencyCode 가 "KRW" 와 같으면 소수점 이하 생략 표기, 다르면 소수점 둘째자리까지 표기)
•
FStoveProduct.SalePrice : 상품 판매가 (표기시에는 CurrencyCode 가 "KRW" 와 같으면 소수점 이하 생략 표기, 다르면 소수점 둘째자리까지 표기)
•
FStoveProduct.IsDiscount : 할인 여부
•
FStoveProduct.DiscountType : 할인 유형(1: 정률, 2: 정액)
•
FStoveProduct.DiscountTypeValue : 할인값
•
FStoveProduct.DiscountBeginDate : 할인 시작 일자(UTC+0)
•
FStoveProduct.DiscountEndDate : 할인 종료 일자(UTC+0)
•
FStoveProduct.TotalQuantity : 상품 총 판매 수량
•
FStoveProduct.MemberQuantity : 회원 구매 수량
•
FStoveProduct.GuidQuantity : Guid 구매 수량(상품 구매 주체[CharacterNo/Guid/MemberNo]의 구매 수량)
•
FStoveProduct.ThumbnailUrl : 대표 상품 이미지
void UMyStoveSDKObject::OnFetchProducts(int Size, FStoveProduct* Products)
{
/*Add the 'walkthrough' codes here.*/
OnLog("[OnFetchProducts]");
OnLog("Products Size = %d ", Size);
FString Builder;
for (int i = 0; i < Size; i++, Products++)
{
Builder.Append(FString::Printf(TEXT("-> Index : %d\n"), i));
Builder.Append(FString::Printf(TEXT("-------------------------------------- -----------------\n")));
Builder.Append(FString::Printf(TEXT(" ProductId : %I64d\n"), Products->ProductId));
Builder.Append(FString::Printf(TEXT(" GameItemId : %s\n"), *(Products->GameItemId)));
Builder.Append(FString::Printf(TEXT(" Name : %s\n"), *(Products->Name)));
Builder.Append(FString::Printf(TEXT(" Description : %s\n"), *(Products->Description)));
Builder.Append(FString::Printf(TEXT(" Quantity : %d\n"), Products->Quantity));
Builder.Append(FString::Printf(TEXT(" ProductTypeCode : %hd\n"), Products->ProductTypeCode));
Builder.Append(FString::Printf(TEXT(" CategoryId : %s\n"), *(Products->CategoryId)));
Builder.Append(FString::Printf(TEXT(" CurrencyCode : %s\n"), *(Products->CurrencyCode)));
if (Products->CurrencyCode.Compare(TEXT("KRW"), ESearchCase::IgnoreCase) == 0)
{
Builder.Append(FString::Printf(TEXT(" Price : %.0lf\n"), Products->Price));
Builder.Append(FString::Printf(TEXT(" SalePrice : %.0lf\n"), Products->SalePrice));
}
else
{
Builder.Append(FString::Printf(TEXT(" Price : %.2lf\n"), Products->Price));
Builder.Append(FString::Printf(TEXT(" SalePrice : %.2lf\n"), Products->SalePrice));
}
Builder.Append(FString::Printf(TEXT(" IsDiscount : %s\n"), Products->bIsDiscount ? TEXT("true") : TEXT("false")));
Builder.Append(FString::Printf(TEXT(" DiscountType : %hd\n"), Products->DiscountType));
Builder.Append(FString::Printf(TEXT(" DiscountTypeValue : %d\n"), Products->DiscountTypeValue));
Builder.Append(FString::Printf(TEXT(" DiscountBeginDate : %I64d\n"), Products->DiscountBeginDate));
Builder.Append(FString::Printf(TEXT(" DiscountEndDate : %I64d\n"), Products->DiscountEndDate));
Builder.Append(FString::Printf(TEXT(" TotalQuantity : %d\n"), Products->TotalQuantity));
Builder.Append(FString::Printf(TEXT(" MemberQuantity : %d\n"), Products->MemberQuantity));
Builder.Append(FString::Printf(TEXT(" GuidQuantity : %d\n"), Products->GuidQuantity));
Builder.Append(FString::Printf(TEXT(" ThumbnailUrl : %s\n"), *(Products->ThumbnailUrl)));
Builder.Append(FString::Printf(TEXT(" CanWithdraw : %s\n"), Products->bCanWithdraw ? TEXT("true") : TEXT("false")));
Builder.Append(FString::Printf(TEXT("-------------------------------------- -----------------\n")));
}
OnLog("%s", *Builder);
C++
복사
UMyStoveSDKObject::StoveSDKFetchProducts 함수가 실행중에 오류가 발생하면 OnError 콜백이 호출됩니다.
FStoveError 구조체의 ExternalError 필드를 통해 외부 오류를 확인할 수 있습니다.
ExternalError | 설명 |
500 | Internal Server Error
⇒ 스토브 담당자에게 문의 부탁드립니다. |
50001 | 상점이 존재하지 않거나, 점검 중
⇒ 스튜디오 내 상점이 On/Off 상태인지 확인 부탁드립니다. 만약에 On 상태라면, 스토브 담당자에게 문의 부탁드립니다. |
50002 | 상품이 존재 하지 않거나 판매 불가능 상품
⇒ 스튜디오 내 상품의 등록 여부, On/Off 상태, 판매 기간을 확인 부탁드립니다. 만약 모두 정상이라면, 스토브 담당자에게 문의 부탁드립니다. |
999999 | 정의되지 않은 오류
⇒ 스토브 담당자에게 문의 부탁드립니다. |