logo

ゲームアイテムなどを有償で販売する

概要

ゲームアイテムやゲーム機能などコンテンツ内で提供されるサービスを有償で販売したい場合、PlayMining Platform(以下、PMP)ではユーザー先払い式の実装をお願いしています。
PMP収納代行サービスを用いてユーザーからの支払いを受け付けたあと、購入された商品に従ったサービスを提供してください。

シーケンス

sequenceDiagram autonumber actor ユーザー participant ユーザー口座 participant コンテンツ participant CONTENTS_DEPOSIT participant 決済代行会社 participant OWNER_SALE participant PMP ユーザー->>コンテンツ:購入 activate コンテンツ コンテンツ->>PMP:決済開始API activate PMP PMP-->>コンテンツ:決済ページの情報 deactivate PMP コンテンツ-->>ユーザー:決済ページを表示 deactivate コンテンツ loop ポーリング コンテンツ->>PMP:決済確認API activate PMP PMP-->>コンテンツ:決済未完了を通知 end alt FIAT決済の場合 ユーザー->>決済代行会社:支払い Note right of ユーザー:FIAT 決済代行会社->>PMP:決済完了通知 OWNER_SALE-->>CONTENTS_DEPOSIT:納付金 Note left of OWNER_SALE:FIAT else DEP決済の場合 ユーザー口座->>OWNER_SALE:支払い Note right of ユーザー口座:DEP OWNER_SALE-->>CONTENTS_DEPOSIT:納付金 Note left of OWNER_SALE:DEP end PMP-->>コンテンツ:決済完了を通知 deactivate PMP コンテンツ-->>ユーザー:ゲームアイテムの配布など
Image without caption

システム設計

処理の流れ

  1. ユーザーの購入を受け付ける。
    1. コンテンツ内でゲームアイテムなど何かを購入するアクションが取られたら、決済開始APIをリクエストして、決済ページの情報を取得してください。
    2. ステート管理のために、購入しようとしているユーザー、購入しようとしている商品、決済ページのID、決済ページのURL、進行状況が紐付けられたデータレコードを作成してください。
        • 何か不測の事態が発生してユーザーに不利益を与えた場合も、このデータさえあれば、Arc側の決済情報と突き合わせて問題の解決を図れます。絶対に保存ミスがないよう、このデータレコード作成は最新の注意を払って実装お願いします。
  1. ユーザーを決済ページへ誘導する。
    1. 新しいタブ or ウインドウで決済ページを開き、ユーザーに決済操作を促してください。
      1. 決済開始APIのリダイレクトオプションを利用する場合は、そのままページ遷移して構いません。
      2. この場合、次項に記載する決済確認APIを用いた決済完了の監視は、リダイレクトでユーザーが戻ってきた際に実施してください。
    2. 同時に決済確認APIをポーリングする形で、決済ページの有効期限までユーザーの決済完了を監視してください。
        • キャンセル、決済失敗、または有効期限切れの場合、ユーザーは決済ページから支払いを実行できない状態です。1bで作成したデータレコードの進行状況ステータスをキャンセルに更新し、処理を完了して問題ありません。
        • 決済ページが閉じられた場合など、ユーザー視点では購入をキャンセルしているのに、決済ページの有効期限まで決済確認APIの結果が変わらない場合に備え、ユーザー主導で監視を中断できる導線(キャンセルボタン等)の開発も推奨します。
          • 監視を中断する場合は、それより先に必ず決済キャンセルAPIをリクエストして、監視の中断後ユーザーが決済ページから支払いを実行できないようにしてください。
          • 決済がキャンセル状態になったことを確認するか、APIリクエストに対して有効期限切れエラーが返ってきた場合は、前項と同じく1bで作成したデータレコードの進行状況ステータスをキャンセルに更新し、処理を完了して問題ありません。
  1. ゲームアイテム付与などの後続処理を行う。
    1. 監視していたユーザーの決済完了が確認されたら、1bで作成したデータレコードの進行状況ステータスを決済完了に更新してください。
    2. 続いて、ユーザーの購入商品に従ったゲームアイテムの付与などを実行し、最後に1bで作成したデータレコードの進行状況ステータスを購入完了に更新してください。
        • ユーザーの決済と購入契約の履行が非同期である点に注意してください。決済完了を確認したあと、ユーザーに対してサービスを提供できないような商品を売ってしまうと、最悪の場合は行政処分や訴訟に発展する可能性があります。
        • ゲームアイテムの付与などと購入完了へのステータス更新は、必ず1つのトランザクションにまとめる設計を採ってください。前者が済んだ状態で後者だけ失敗する状況が発生し得る設計は、容易にDupeのバグを引き起こします。
        • 1bで作成したデータレコードの更新処理を実装する際は、最初に必ず購入完了のステータスでないことのバリデーションを行ってください。購入完了のステータスから別のステータスへの更新があり得る設計は、容易にDupeのバグを引き起こします。
    3. 通信途絶などにより、キャンセルでも購入完了でもない状態のまま、処理がエラー終了する(処理未完了のレコードが生まれる)ようなケースも考えられます。ゲームサーバーとの通信時に可能な限り処理未完了のレコードが存在しないかを確認し、存在した場合は購入再開処理が行われるよう実装をお願いします。
        • 特にレシート発行APIをリクエストする際は、その前に必ず処理未完了のレコードが存在しないかを確認してください。
        • 購入再開処理は、たとえば1bで作成したデータレコードの進行状況ステータスが決済完了でなければ2から再開し、決済完了であれば3bから再開するようなイメージになります。
          • 繰り返しになりますが、ユーザーの決済と購入契約の履行が非同期である点に注意してください。購入再開処理を経由して決済完了を確認するようなケースでは、ユーザーが実際に決済を完了したあと、しばらく時間を置いてからゲームアイテムの付与などを行うことになります。この場合でも問題が起きないような商品開発をお願いします。
        • ユーザーが自発的に購入の再開を実施できるような導線(購入再開ボタン等)の開発も推奨されます。

簡易フローチャート

--- title: コンテンツ内購入の簡易フローチャート --- graph TB SYSTEM01(["ショップ画面など"]) API01{{"決済開始API"}} SYSTEM01-."購入".->API01 DB01[("必要情報をレコード")] API01--"発行成功"-->DB01 WINDOW01("エラー通知") API01--"発行失敗"-->WINDOW01 DB01--"レコード失敗"-->WINDOW01 API02{{"決済確認API"}} DB01--"Arc決済ページを表示"-->API02 API03{{"決済キャンセルAPI"}} API02-."中止".->API03 BRANCH01{"失効成功"} BRANCH01--"NO"-->API02 API03-->BRANCH01 DB02[("ステータス更新")] BRANCH01--"YES or 有効期限切れエラー"-->DB02 BRANCH02{"更新成功"} DB02--"キャンセル"-->BRANCH02 BRANCH03{"決済完了"} API02-->BRANCH03 BRANCH03--"CREATED, PAYMENT_WAITING"-->API02 BRANCH03--"CANCELED, PAYMENT_FAILDE, EXPIRED"-->DB02 DB03[("ステータス更新")] BRANCH03--"COMPLETED"-->DB03 BRANCH04{"更新成功"} DB03--"決済完了"-->BRANCH04 subgraph SUB01 ["トランザクション"] direction TB SUB01SYSTEM01(["ゲームアイテムの付与など"]) SUB01DB01[("ステータス更新")] SUB01SYSTEM01--"付与完了"-->SUB01DB01 SUB01BRANCH01{"正常終了"} SUB01DB01--"購入完了"-->SUB01BRANCH01 SUB01SYSTEM01--"付与失敗"-->SUB01BRANCH01 end BRANCH04--"YES"-->SUB01 WINDOW02("購入失敗通知") BRANCH02--"NO"-->WINDOW02 BRANCH04--"NO"-->WINDOW02 SUB01BRANCH01--"NO"-->WINDOW02 SYSTEM02(["購入再開処理"]) WINDOW02-->SYSTEM02 WINDOW03("キャンセル通知") BRANCH02--"YES"-->WINDOW03 WINDOW04("購入完了通知") SUB01BRANCH01--"YES"-->WINDOW04
Image without caption

テスト関連情報

クレジットカード

開発環境のArc決済ページでUSD払いを選択する場合は、下記のクレジットカード情報を利用して決済を行ってください。
名義人とメールアドレスは不問ですが、決済完了後に支払い帳票がメールで送られてきます。
帳票も確認したい場合は現在ご自身が利用中のメールアドレスを入力してください。
なお、カード情報入力後に2段階認証ページが表示されます。
認証コード送信先はSMSかメールを選択し、続けて表示される入力フォームにOTP欄のパスワードを入力して、決済を承認してください。
カード種別
VISA
カード番号
4966 2303 3004 2653
CVV
297
有効期限
08/28
OTP
123456
カード種別
MasterCard
カード番号
5243 1200 3050 4148
CVC
674
有効期限
12/24
OTP
123456