본문으로 건너뛰기

탈퇴 계정 정보 조회

탈퇴 키로 탈퇴 정보를 조회하는 API입니다.

URL 확인

이 API는 service-account.playnanoo.com 도메인을 사용합니다.

API 정보

  • URL: https://service-account.playnanoo.com/api/v20240101/withdrawal/search
  • Method: PUT
  • 인증 필요: 아니오

요청 파라미터

파라미터타입필수설명
withdrawal_keystring필수탈퇴 키
platformstring필수플랫폼 (예: "aos", "ios")
device_idstring필수기기 고유 ID
device_modelstring필수기기 모델명
device_osstring필수기기 OS
device_languagestring필수기기 언어 (예: "KO", "EN")

응답 데이터

Res 구조체

필드타입설명
StatusFString탈퇴 상태
MemoFString탈퇴 사유 메모
WithdrawalDateFString탈퇴 예정일

Unreal C++ 구현

헤더 파일 (WithDrawalSearch.h)

// WithDrawalSearch.h
#pragma once

#include "CoreMinimal.h"
#include "Json.h"
#include "JsonUtilities.h"

// 응답 콜백 델리게이트
DECLARE_DELEGATE_OneParam(FOnWithDrawalSearchSuccess, const FString&);
DECLARE_DELEGATE_OneParam(FOnWithDrawalSearchError, const FString&);

class YOURPROJECT_API FWithDrawalSearch
{
public:
// 요청 구조체 (디바이스 정보는 FPlayNANOOHelper::CreateRequestBody()에서 자동 생성)
struct FReq
{
FString withdrawal_key;
};

// 응답 구조체
struct FRes
{
FString ErrorCode;
FString Message;
FString Status;
FString Memo;
FString WithdrawalDate;

bool FromJson(const FString& JsonString)
{
TSharedPtr<FJsonObject> JsonObject;
TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(JsonString);

if (FJsonSerializer::Deserialize(Reader, JsonObject) && JsonObject.IsValid())
{
JsonObject->TryGetStringField(TEXT("ErrorCode"), ErrorCode);
JsonObject->TryGetStringField(TEXT("Message"), Message);
JsonObject->TryGetStringField(TEXT("Status"), Status);
JsonObject->TryGetStringField(TEXT("Memo"), Memo);
JsonObject->TryGetStringField(TEXT("WithdrawalDate"), WithdrawalDate);
return true;
}
return false;
}
};

/**
* 탈퇴 정보 조회 요청 전송
*/
static void Send(
const FString& WithdrawalKey,
FOnWithDrawalSearchSuccess OnSuccess,
FOnWithDrawalSearchError OnError
);
};

구현 파일 (WithDrawalSearch.cpp)

// WithDrawalSearch.cpp
#include "WithDrawalSearch.h"
#include "PlayNANOOHelper.h"
#include "Http.h"

void FWithDrawalSearch::Send(
const FString& WithdrawalKey,
FOnWithDrawalSearchSuccess OnSuccess,
FOnWithDrawalSearchError OnError)
{
// 요청 데이터 생성 (디바이스 정보는 자동 포함)
TSharedPtr<FJsonObject> JsonObject = FPlayNANOOHelper::CreateRequestBody();

// API 전용 파라미터 추가
JsonObject->SetStringField(TEXT("withdrawal_key"), WithdrawalKey);

// JSON 변환
FString JsonBody;
TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&JsonBody);
FJsonSerializer::Serialize(JsonObject.ToSharedRef(), Writer);

// HTTP 요청 생성
TSharedRef<IHttpRequest> Request = FHttpModule::Get().CreateRequest();
Request->SetURL(TEXT("https://service-account.playnanoo.com/api/v20240101/withdrawal/search"));
Request->SetVerb(TEXT("PUT"));
FPlayNANOOHelper::SetCommonHeaders(Request, false); // 인증 토큰 불필요
Request->SetContentAsString(JsonBody);

// 응답 처리
Request->OnProcessRequestComplete().BindLambda(
[OnSuccess, OnError](FHttpRequestPtr Req, FHttpResponsePtr Res, bool bSuccess)
{
if (bSuccess && Res.IsValid())
{
FString Response = Res->GetContentAsString();
FRes Result;
if (Result.FromJson(Response))
{
if (Result.ErrorCode.IsEmpty())
{
OnSuccess.ExecuteIfBound(Response);
}
else
{
OnError.ExecuteIfBound(Response);
}
}
else
{
OnError.ExecuteIfBound(TEXT("Failed to parse response"));
}
}
else
{
FString ErrorMsg = Res.IsValid() ? Res->GetContentAsString() : TEXT("Request failed");
OnError.ExecuteIfBound(ErrorMsg);
}
});

Request->ProcessRequest();
}

사용 예제

void UYourClass::SearchWithdrawalInfo(const FString& WithdrawalKey)
{
FWithDrawalSearch::Send(
WithdrawalKey,
FOnWithDrawalSearchSuccess::CreateLambda([](const FString& Response)
{
FWithDrawalSearch::FRes Result;
if (Result.FromJson(Response))
{
UE_LOG(LogTemp, Log, TEXT("탈퇴 상태: %s"), *Result.Status);
UE_LOG(LogTemp, Log, TEXT("탈퇴 사유: %s"), *Result.Memo);
UE_LOG(LogTemp, Log, TEXT("탈퇴 예정일: %s"), *Result.WithdrawalDate);

// 날짜 파싱 예제
FDateTime WithdrawalDate;
if (FDateTime::ParseIso8601(*Result.WithdrawalDate, WithdrawalDate))
{
FTimespan Remaining = WithdrawalDate - FDateTime::Now();
UE_LOG(LogTemp, Log, TEXT("남은 기간: %d일 %d시간"),
Remaining.GetDays(), Remaining.GetHours());
}
}
}),
FOnWithDrawalSearchError::CreateLambda([](const FString& Error)
{
UE_LOG(LogTemp, Error, TEXT("탈퇴 정보 조회 실패: %s"), *Error);
})
);
}
탈퇴 예정일 확인

WithdrawalDate 필드를 통해 계정이 완전히 삭제되는 날짜를 확인할 수 있습니다. 이 날짜 이전에 복구 API를 호출하면 계정을 복구할 수 있습니다.