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