GS2-Money

Create Client

money_client = client('money')

Method

charge_wallet

response = money_client:charge_wallet(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

ウォレットに仮想通貨をチャージします

trasactionId にトランザクションIDを指定することで、 1回の課金処理で複数回仮想通貨をチャージすることを防ぐことが出来ます。 重複したリクエストが発生した場合は 409エラー(ConflictException) が発生しますが、正常処理とするべきです。

Request

{
  moneyName=string,
  slot=number,
  count=number,
  price=number,
  transactionId=string,
  accessToken=string
}
  • moneyName
  • [string] 取得する仮想通貨の名前
  • slot
  • [number] 取得するウォレットのスロット番号
  • count
  • [number] 仮想通貨付与量
  • price
  • [number] 支払金額
  • transactionId
  • [string] トランザクションID
  • accessToken
  • [string] GS2-Auth で発行を受けたアクセストークン

Response

  • item
  • [Summary] ウォレット

charge_wallet_by_user

response = money_client:charge_wallet_by_user(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

ウォレットに仮想通貨をチャージします

trasactionId にトランザクションIDを指定することで、 1回の課金処理で複数回仮想通貨をチャージすることを防ぐことが出来ます。 重複したリクエストが発生した場合は 409エラー(ConflictException) が発生しますが、正常処理とするべきです。

Request

{
  moneyName=string,
  slot=number,
  userId=string,
  count=number,
  price=number,
  transactionId=string,
}
  • moneyName
  • [string] 仮想通貨の名前
  • slot
  • [number] ウォレットのスロット番号
  • userId
  • [string] ウォレットのユーザID
  • count
  • [number] 仮想通貨付与量
  • price
  • [number] 支払金額
  • transactionId
  • [string] トランザクションID

Response

  • item
  • [Summary] ウォレット

consume_wallet

response = money_client:consume_wallet(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

ウォレットから仮想通貨を消費します

paidOnly に true を指定することで、有償仮想通貨のみ消費対象とすることが出来ます。 プレミアムなサービスの提供時などに活用してください。

Request

{
  moneyName=string,
  slot=number,
  count=number,
  paidOnly=boolean,
  use=number,
  accessToken=string
}
  • moneyName
  • [string] 取得する仮想通貨の名前
  • slot
  • [number] 取得するウォレットのスロット番号
  • count
  • [number] 仮想通貨消費量
  • paidOnly
  • [boolean] 有償仮想通貨のみ消費対象としたい場合に true を指定します
  • use
  • [number] 用途ID
  • accessToken
  • [string] GS2-Auth で発行を受けたアクセストークン

Response

  • item
  • [Summary] ウォレット

create_item

response = money_client:create_item(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

商品を新規作成します

このデータは GS2-Money のレシート検証機能を利用するときにのみ登録する必要があります。 これはレシート検証の結果妥当だった場合対価として仮想通貨を付与するために、 どのような価値の仮想通貨をいくらで販売しているのかという情報を GS2-Money が持っていなければサービスを実現できないためです。

  • 商品(仮想通貨 60個)

-- プラットフォーム個別商品(AppleAppStore 120円) -- プラットフォーム個別商品(GooglePlay 120円)

という構造で商品を登録する必要があります。

Request

{
  moneyName=string,
  count=number,
  name=string,
}
  • moneyName
  • [string] 仮想通貨の名前
  • count
  • [number] 付与する仮想通貨の数
  • name
  • [string] 商品名

Response

  • item
  • [Item] 商品

create_money

response = money_client:create_money(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

仮想通貨を新規作成します

priority には仮想通貨の消費優先度を指定することが出来ます。 無償仮想通貨を優先して消費する場合は free を、有償仮想通貨を優先して消費する場合は paid を指定します。 資金決済法への対応としては有償仮想通貨を優先して消費するほうが未使用残高が溜まりにくく効率的ですが、 有償仮想通貨でしか購入できないアイテムを提供している場合はユーザの心象は悪いかもしれません。

ユーザごとにウォレットという財布のようなものを用意し、仮想通貨はそこにチャージされます。 ウォレットにはスロットという概念があり、各ユーザ複数の財布を持つことが出来ます。 これはガイドラインによってプラットフォームごとに仮想通貨を分けて管理する必要があるためです。 このガイドラインは有償仮想通貨にのみ適用される者で、無償仮想通貨はその義務は生じません。 そのため shareFree という設定値があり、ここを true に設定することですべてのスロットで無償仮想通貨を共有することができるようになります。 この際、あらゆるスロットにアクセスしても無償仮想通貨に関してはスロット0の仮想通貨が利用される。という挙動を取ります。

useVerifyReceipt で課金時に各プラットフォームから取得できるレシートを検証する機能を利用できるようになります。 レシートの検証機能を利用する場合は各プラットフォームごとに検証に必要な要素を登録しておく必要があります。

AppleAppStore におけるレシートの検証を実現するには appleKey を指定します。 appleKey にはアプリケーションの bundle_id を指定してください。 異なるアプリケーションで決済されたトランザクションで仮想通貨をチャージすることを防ぐ意味があります。

GooglePlay におけるレシートの検証を実現するには googleKey を指定します。 googleKey には Google Play Developer Console で取得できる公開鍵を指定してください。 レシートが改ざんされていないか検証するために利用します。

GS2-Money は資金決済法における前払式支払手段(自家型)に対応します。 マネージメントコンソールやAPIで取得できる未使用残高が1,000万円を超えると法的な責任が発生します。 詳しくはドキュメントを参照してください。

Request

{
  useVerifyReceipt=boolean,
  name=string,
  googleKey=string,
  priority=string,
  currency=string,
  shareFree=boolean,
  appleKey=string,
  description=string,
}
  • useVerifyReceipt
  • [boolean] ストアプラットフォームのレシートの検証機能を利用するか
  • name
  • [string] 仮想通貨名
  • googleKey
  • [string] Google のレシート検証用公開鍵
  • priority
  • [string] 支払い優先度
  • currency
  • [string] 通貨
  • shareFree
  • [boolean] 無償仮想通貨を異なるスロットで共有するか
  • appleKey
  • [string] Apple のアプリケーションバンドルID
  • description
  • [string] 説明文(1024文字以内)

Response

  • item
  • [Money] 仮想通貨

create_platformed_item

response = money_client:create_platformed_item(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

プラットフォーム個別商品を新規作成します

name には各プラットフォームの管理コンソールで作成した消費型アイテムの名前を指定してください。

Request

{
  moneyName=string,
  itemName=string,
  platform=string,
  price=number,
  name=string,
}
  • moneyName
  • [string] 仮想通貨の名前
  • itemName
  • [string] 商品の名前
  • platform
  • [string] 販売プラットフォーム
  • price
  • [number] 販売価格
  • name
  • [string] アプリ内課金ID

Response

  • item
  • [PlatformedItem] プラットフォーム個別商品

delete_item

response = money_client:delete_item(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

商品を削除します

Request

{
  moneyName=string,
  itemName=string,
}
  • moneyName
  • [string] 仮想通貨の名前
  • itemName
  • [string] 商品の名前

Response

None

delete_money

response = money_client:delete_money(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

仮想通貨を削除します

Request

{
  moneyName=string,
}
  • moneyName
  • [string] 取得する仮想通貨の名前

Response

None

delete_platformed_item

response = money_client:delete_platformed_item(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

プラットフォーム個別商品を削除します

Request

{
  moneyName=string,
  itemName=string,
  platform=string,
}
  • moneyName
  • [string] 仮想通貨の名前
  • itemName
  • [string] 商品の名前
  • platform
  • [string] プラットフォームの名前

Response

None

describe_item

response = money_client:describe_item(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

商品の一覧を取得します

Request

{
  moneyName=string,
  pageToken=string,
  limit=number,
}
  • moneyName
  • [string] 仮想通貨の名前
  • pageToken
  • [string] データの取得を開始する位置を指定するトークン
  • limit
  • [number] データの取得件数

Response

  • nextPageToken
  • [string] 次のページを読み込むためのトークン
  • items
  • [table<Item>] 商品

describe_money

response = money_client:describe_money(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

仮想通貨の一覧を取得します

Request

{
  pageToken=string,
  limit=number,
}
  • pageToken
  • [string] データの取得を開始する位置を指定するトークン
  • limit
  • [number] データの取得件数

Response

  • nextPageToken
  • [string] 次のページを読み込むためのトークン
  • items
  • [table<Money>] 仮想通貨

describe_platformed_item

response = money_client:describe_platformed_item(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

プラットフォーム個別商品の一覧を取得します

Request

{
  moneyName=string,
  itemName=string,
  pageToken=string,
  limit=number,
}
  • moneyName
  • [string] 仮想通貨の名前
  • itemName
  • [string] 商品の名前
  • pageToken
  • [string] データの取得を開始する位置を指定するトークン
  • limit
  • [number] データの取得件数

Response

  • nextPageToken
  • [string] 次のページを読み込むためのトークン
  • items
  • [table<PlatformedItem>] プラットフォーム個別商品

describe_receipt

response = money_client:describe_receipt(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

レシートを取得します

Request

{
  moneyName=string,
  begin=number,
  end=number,
  pageToken=string,
  limit=number,
}
  • moneyName
  • [string] 仮想通貨の名前
  • begin
  • [number] データの取得開始日時(エポック秒)
  • end
  • [number] データの取得終了日時(エポック秒)
  • pageToken
  • [string] データの取得を開始する位置を指定するトークン
  • limit
  • [number] データの取得件数

Response

  • nextPageToken
  • [string] 次のページを読み込むためのトークン
  • items
  • [table<Receipt>] レシート

describe_receipt_by_user_and_slot

response = money_client:describe_receipt_by_user_and_slot(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

指定したユーザ・スロット番号のレシートを取得します

Request

{
  moneyName=string,
  userId=string,
  slot=number,
  begin=number,
  end=number,
  pageToken=string,
  limit=number,
}
  • moneyName
  • [string] 仮想通貨の名前
  • userId
  • [string] ユーザID
  • slot
  • [number] スロット番号
  • begin
  • [number] データの取得開始日時(エポック秒)
  • end
  • [number] データの取得終了日時(エポック秒)
  • pageToken
  • [string] データの取得を開始する位置を指定するトークン
  • limit
  • [number] データの取得件数

Response

  • nextPageToken
  • [string] 次のページを読み込むためのトークン
  • items
  • [table<Receipt>] レシート

describe_wallet

response = money_client:describe_wallet(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

ウォレット一覧を取得します

Request

{
  moneyName=string,
  pageToken=string,
  limit=number,
  userId=string,
}
  • moneyName
  • [string] 仮想通貨の名前
  • pageToken
  • [string] データの取得を開始する位置を指定するトークン
  • limit
  • [number] データの取得件数
  • userId
  • [string] ユーザIDで対象のウォレットを絞り込む場合

Response

  • nextPageToken
  • [string] 次のページを読み込むためのトークン
  • items
  • [table<Summary>] ウォレット

get_item

response = money_client:get_item(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

商品を取得します

Request

{
  moneyName=string,
  itemName=string,
}
  • moneyName
  • [string] 仮想通貨の名前
  • itemName
  • [string] 商品の名前

Response

  • item
  • [Item] 商品

get_money

response = money_client:get_money(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

仮想通貨を取得します

Request

{
  moneyName=string,
}
  • moneyName
  • [string] 取得する仮想通貨の名前

Response

  • item
  • [Money] 仮想通貨

get_money_status

response = money_client:get_money_status(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

仮想通貨の状態を取得します

Request

{
  moneyName=string,
}
  • moneyName
  • [string] 取得する仮想通貨の名前

Response

  • status
  • [string] ステータス

get_platformed_item

response = money_client:get_platformed_item(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

プラットフォーム個別商品を取得します

Request

{
  moneyName=string,
  itemName=string,
  platform=string,
}
  • moneyName
  • [string] 仮想通貨の名前
  • itemName
  • [string] 商品の名前
  • platform
  • [string] プラットフォームの名前

Response

  • item
  • [PlatformedItem] プラットフォーム個別商品

get_wallet

response = money_client:get_wallet(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

ウォレットを取得します

ここでは有償仮想通貨と無償仮想通貨の数が取得できます。 有償仮想通貨は単価ごとに所持数量が別途管理されています。 詳細な構成を取得したい場合は Gs2Money:GetWalletDetail を使ってください。

Request

{
  moneyName=string,
  slot=number,
  accessToken=string
}
  • moneyName
  • [string] 仮想通貨の名前
  • slot
  • [number] ウォレットのスロット番号
  • accessToken
  • [string] GS2-Auth で発行を受けたアクセストークン

Response

  • item
  • [Summary] ウォレット

get_wallet_detail

response = money_client:get_wallet_detail(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

ウォレットの詳細を取得します

Request

{
  moneyName=string,
  slot=number,
  userId=string,
}
  • moneyName
  • [string] 取得する仮想通貨の名前
  • slot
  • [number] 取得するウォレットのスロット番号
  • userId
  • [string] ユーザID

Response

  • items
  • [table<Wallet>] ウォレットの詳細

update_item

response = money_client:update_item(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

商品を更新します

Request

{
  moneyName=string,
  itemName=string,
  count=number,
}
  • moneyName
  • [string] 仮想通貨の名前
  • itemName
  • [string] 商品の名前
  • count
  • [number] 付与する商品の数

Response

  • item
  • [Item] 商品

update_money

response = money_client:update_money(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

仮想通貨を更新します

Request

{
  moneyName=string,
  priority=string,
  useVerifyReceipt=boolean,
  googleKey=string,
  description=string,
  appleKey=string,
}
  • moneyName
  • [string] 取得する仮想通貨の名前
  • priority
  • [string] 支払い優先度
  • useVerifyReceipt
  • [boolean] ストアプラットフォームのレシートの検証機能を利用するか
  • googleKey
  • [string] Google のレシート検証用公開鍵
  • description
  • [string] 説明文(1024文字以内)
  • appleKey
  • [string] Apple のアプリケーションバンドルID

Response

  • item
  • [Money] 仮想通貨

update_platformed_item

response = money_client:update_platformed_item(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

プラットフォーム個別商品を更新します

Request

{
  moneyName=string,
  itemName=string,
  platform=string,
  price=number,
  name=string,
}
  • moneyName
  • [string] 仮想通貨の名前
  • itemName
  • [string] 商品の名前
  • platform
  • [string] プラットフォームの名前
  • price
  • [number] 販売価格
  • name
  • [string] アプリ内課金ID

Response

  • item
  • [PlatformedItem] プラットフォーム個別商品

verify

response = money_client:verify(request)
if response.isError then
  -- エラー処理 --
  print(response.statusCode)
  print(response.errorMessage)
else
  -- 正常処理 --
  print(response.result)
end

レシートを検証する

下記フォーマットのレシートをPOSTすることでレシートを検証し、仮想通貨のチャージまでアトミックに実行できます。 {

'Store': ストア名, 'Payload': レシート本体

}

現在ストア名には - AppleAppStore - GooglePlay が指定できます。

Request

{
  moneyName=string,
  slot=number,
  receipt=string,
  accessToken=string
}
  • moneyName
  • [string] 仮想通貨の名前
  • slot
  • [number] スロット番号
  • receipt
  • [string] レシートデータ
  • accessToken
  • [string] GS2-Auth で発行を受けたアクセストークン

Response

  • item
  • [Summary] ウォレット

Model

Item

  • itemId
  • [string] 商品ID
  • count
  • [number] 付与する仮想通貨の数
  • createAt
  • [number] 作成日時(エポック秒)
  • moneyId
  • [string] 仮想通貨ID
  • name
  • [string] 商品名
  • updateAt
  • [number] 最終更新日時(エポック秒)

PlatformedItem

  • itemId
  • [string] 商品ID
  • moneyId
  • [string] 仮想通貨ID
  • name
  • [string] アプリ内課金ID
  • platformedItemId
  • [string] プラットフォーム個別商品ID
  • price
  • [number] 販売価格
  • platform
  • [string] 販売プラットフォーム
  • createAt
  • [number] 作成日時(エポック秒)
  • updateAt
  • [number] 最終更新日時(エポック秒)

Wallet

  • count
  • [number] 所持数
  • price
  • [number] 単価

Money

  • useVerifyReceipt
  • [boolean] ストアプラットフォームのレシートの検証機能を利用するか
  • moneyId
  • [string] 仮想通貨ID
  • name
  • [string] 仮想通貨名
  • googleKey
  • [string] Google のレシート検証用公開鍵
  • priority
  • [string] 支払い優先度
  • currency
  • [string] 通貨
  • shareFree
  • [boolean] 無償仮想通貨を異なるスロットで共有するか
  • createAt
  • [number] 作成日時(エポック秒)
  • ownerId
  • [string] オーナーID
  • balance
  • [number] 未使用残高
  • updateAt
  • [number] 最終更新日時(エポック秒)
  • appleKey
  • [string] Apple のアプリケーションバンドルID
  • description
  • [string] 説明文

Receipt

  • slot
  • [number] スロット番号
  • use
  • [number] 用途
  • price
  • [number] 金額
  • userId
  • [string] ユーザID
  • free
  • [number] 無償仮想通貨
  • createAt
  • [number] 決済日時(エポック秒)
  • paid
  • [number] 有償仮想通貨
  • total
  • [number] 総数
  • type
  • [string] 種類

Summary

  • slot
  • [number] スロット番号
  • createAt
  • [number] 作成日時(エポック秒)
  • paid
  • [number] 有償仮想通貨所持量
  • updateAt
  • [number] 最終更新日時(エポック秒)
  • userId
  • [string] ユーザID
  • free
  • [number] 無償仮想通貨所持量