API Reference of GS2-Money SDK for Game Engine
Model
EzWallet
Wallet
Currency in the wallet is managed separately for currency purchased for a fee and currency obtained for free. Currency purchased for a fee is further managed by the unit price at the time of purchase, allowing for refunds in the event of service termination, or to determine if the balance is sufficient to meet the requirements of the Funds Settlement Act.
The wallet has slots and each slot has a different balance. If balances cannot be shared across platforms, they can be managed separately by using different slots for each platform. Currency acquired for free can also be shared across all platforms.
Type | Require | Default | Limitation | Description | |
---|---|---|---|---|---|
slot | int | ✓ | ~ 100000000 | Slot Number | |
paid | int | ✓ | 0 | ~ 2147483646 | Amount of Paid Currency Possession |
free | int | ✓ | 0 | ~ 2147483646 | Amount of Free Currency Possession |
updatedAt | long | ✓ | Datetime of last update |
Methods
get
Get Wallet
Request
Type | Require | Default | Limitation | Description | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 32 chars | Namespace Name | |
accessToken | string | ✓ | ~ 128 chars | User Id | |
slot | int | ✓ | ~ 100000000 | Slot Number |
Result
Type | Description | |
---|---|---|
item | EzWallet | Wallet |
Implementation Example
var domain = gs2.Money.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Wallet(
slot: 0
);
var item = await domain.ModelAsync();
var domain = gs2.Money.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Wallet(
slot: 0
);
var future = domain.Model();
yield return future;
var item = future.Result;
const auto Domain = Gs2->Money->Namespace(
"namespace-0001" // namespaceName
)->Me(
AccessToken
)->Wallet(
0 // slot
);
const auto item = Domain.Model();
withdraw
Consume the balance from the wallet
Request
Type | Require | Default | Limitation | Description | |
---|---|---|---|---|---|
namespaceName | string | ✓ | ~ 32 chars | Namespace Name | |
accessToken | string | ✓ | ~ 128 chars | User Id | |
slot | int | ✓ | ~ 100000000 | Slot Number | |
count | int | ✓ | 1 ~ 2147483646 | Quantity of billable currency to be consumed | |
paidOnly | bool | ✓ | false | Only for paid currency |
Result
Type | Description | |
---|---|---|
item | EzWallet | Post-withdraw Wallet |
price | float | Price of currency consumed |
Error
Special exceptions are defined in this API. GS2-SDK for GameEngine provides specialized exceptions derived from general exceptions to facilitate handling of errors that may need to be handled in games. Please refer to the documentation here for more information on common error types and handling methods.
Type | Base Type | Description |
---|---|---|
ConflictException | ConflictException | The wallet operation process conflicted. Retry required. |
InsufficientException | BadRequestException | Wallet balance is insufficient. |
Implementation Example
try {
var domain = gs2.Money.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Wallet(
slot: 0
);
var result = await domain.WithdrawAsync(
count: 50,
paidOnly: null
);
var item = await result.ModelAsync();
var price = result.Price;
} catch(Gs2.Gs2Money.Exception.Conflict e) {
// The wallet operation process conflicted. Retry required.
} catch(Gs2.Gs2Money.Exception.Insufficient e) {
// Wallet balance is insufficient.
}
var domain = gs2.Money.Namespace(
namespaceName: "namespace-0001"
).Me(
gameSession: GameSession
).Wallet(
slot: 0
);
var future = domain.Withdraw(
count: 50,
paidOnly: null
);
yield return future;
if (future.Error != null)
{
if (future.Error is Gs2.Gs2Money.Exception.ConflictException)
{
// The wallet operation process conflicted. Retry required.
}
if (future.Error is Gs2.Gs2Money.Exception.InsufficientException)
{
// Wallet balance is insufficient.
}
onError.Invoke(future.Error, null);
yield break;
}
var future2 = future.Result.Model();
yield return future2;
if (future2.Error != null)
{
onError.Invoke(future2.Error, null);
yield break;
}
var result = future2.Result;
var price = future.Result.Price;
const auto Domain = Gs2->Money->Namespace(
"namespace-0001" // namespaceName
)->Me(
AccessToken
)->Wallet(
0 // slot
);
const auto Future = Domain->Withdraw(
50,
nullptr // paidOnly
);
Future->StartSynchronousTask();
if (Future->GetTask().IsError())
{
if (Gs2::Money::Error::FConflictError::TypeString == Task->GetTask().Error()->Type())
{
// The wallet operation process conflicted. Retry required.
}
if (Gs2::Money::Error::FInsufficientError::TypeString == Task->GetTask().Error()->Type())
{
// Wallet balance is insufficient.
}
return false;
}
// obtain changed values / result values
const auto Future2 = Future->GetTask().Result()->Model();
Future2->StartSynchronousTask();
if (!TestFalse(WHAT, Future2->GetTask().IsError())) return false;
const auto Result = Future2->GetTask().Result();
const auto Price = Result->Price;