GS2-Money Transaction Actions

Specification of verify/consume/acquire transaction actions

ConsumeAction

Gs2Money:WithdrawByUserId

Consume balance from wallet by specifying a user ID

Withdraws the specified amount of currency from the wallet for the specified user. If paidOnly is false, free currency is consumed first, then paid currency.

Whether the action allows quantity specification: YES

Whether the action is reversible: YES

TypeConditionRequiredDefaultValue LimitsDescription
namespaceNamestring
~ 128 charsNamespace name
Namespace-specific name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.).
userIdstring
~ 128 charsUser ID
Set #{userId} to replace the currently logged in user ID.
slotint
0 ~ 100000000Slot Number
An identifier for separating wallet balances by platform or context.
Different slots allow managing separate paid currency pools (e.g., iOS purchases in slot 0, Android in slot 1).
Free currency can optionally be shared across all slots via the namespace’s shareFree setting.
countint
1 ~ 2147483646Quantity of premium currency to be consumed
paidOnlyboolfalseOnly for paid currency
timeOffsetTokenstring~ 1024 charsTime offset token
{
    "action": "Gs2Money:WithdrawByUserId",
    "request": {
        "namespaceName": "[string]Namespace name",
        "userId": "[string]User ID",
        "slot": "[int]Slot Number",
        "count": "[int]Quantity of premium currency to be consumed",
        "paidOnly": "[bool]Only for paid currency",
        "timeOffsetToken": "[string]Time offset token"
    }
}
action: Gs2Money:WithdrawByUserId
request:
  namespaceName: "[string]Namespace name"
  userId: "[string]User ID"
  slot: "[int]Slot Number"
  count: "[int]Quantity of premium currency to be consumed"
  paidOnly: "[bool]Only for paid currency"
  timeOffsetToken: "[string]Time offset token"
transaction.service("money").consume.withdraw_by_user_id({
    namespaceName="[string]Namespace name",
    userId="[string]User ID",
    slot="[int]Slot Number",
    count="[int]Quantity of premium currency to be consumed",
    paidOnly="[bool]Only for paid currency",
    timeOffsetToken="[string]Time offset token",
})

Gs2Money:RecordReceipt

Record receipt

Records and validates a purchase receipt from a store platform (Apple App Store / Google Play). The receipt is verified against the platform’s servers to prevent fraud. Duplicate receipts are rejected to prevent replay attacks.

Whether the action allows quantity specification: NO

Whether the action is reversible: NO

TypeConditionRequiredDefaultValue LimitsDescription
namespaceNamestring
~ 128 charsNamespace name
Namespace-specific name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.).
userIdstring
~ 128 charsUser ID
Set #{userId} to replace the currently logged in user ID.
contentsIdstring
~ 1024 charsContent IDs sold on the store platform
receiptstring
~ 524288 charsReceipt
timeOffsetTokenstring~ 1024 charsTime offset token
{
    "action": "Gs2Money:RecordReceipt",
    "request": {
        "namespaceName": "[string]Namespace name",
        "userId": "[string]User ID",
        "contentsId": "[string]Content IDs sold on the store platform",
        "receipt": "[string]Receipt",
        "timeOffsetToken": "[string]Time offset token"
    }
}
action: Gs2Money:RecordReceipt
request:
  namespaceName: "[string]Namespace name"
  userId: "[string]User ID"
  contentsId: "[string]Content IDs sold on the store platform"
  receipt: "[string]Receipt"
  timeOffsetToken: "[string]Time offset token"
transaction.service("money").consume.record_receipt({
    namespaceName="[string]Namespace name",
    userId="[string]User ID",
    contentsId="[string]Content IDs sold on the store platform",
    receipt="[string]Receipt",
    timeOffsetToken="[string]Time offset token",
})

AcquireAction

Gs2Money:DepositByUserId

Deposit balance to wallet by specifying a user ID

Adds the specified amount of currency to the wallet for the specified user. If the price is 0, it is treated as free currency; otherwise, it is treated as paid currency.

Whether the action allows quantity specification: YES

Whether the action is reversible: YES

TypeConditionRequiredDefaultValue LimitsDescription
namespaceNamestring
~ 128 charsNamespace name
Namespace-specific name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.).
userIdstring
~ 128 charsUser ID
Set #{userId} to replace the currently logged in user ID.
slotint
0 ~ 100000000Slot Number
An identifier for separating wallet balances by platform or context.
Different slots allow managing separate paid currency pools (e.g., iOS purchases in slot 0, Android in slot 1).
Free currency can optionally be shared across all slots via the namespace’s shareFree setting.
pricefloat
0 ~ 100000.0Purchase Price
countint
1 ~ 2147483646Quantity of premium currency to be granted
timeOffsetTokenstring~ 1024 charsTime offset token
{
    "action": "Gs2Money:DepositByUserId",
    "request": {
        "namespaceName": "[string]Namespace name",
        "userId": "[string]User ID",
        "slot": "[int]Slot Number",
        "price": "[float]Purchase Price",
        "count": "[int]Quantity of premium currency to be granted",
        "timeOffsetToken": "[string]Time offset token"
    }
}
action: Gs2Money:DepositByUserId
request:
  namespaceName: "[string]Namespace name"
  userId: "[string]User ID"
  slot: "[int]Slot Number"
  price: "[float]Purchase Price"
  count: "[int]Quantity of premium currency to be granted"
  timeOffsetToken: "[string]Time offset token"
transaction.service("money").acquire.deposit_by_user_id({
    namespaceName="[string]Namespace name",
    userId="[string]User ID",
    slot="[int]Slot Number",
    price="[float]Purchase Price",
    count="[int]Quantity of premium currency to be granted",
    timeOffsetToken="[string]Time offset token",
})

Gs2Money:RevertRecordReceipt

Delete receipt record by specifying a user ID

Reverts a previously recorded receipt by extracting the transaction ID and deleting the corresponding record. Used for handling refunds or chargebacks from the store platform.

Whether the action allows quantity specification: NO

Whether the action is reversible: NO

TypeConditionRequiredDefaultValue LimitsDescription
namespaceNamestring
~ 128 charsNamespace name
Namespace-specific name. Specified using alphanumeric characters, hyphens (-), underscores (_), and periods (.).
userIdstring
~ 128 charsUser ID
Set #{userId} to replace the currently logged in user ID.
receiptstring
~ 524288 charsReceipt
timeOffsetTokenstring~ 1024 charsTime offset token
{
    "action": "Gs2Money:RevertRecordReceipt",
    "request": {
        "namespaceName": "[string]Namespace name",
        "userId": "[string]User ID",
        "receipt": "[string]Receipt",
        "timeOffsetToken": "[string]Time offset token"
    }
}
action: Gs2Money:RevertRecordReceipt
request:
  namespaceName: "[string]Namespace name"
  userId: "[string]User ID"
  receipt: "[string]Receipt"
  timeOffsetToken: "[string]Time offset token"
transaction.service("money").acquire.revert_record_receipt({
    namespaceName="[string]Namespace name",
    userId="[string]User ID",
    receipt="[string]Receipt",
    timeOffsetToken="[string]Time offset token",
})