Steam でゲーム内の購入を作る手順|取引の流れ・価格・テスト
Steam のゲーム内の購入は、Steam の顧客が Steam ウォレットを利用して購入できるように、常に microtransaction API を使う必要があります。ゲームの購入サーバーが Steam の請求サーバーと HTTP で通信して、取引を進めます。
前に要るもの
取引を進める前に、次のものを用意します。
- WebAPI パブリッシャーキー:まず作成します。このキーはすべての Web サーバーのリクエスト時に送信され、サーバーのリクエストの承認に使われます。リクエストと共に
key=パラメーターとして送信されます。ISteamMicroTxn の各メソッドのkeyは、マイクロトランザクション権限付きの Steamworks Web API パブリッシャーキーです。 - 注文の保存:個々の注文情報は、将来参照できるよう、お使いのシステム上に保存します。Steam の中では、取引の参照に一意の64ビットの注文IDを使います。
- リクエストの送信:すべてのリクエストは、TLS セキュアな接続を使って、GET または POST で送信される必要があります。コンテンツのタイプは
application/x-www-form-urlencodedで、リクエストのボディ内に標準の URL エンコード方式で POST パラメーターを含めます。テキストは UTF-8 で送信する必要があります。リクエストは、ベース URIhttps://partner.steam-api.com/ISteamMicroTxn/*を経由します。 - 応答:コマンドの中には Pass/Fail を結果として返すものがあります。結果が Fail の場合、追加のエラーコードと説明が追加されます。Pass の場合には、これらのキーが表示されることはありません。応答は、デフォルトでは JSON 形式で返されます。リクエストに
format=xmlパラメーターを追加すると、XML 形式を指定できます。この場合、パラメーターキーを送信し、順序不同で返せるフレキシブルな JSON または XML ソリューションの実装が必要です。
取引の全体の流れ
Steam の顧客が Steam ウォレットを利用して購入できるように、ゲーム内購入では常に、microtransaction API を使う必要があります。Steam ウォレットは、個々のアイテムの購入とゲーム内通貨の購入のいずれにも使えます。
決済システムは、ゲーム内での購入プロセス、Steam の請求 Web サービス、顧客による承認プロセスの組み合わせです。ユーザーは、オーダー開始からトランザクション完了までのすべてをゲーム内で完結できます。購入リクエストの処理には、ゲームシステムが採用しているサービスエンティティを、購入サーバーとして使用できます。Web サーバーでも、認証システムでも構いません。サーバーに必要なのは、Steam 請求サーバーと HTTP を介して通信することです。
購入プロセスは、次の順序で進みます。
- ユーザーがゲーム内アイテムの購入を希望すると、ゲームは購入リクエストをゲームの購入サーバーに送信します。
- 購入サーバーは、ユーザーの居住国、使用言語、使用通貨の情報を Steam 請求サーバーにリクエストできます。このデータを使って、必要であれば価格設定を調整できます。
- 購入サーバーは、Steam Web サービスに対して、クライアントの代わりに支払トランザクションを開始します。このリクエストは安全な HTTP POST で、ユーザーのメタデータと、ユーザーが購入を望む各アイテムの説明と価格が含まれます。
- Steam は、このリクエストを受信すると、クライアントの Steam オーバーレイを自動的に有効化して、ユーザーに全アイテムとその価格のリストを提示し、トランザクションの確認と承認を促すボタンを表示します。ユーザーの Steam アカウント残高が不足している場合、オーバーレイがチャージプロセスへと案内します。Steam オーバーレイは、ユーザーの支払情報をすべて収集して処理します。
- 完了すると、ユーザーはその購入についての承認または拒否の通知を受け取ります。ゲームはこの通知のコールバックの受け取りを登録し、ゲームの購入サーバーにその結果を転送します。
- 購入サーバーは通知を受け取り、FinalizeTransaction の呼び出し要求を Steam に送り、処理を完了します。正常な応答が得られれば、ユーザーに対して請求が実行され、アイテムをユーザーに付与することができます。
ゲーム内で完結する購入のステップ
統合されたストアがあり、ユーザーエクスペリエンスがゲーム内で完結する場合のステップです。
ステップ1:Steamworks API を初期化する
ゲームには Steamworks API を使う必要があります。これは、ヘッダーファイルを含め、lib ファイルにリンクし、製品に DLL を同梱することを意味します。以下のステップを続行する前にまず、正常に Steamworks API を初期化することが必要です。
ステップ2:ユーザーのメタデータを集める
ユーザーがゲーム内で1つ以上のアイテムの購入を選択します。アイテムが識別されると、ゲームはユーザーに関するメタデータをいくつか収集する必要があります。
- Steam ID:64ビットの数列で、Steam システム内のユーザーを一意的に識別します。
- 国コード:ユーザーの ISO 3166 国コードで、ユーザーの購入実行場所を示します。この情報を使い、その購入に際して適用する価格を決定します。
- 通貨コード:ユーザーへの請求に使用される ISO 4217 通貨コードです。
- クライアントのゲーム言語コード:Steam クライアントのゲームが現在実行中の ISO 639-1 言語コードです。
Steam ID と言語は、Steamworks API 呼び出しの ISteamUser::GetSteamID と ISteamApps::GetCurrentGameLanguage から取得できます。ユーザーの国および通貨タイプを取得するには、ISteamMicroTxn/GetUserInfo Web API リクエストでユーザーの Steam ID を渡します。このユーザーのメタデータは、通常の購入データとバンドルされて購入サーバーに送られます。
ステップ3:購入サーバーが InitTxn で購入リクエストを開始する
購入サーバーは、Steam クライアントに代わり、Steam Web サービスを介して ISteamMicroTxn/InitTxn で購入リクエストを実行します。リクエストと共に、次のデータの送信が必要です。
- 注文ID:この購入に割り当てる一意の64ビットの数値です。Steam システム内でトランザクションを参照するのに使用します。
- Steam ID:Steam クライアントから受け取ったユーザーID
- App ID:Steam ゲームに一意の識別子
- 言語:アイテムがリストされた ISO 639-1 言語コード
- 通貨:入力した価格の ISO 4217 通貨コード
- ユーザーが購入しようとしている1つ以上のアイテムのリスト
各アイテムには、次のデータを指定します。
- アイテムID:アイテム用の32ビット識別子
- 数量:トランザクション内のこのタイプの商品の数
- 合計:この商品に対してユーザーに請求する合計金額(100分の1単位で記載)。この商品の数量値が1より大きい場合には、この値が請求額になります。
- 商品説明:アイテムについての説明テキストです。トランザクションの承認の際にユーザーに表示され、Steam クライアントで設定された言語コードに基づき、ローカライズされた説明を表示できます。
- アイテムカテゴリー:アイテムが所属するカテゴリーのための任意の説明テキストです。この値は、バックエンドの Steam レポートで販売データをグループ化するのに使用され、ユーザーに表示されることはありません。
InitTxn の Web API では、商品説明は最長128文字、カテゴリーは最長64文字です。Steam がトランザクションを受け入れると自動的に、購入の承認を求めるよう Steam クライアントに対して通知されます。エラーが返された場合は、問題を修正し、新しい購入トランザクションが送信される必要があります。
ステップ4:ユーザーがオーバーレイで承認する
InitTxn が正常に試行されると、ユーザーは Steam のゲーム内オーバーレイを通して、トランザクションの承認が必要であることを知らせる通知を受け取ります。トランザクションの詳細は、購入リクエストによって提供された商品説明を使って表示されます。これでユーザーがトランザクションを承認できるようになります。ユーザーのアカウントの Steam ウォレットに十分な残高がない場合、Steam はユーザーをチャージプロセスに自動的に案内します。
最後に、トランザクションが承認または拒否されたという通知がゲームに通知されます。ゲームは ISteamUser::MicroTxnAuthorizationResponse_t コールバックハンドラーを登録し、承認(または拒否)イベントの通知を受け取る必要があります。このコールバック結果には、AppID、注文ID、トランザクションの承認状態が含まれます。ゲームはこの結果を購入サーバーに送信し、購入サーバーはトランザクションを確定できることを知ることになります。
ステップ5:FinalizeTxn で確定する
購入サーバーは ISteamMicroTxn/FinalizeTxn で、注文ID(トランザクションを実行するために作成した注文ID)と App ID(Steam ゲームに一意の識別子)のパラメーターを使ってトランザクションを確定します。正常なレスポンスが返された場合、それは購入が承諾され、アイテムが付与されるべきことを意味します。エラーのレスポンスは購入が正しく完了しなかったことを意味し、該当するエラーメッセージが表示されます。FinalizeTxn は支払いに必要な資金を回収するため、ユーザーが取引を承認し、承認が成功したという通知を受け取った後にのみ呼び出されるべきものです。
ステップ6:GetReport で決済ステータスの変更を受け取る
購入サーバーがトランザクションの決済ステータス変更に関する通知を受け取るには、ISteamMicroTxn/GetReport を定期的に呼び出す必要があります。決済情報のアップデートを照合するには、この API を少なくとも1日に1回呼び出す必要があります。サーバーがトランザクションを常に最新の状態に保つために、毎分呼び出しても問題ありません。
価格と通貨
InitTxn に送る通貨コードが、ステップ2で取得したユーザーの通貨コードと一致しない場合には、現在の為替レートで自動両替が適用されます。Steam は、ユーザーの通貨に両替した価格を表示し、ユーザーの承認を求めます。
InitTxn の amount は、指定の currency コードと同じフォーマットで渡す必要があります。通貨によっては、小数点以下の価格設定をサポートしていない場合があります。Steamworks に入れる価格の決め方はSteam の価格の決め方にあります。
サンドボックスで試す
Steam は統合テスト用にデベロッパーサンドボックスを提供しています。サンドボックスは通常の API から利用できるリクエストにすべて対応していますが、テスターの Steam ウォレットから実際にクレジットが引き出されることはありません。サンドボックスへのアクセスには、別のベース URI https://partner.steam-api.com/ISteamMicroTxnSandbox/* を使用します。
取り消された取引の状態と回収
ご自身の判断で、ISteamMicroTxn/RefundTxn を使って顧客のトランザクションを返金できます。返金は、元の注文の全額に対してのみ可能です。ただし、トランザクションを取り消す方法は他にもあり、これらは注意を要します。
トランザクションが取り消された状態になった場合、バックエンドは可能な限り、取り消されたトランザクションに関連するアイテムの回収を試みる必要があります。取り消された状態には、たとえば次のものがあります。
- Refunded:注文が返金され、ゲームがアイテムを無効化することが必要な状態です。返品プロセスはユーザー自身で開始できます。
- PartialRefund:カート内の1つ以上のアイテムが返品された状態です。各アイテムの
itemstatusフィールドで詳細を確認できます。 - Chargedback:注文が不正取引または異議の対象となったため、ゲームがアイテムを無効化することが必要な状態です。
- RefundedSuspectedFraud:不正購入が疑われたため、Valve によって注文が返金された状態です。製品の無効化はゲーム側で実施される必要があります。
- RefundedFriendlyFraud:本人の承認なしの購入(Friendly Fraud)と判断されたため、Valve によって注文が返品された状態です。製品の無効化はゲーム側で実施される必要があります。
あなたのゲーム内ストアにおいて、Steam は支払いプロセッサーとしての役割を担います。Steam は詐欺対策の確認を行いますが、ユーザーがゲーム内で購入した物を把握できるのはゲームサーバーのみです。
Steam での返金の決まりは返金の条件と地域別価格に、DLC の作り方と配り方はDLC の作成と配り方にあります。用語はDLCにあります。
Web ベースの購入
購入オプションが通常 Web ページ経由で処理されるゲームの場合や、ゲームの Web サイト上で Steam を支払方法として提供したい場合には、オプションでブラウザーベースでの統合を利用することも可能です。ゲームストアが Web ページである場合、または既存のストア会計システムに Steam を支払方法として追加するだけの場合の手順は、次のとおりです。
- ユーザーの SteamID を入手します。ユーザーが現在ゲーム内にいる場合は、Steamworks API の
ISteamUser::GetSteamIDを使います。ユーザーが Web サイトにいる場合は、Steamworks OpenID API を使って SteamID を安全に取得します。 - ユーザーの国と通貨の情報を取得するには、ユーザーの Steam ID を渡して
ISteamMicroTxn/GetUserInfoを呼び出します。GetUserInfoにはオプションの IP アドレスパラメーターがあり、ユーザーの居住地についての情報を Steam に伝えることができます。Web ベースで購入しているとき、または Steam クライアントでログインせずにゲームをプレイしているときのユーザーのすべてのパブリック IP アドレスを送信します。 - 購入サーバーが
ISteamMicroTxn/InitTxnで購入リクエストを開始します。通常のゲーム内での購入で提供する情報に加えて、usersessionとipaddressの2つのデータが必要です。usersessionは「web」に設定し、ユーザーがブラウザーを通じてトランザクションを承認することを示します。ipaddressは、ユーザーのパブリック IP アドレスです。usersessionが WEB に設定されている場合、InitTxnのリクエストは追加のsteamurlパラメーターを返します。これは、ユーザーの Web セッションをリダイレクトする先の固有の URL で、この API コールによって作成されたトランザクションを特定します。 - 購入サーバーは、
InitTxnで返された Steam URL にユーザーの Web セッションをリダイレクトします。リダイレクトに伴い、トランザクションの承認(または拒否)後にユーザーが返送される場所の URL をreturnurl=で付加します。Steam URL にリダイレクトされたユーザーは、認証前に Steam にログインする必要があります。 - ユーザーがゲームサイトに戻ったら、
ISteamMicroTxn/QueryTxnを呼び出して結果を取得します。注文のステータスが「Approved(承認)」の場合、ISteamMicroTxn/FinalizeTxnを呼び出して代金を取得します。それ以外のステータスが返された場合には、トランザクションを破棄します。ユーザーがブラウザーを閉じるか、サイトに戻ることを妨げる何かが起こった場合には、トランザクションを破棄し、FinalizeTxnを呼び出しません。ユーザーがトランザクションを承認したにもかかわらず、何らかの理由でリダイレクトされなかった場合も、トランザクションを破棄して最初からやり直します。 - 決済ステータスの変更は、ゲーム内の購入と同じく、
ISteamMicroTxn/GetReportを定期的に呼び出して受け取ります。決済情報のアップデートを照合するには、この API を少なくとも1日に1回呼び出す必要があります。
情報源
- Steamworks — マイクロトランザクション(ゲーム内購入)(ゲーム内購入の要件・Steam ウォレット・不正行為に備える)https://partner.steamgames.com/doc/features/microtransactions?l=japanese確認日 2026-10-21
- Steamworks — マイクロトランザクション実装ガイド(決済システムの仕組み・接続のセットアップ・テストの実施・統合ステップ・ステータスの値)https://partner.steamgames.com/doc/features/microtransactions/implementation?l=japanese確認日 2026-10-21
- Steamworks — ISteamMicroTxn インターフェイス(InitTxn・FinalizeTxn・GetUserInfo・GetReport・RefundTxn・QueryTxn)https://partner.steamgames.com/doc/webapi/ISteamMicroTxn確認日 2026-10-21