Withdrawal Account Information Inquiry
This API retrieves withdrawal information using a withdrawal key.
URL Confirmation
This API uses the service-account.playnanoo.com domain.
API Information
- URL:
https://service-account.playnanoo.com/api/v20240101/withdrawal/search - Method:
PUT - Authentication Required: No
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| withdrawal_key | string | Required | Withdrawal key |
| platform | string | Required | Platform (e.g., "aos", "ios") |
| device_id | string | Required | Device unique ID |
| device_model | string | Required | Device model name |
| device_os | string | Required | Device OS |
| device_language | string | Required | Device language (e.g., "KO", "EN") |
Response Data
Res Structure
| Field | Type | Description |
|---|---|---|
| Status | FString | Withdrawal status |
| Memo | FString | Withdrawal reason memo |
| WithdrawalDate | FString | Scheduled withdrawal date |
Unreal C++ Implementation
Header File (WithDrawalSearch.h)
// WithDrawalSearch.h
#pragma once
#include "CoreMinimal.h"
#include "Json.h"
#include "JsonUtilities.h"
// Response callback delegates
DECLARE_DELEGATE_OneParam(FOnWithDrawalSearchSuccess, const FString&);
DECLARE_DELEGATE_OneParam(FOnWithDrawalSearchError, const FString&);
class YOURPROJECT_API FWithDrawalSearch
{
public:
// Request struct (device info is automatically generated in FPlayNANOOHelper::CreateRequestBody())
struct FReq
{
FString withdrawal_key;
};
// Response struct
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;
}
};
/**
* Send withdrawal information query request
*/
static void Send(
const FString& WithdrawalKey,
FOnWithDrawalSearchSuccess OnSuccess,
FOnWithDrawalSearchError OnError
);
};
Implementation File (WithDrawalSearch.cpp)
// WithDrawalSearch.cpp
#include "WithDrawalSearch.h"
#include "PlayNANOOHelper.h"
#include "Http.h"
void FWithDrawalSearch::Send(
const FString& WithdrawalKey,
FOnWithDrawalSearchSuccess OnSuccess,
FOnWithDrawalSearchError OnError)
{
// Create request data (device info is automatically included)
TSharedPtr<FJsonObject> JsonObject = FPlayNANOOHelper::CreateRequestBody();
// Add API-specific parameters
JsonObject->SetStringField(TEXT("withdrawal_key"), WithdrawalKey);
// Convert to JSON
FString JsonBody;
TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&JsonBody);
FJsonSerializer::Serialize(JsonObject.ToSharedRef(), Writer);
// Create HTTP request
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); // No authentication token needed
Request->SetContentAsString(JsonBody);
// Handle response
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();
}
Usage Example
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("Withdrawal status: %s"), *Result.Status);
UE_LOG(LogTemp, Log, TEXT("Withdrawal reason: %s"), *Result.Memo);
UE_LOG(LogTemp, Log, TEXT("Scheduled withdrawal date: %s"), *Result.WithdrawalDate);
// Date parsing example
FDateTime WithdrawalDate;
if (FDateTime::ParseIso8601(*Result.WithdrawalDate, WithdrawalDate))
{
FTimespan Remaining = WithdrawalDate - FDateTime::Now();
UE_LOG(LogTemp, Log, TEXT("Remaining time: %d days %d hours"),
Remaining.GetDays(), Remaining.GetHours());
}
}
}),
FOnWithDrawalSearchError::CreateLambda([](const FString& Error)
{
UE_LOG(LogTemp, Error, TEXT("Withdrawal information query failed: %s"), *Error);
})
);
}
Checking Scheduled Withdrawal Date
The WithdrawalDate field shows when the account will be completely deleted. If you call the recovery API before this date, you can restore the account.