PG 支払い
以下は、Windows OSゲームでPG支払いをサポートするためにゲームサーバーが実装しなければならないPG支払いAPIです。Windows環境におけるPG支払いの詳細については、こちらをご確認ください。
支払い完了履歴照会¶
支払いが完了すると、決済代行業者(PG)が直接Hive IAP v4サーバーに支払い結果を送信します。この方法はネットワークの不安定さを補い、支払いデータの改ざんを防ぎます。準備作業中に登録された支払い情報と決済代行業者(PG)からの情報を比較することで、クロスバリデーションが行われます。支払い情報の整合性が確認されると、追加の安全対策が講じられ、支払い情報が保存されます。保存された支払い情報は、支払い完了履歴照会APIを通じて取得できます。クライアントがユーザーの支払い完了情報を必要とする際、ゲームサーバーから情報をリクエストし、Hive IAP v4サーバーを通じて支払い情報を取得します。ユーザーの支払い履歴が存在する場合、purchase_bypass_infoを使用して支払い情報の検証が行われます。
リクエストURL¶
| 商用URL | https://hiveiap.qpyou.cn/api_v4/purchases/unconsumed | 
|---|---|
| サンドボックスURL | https://sandbox-hiveiap.qpyou.cn/api_v4/purchases/unconsumed | 
| HTTPメソッド | POST | 
| コンテンツタイプ | application/json | 
| データ形式 | JSON | 
| 認証 | Bearer (トークン) | 
Bearerトークンは、HiveコンソールのHive認証キーに対応しています App Center > プロジェクト管理 > ゲーム会社を選択 > ゲーム詳細 > 基本情報。
リクエストパラメータ¶
| 名前 | タイプ | 必須 (必須: M, 任意: O) | 説明 | 
|---|---|---|---|
| appid | 文字列 | M | Hive コンソール > アプリセンターで登録され発行されたID | 
| market_id | 数値 | M | 一意のマーケットID (固定値 15を使用) | 
| server_id | 文字列 | M | 支払いが発生したゲームサーバーの区別コード | 
| user_id_type | 文字列 | M | Hive ユーザータイプ (固定値 player_idを使用) | 
| user_id | 数値 | M | Hive ユーザーID ( player_id) | 
応答要素¶
| 名前 | タイプ | 必須 (必須: M, 任意: O) | 説明 | 
|---|---|---|---|
| result | 数字 | M | 応答コード (0: 成功) | 
| result_msg | 文字列 | M | 応答コードに応じた結果メッセージ | 
| unconsumed_lists | オブジェクト配列 | M | |
| ┕ market_pid | 文字列 | M | ユニークな商品ID | 
| ┕ order_id | 文字列 | M | 注文番号 | 
| ┕ server_id | 文字列 | M | 購入ユーザーがアクセスしたゲームサーバーの識別コード | 
| ┕ vid | 文字列 | M | 購入ユーザーのPlayerID | 
| ┕ uid | 文字列 | O | Hive メンバーシップUIDの購入ユーザー | 
| ┕ amount | 文字列 | M | 支払い金額 | 
| ┕ currency | 文字列 | M | 支払い通貨 | 
| ┕ quantity | 数字 | M | 購入数量 | 
| ┕ started_datetime | 日時 | M | 支払い開始時間 (Y-m-d H:i:s) | 
| ┕ paid_datetime | 日時 | M | 支払い完了時間 (Y-m-d H:i:s) | 
| ┕ started_datetime_ms | 数字 | M | 支払い開始時間 (Unix タイムスタンプ ミリ秒) | 
| ┕ paid_datetime_ms | 数字 | M | 支払い完了時間 (Unix タイムスタンプ ミリ秒) | 
| ┕ hiveiap_receipt | 文字列 | M | 支払い情報の暗号化ハッシュ | 
| ┕ purchase_bypass_info | 文字列 | M | 領収書検証リクエストに必要な情報 | 
| ┕ iap_payload | 文字列 | O | クライアントからゲームサーバーに送信する追加情報 (JSON文字列形式) (情報が受信されない場合はnullを返す) | 
リクエストの例¶
curl -L -v
 -d '{"appid" : "com.com2us.hivesdk.windows.microsoftstore.global.normal","market_id" : 15,"server_id" : "kr","user_id_type": "player_id", "user_id": 30000056996}' \
 -H "Content-Type: text/html" \
 -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAyMDU2NzI2LCJqdGkiOiIxODczMTExMzIwIn0.3soFiHTPlObCoqR5xX9ZeOQTSvnHrHDHWmopP3QfWtY" \
 https://sandbox-hiveiap.qpyou.cn/api_v4/purchases/unconsumed
応答の例¶
{
    "result": 0,
    "result_msg": "SUCCESS",
    "unconsumed_lists": [
        {
            "market_pid": "com.com2us.hivesdk.windows.microsoftstore.global.normal.item01",
            "order_id": "h2164792542890731850",
            "server_id": "kr",
            "vid": "30000056996",
            "uid": "13079",
            "amount": "1200",
            "currency": "KRW",
            "quantity": 1,            
            "started_datetime": "2022-03-22 14:03:49",
            "paid_datetime": "2022-03-22 14:04:39",
            "market_id": "15",
            "hiveiap_receipt": "2YnGzfTCGycoMjcSyYyNXBjANwmFyB6m\/c0bYazQ8VQ=",
            "purchase_bypass_info": "eyJtYXJrZXRfcGlkIjoiY29tLmNvbTJ1cy5oaXZlc2R...",
            "started_datetime_ms": 1647925429000,
            "paid_datetime_ms": 1647925479000,
            "iap_payload": null
        }
    ]
}
支払い情報の確認¶
支払い結果検証APIはIAP v4レシート検証に基づいています。
支払い結果の検証は、以前に受け取った purchase_bypass_info を使用します。 purchase_bypass_info には、支払いを進める前にSDKを通じて受け取ったさまざまな情報が含まれており、Hive Analytics に送信されます。レシート検証リクエストと一緒に 販売ログ を送信する必要がある場合は、 game_info を使用してください。受信した game_info は、Hive IAP から分析サーバーにログを送信するためのプロキシとして機能します。
リクエストURL¶
| プロダクションURL | https://hiveiap-verify.qpyou.cn/api_v4/verify | 
|---|---|
| サンドボックスURL | https://sandbox-hiveiap-verify.qpyou.cn/api_v4/verify | 
| HTTPメソッド | POST | 
| コンテンツタイプ | text/html | 
| データフォーマット | JSON | 
| AUTHORIZATION | Bearer (token) | 
ベアラートークンは、Hive コンソールの Hive 認証キーに対応しています。アプリセンター > プロジェクト管理 > ゲーム会社を選択 > ゲーム詳細 > 基本情報。
リクエストパラメータ¶
| 名前 | タイプ | 必須 (必須: M, オプション: O) | 説明 | 
|---|---|---|---|
| purchase_bypass_info | 文字列 | M | レシートの代替データと分析送信のためのデータ | 
| game_info | オブジェクト配列 | O | ゲームログや売上ログなど、ゲームに送信するログがある場合、この値をゲームに追加して送信し、Hive IAPが仲介として分析サーバーに送信します。レシート検証段階ではアイテム配信完了(itemsendok)がわからないため、この部分は別途実装し、追加情報として提供する必要があります。 | 
| ⠀⠀server_uid | bigint | O | ゲームサーバーによって発行されたuser_id ない場合は、0 | 
| ⠀⠀giftee_uid | bigint | O | null: 個人用の支払い 0: 受取人はいるがUIDが確認できない | 
| ⠀⠀level | int | O | ユーザーのゲーム内レベル レベルがない場合は必要ありません。ない場合は、0。 | 
| ⠀⠀character_id | bigint | O | サーバー内のユニークなキャラクター識別子値 キャラクター概念がない場合は「0」 | 
| ⠀⠀character_type_id | int | O | キャラクタータイプ識別子値 キャラクター概念がないゲームの場合は「0」を入力 | 
| ⠀⠀character_level | int | O | キャラクタータイプ識別子値 キャラクター概念がないゲームの場合は「0」を入力 | 
| ⠀⠀is_emulator | int | O | BlueStacksのようなPCエミュレーター経由でアクセスする場合は「1」を入力、それ以外は「0」を入力 | 
応答要素¶
| 名前 | タイプ | 必須 (必須: M, オプション: O) | 説明 | 
|---|---|---|---|
| result | 数値 | M | レスポンスコード (レスポンスコードを参照) | 
| result_msg | 文字列 | M | レスポンスコードに応じた結果メッセージ | 
| hiveiap_transaction_id | 文字列 | M | 各検証済みレシートのために生成されたトランザクションID。この値は、重複レシートチェックを行うためにゲームサーバーに保存されます | 
| hiveiap_market_id | 文字列 | O | ユニークなマーケット番号 (PG支払い: 固定で15) | 
| hiveiap_market_pid | 文字列 | O | 支払い製品PID | 
| hiveiap_market_transaction_id | 文字列 | O | 注文のユニークな注文番号 | 
| hiveiap_receipt | 文字列 | O | マーケットレシートオブジェクトの値 (PG支払い: 固定でnull) | 
| hiveiap_purchase_test | 文字列 | O | テスト支払いステータス (Y: テスト支払い / N: 通常支払い) | 
| hiveiap_iap_payload | 文字列 | O | クライアントから受け取った追加情報で、ゲームサーバーに送信されます。JSON文字列形式であり、情報が受信されない場合は nullを返します。 | 
レスポンスコード¶
| コード | メッセージ | コメント | 
|---|---|---|
| 0 | 成功、重複レシート | 検証成功 | 
| 1000001 | 要求されたパラメータがありません | パラメータが送信されていない場合 | 
| 1000003 | DB接続エラー | DB接続に失敗した場合 | 
| 1000005 | 内部サーバーエラー | 内部サーバーエラー | 
| 1000006 | 必要なパラメータ情報が欠落しています | 必要なパラメータ値が欠落している場合 | 
| 1000503 | レシートの認証に失敗しました | レシートの検証に失敗した場合、またはハッキングされたレシートの場合 (例: スプーフィングハック) | 
| 1000507 | 購入情報の保存に失敗しました | 購入履歴の保存に失敗しました | 
| 1000524 | レシートの認証に失敗しました。(注文が存在しません) | レシートの検証に失敗しました (存在しない注文) | 
| 1000525 | レシートの認証に失敗しました。(パラメータが間違っています) | レシートの検証に失敗しました (パラメータエラー) | 
リクエストの例¶
curl -L -v 
 -d '{"purchase_bypass_info":"eyJtYXJrZXRfaWQiOiIxNSIsIm9yZGVyX2lkIjoiSDMxNjQ3OTI1NDI4OTA3MzE4NTAiLCJtYXJrZXRfcGlkIjoiY29tLmNvbTJ1cy5oaXZlc2RrLndpbmRvd3MubWljcm9zb2Z0c3RvcmUuZ2xvYmFsLm5vcm1hbC5pdGVtMDEiLCJ2aWQiOiIzMDAwMDA1Njk5NiIsInVpZCI6IjEzMDc5Iiwic2VydmVyX2lkIjoia3IiLCJhcHBpZCI6ImNvbS5jb20ydXMuaGl2ZXNkay53aW5kb3dzLm1pY3Jvc29mdHN0b3JlLmdsb2JhbC5ub3JtYWwiLCJhbW91bnQiOiIxMjAwIiwic3RhcnRlZF9kYXRldGltZSI6bnVsbCwicGFpZF9kYXRldGltZSI6bnVsbCwiY3VycmVuY3kiOiJLUlciLCJoaXZlaWFwX3JlY2VpcHQiOiIyWW5HemZUQ0d5Y29NamNTeVl5TlhCakFOd21GeUI2bVwvYzBiWWF6UThWUT0ifQ=="}' 
 -H "Content-Type: text/html"
  -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAyMDU2NzI2LCJqdGkiOiIxODczMTExMzIwIn0.3soFiHTPlObCoqR5xX9ZeOQTSvnHrHDHWmopP3QfWtY" \
 https://sandbox-hiveiap-verify.qpyou.cn/api_v4/verify
応答の例¶
{
    "result": 0,
    "result_msg": "success",
    "hiveiap_transaction_id": "HS_13",
    "hiveiap_market_id": 15,
    "hiveiap_market_pid": "com.com2us.hivesdk.windows.microsoftstore.global.normal.item01",
    "hiveiap_market_transaction_id": "h2164792542890731850",
    "hiveiap_receipt": null,
    "hiveiap_purchase_test": "N",
    "hiveiap_iap_payload": null
}
支払い結果処理¶
支払い結果処理APIはIAP v4アイテム支払い結果送信に基づいています。
支払い処理APIは、アイテムの購入から配達の完了までの支払いプロセスを完了させます。 支払い処理が完了していない場合、ユーザーは同じアイテムを購入することができません。購入を試みて支払いページに入ると、「このアイテムはすでに所有しています。」というメッセージが表示され、支払いは進行しません。
複数の支払いウィンドウを開いて購入および支払いを試みると、支払いが処理されていない製品は自動的にキャンセルされます。ゲームサーバーによって実施される購入制限の確認やアイテムの配信など、すべての支払いプロセスが処理された後、支払い結果がHive IAP v4サーバーに送信され、支払いが完了したことが通知されます。支払いキャンセルをリクエストしたい場合は、配信結果処理APIを通じてキャンセルをリクエストすることもできます。
リクエストURL¶
| 本番URL | https://hiveiap.qpyou.cn/api_v4/item_result | 
|---|---|
| サンドボックスURL | https://sandbox-hiveiap.qpyou.cn/api_v4/item_result | 
| HTTPメソッド | POST | 
| コンテンツタイプ | text/html | 
| データフォーマット | JSON | 
| 認証 | Bearer (token) | 
ベアラートークンは、Hive コンソール アプリセンター > プロジェクト管理 > ゲーム会社を選択 > ゲームの詳細 > 基本情報 に見つかる Hive 認証キーに対応しています。
リクエストパラメータ¶
| 名前 | タイプ | 必須 (必須: M, 任意: O) | 説明 | 
|---|---|---|---|
| hiveiap_transaction_id | 文字列 | M | 受領確認結果のhiveiap_transaction_id | 
| result_status | 数値 | M | アイテム配信成功ステータス 0: 配信失敗 1: 配信成功 2: 支払いキャンセル返金リクエスト(PGのみ) | 
| result_status_message | 文字列 | O | 配信失敗または支払いキャンセルリクエストの理由 | 
| user_id_type | 文字列 | M | Hive ユーザータイプ(固定値 player_id) | 
| user_id | 数値 | M | Hive ユーザーID( player_id) | 
| asset | オブジェクト配列 | O | 配信されたアイテムに関する情報 配信が成功した場合のみ値が提供され、配信が失敗した場合は空の配列([])が返されます | 
| ⠀⠀asset_id | 文字列 | O | アイテムID | 
| ⠀⠀asset_name | 文字列 | O | アイテム名 | 
| ⠀⠀quantity | 数値 | O | 配信されたアイテムの数 | 
応答要素¶
| 名前 | タイプ | 必須 (必須: M, 任意: O) | 説明 | 
|---|---|---|---|
| result | 数字 | M | レスポンスコード (0: 成功) | 
| result_msg | 文字列 | M | レスポンスコードに応じた結果メッセージ | 
リクエストの例¶
- Call
curl -L -v
 -d '{"hiveiap_transaction_id" : "HS_13","result_status": 1,"user_id_type": "player_id","user_id": 30000056996,"asset": [ {"asset_id":"item_id","asset_name":"item_name","quantity":1}
,{"asset_id":"item_id","asset_name":"item_name","quantity":1}]}' \
 -H "Content-Type: text/html" \
 -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIaXZlIiwiaWF0IjoxNjAyMDU2NzI2LCJqdGkiOiIxODczMTExMzIwIn0.3soFiHTPlObCoqR5xX9ZeOQTSvnHrHDHWmopP3QfWtY" \
 https://sandbox-hiveiap.qpyou.cn/api_v4/item_result
応答の例¶
支払い結果通知サービス¶
支払い結果通知サービスは、支払いの完了またはキャンセル時に結果をゲームサーバーに即座に送信します。このAPIは、購入結果の取得と同様にpurchase_bypass_infoの値を渡し、ゲームがこの値を使用してレシートを確認し、ユーザーにアイテムを付与できるようにします。レシートの確認とアイテムの付与は、支払い結果送信情報のtypeが支払い済みの場合にのみ進めるべきです。
Note
このAPIを使用するには、まずHiveコンソールでPG会社を設定する必要があります。 受領書の検証と商品の配信には、このAPIまたは支払い完了履歴照会APIのいずれかを使用することをお勧めします。
支払い結果送信に関する基本情報¶
| HTTPメソッド | POST | 
|---|---|
| コンテンツタイプ | application/json | 
| データ形式 | JSON | 
支払い結果送信情報¶
| 名前 | タイプ | 必須 (必須: M, 任意: O) | 説明 | 
|---|---|---|---|
| type | 文字列 | M | 通知タイプ (paid: 支払い完了, cancelled: 支払いキャンセルまたは返金) | 
| market_pid | 文字列 | M | 一意の製品ID | 
| order_id | 文字列 | M | 注文番号 | 
| server_id | 文字列 | M | 購入ユーザーがアクセスしたゲームサーバーを区別するコード | 
| vid | 文字列 | M | 購入ユーザーのプレイヤーID | 
| vid_type | 文字列 | O | SDKバージョン値: v4 | 
| uid | 文字列 | O | Hive メンバーシップUIDの購入ユーザー | 
| amount | 文字列 | M | 支払い金額 | 
| currency | 文字列 | M | 支払い通貨 | 
| quantity | 数値 | M | 購入数量 | 
| started_datetime | 日時 | M | 支払いが開始された時間 (Y-m-d H:i:s) | 
| paid_datetime | 日時 | M | 支払いが完了した時間 (Y-m-d H:i:s) | 
| cancelled_datetime | 日時 | O | 支払いがキャンセルまたは返金された時間 (Y-m-d H:i:s) | 
| started_datetime_ms | 数値 | M | 支払いが開始された時間 (Unix タイムスタンプミリ秒) | 
| paid_datetime_ms | 数値 | M | 支払いが完了した時間 (Unix タイムスタンプミリ秒) | 
| cancelled_datetime_ms | 数値 | O | 支払いがキャンセルまたは返金された時間 (Unix タイムスタンプミリ秒) | 
| cancelled_reason | 文字列 | O | 支払いのキャンセルまたは返金の理由 | 
| hiveiap_receipt | 文字列 | M | 支払い情報の暗号化されたハッシュ | 
| purchase_bypass_info | 文字列 | M | レシート検証リクエストに必要な情報 | 
| iap_payload | 文字列 | O | クライアントから受け取った追加情報で、ゲームサーバーに送信されます。JSON文字列形式で、情報が受信されない場合はnullを返します。 | 
支払い結果送信の例(支払い完了時)¶
{
    "type": "paid",
    "market_id": "15",
    "order_id": "H2168993822440686730",
    "market_pid": "com.com2us.hivesdk.windows.microsoftstore.global.normal.item01",
    "vid": "20000011337",
    "uid": "67200717",
    "vid_type": "v4",
    "server_id": "kr",
    "appid": "com.com2us.hivesdk.windows.microsoftstore.global.normal",
    "amount": "1200",
    "started_datetime": "2023-07-21 20:17:06",
    "paid_datetime": "2023-07-21 20:18:13",
    "cancelled_datetime": null,
    "cancelled_reason": null,
    "currency": "KRW",
    "quantity": 1,
    "hiveiap_receipt": "tJpwQSIlNFiCSPokHSRYTvTLmtbDiSZnkYa7+IWaMwM=",
    "started_datetime_ms": 1689938226000,
    "paid_datetime_ms": 1689938293000,
    "cancelled_datetime_ms": null,
    "iap_payload": null,
    "purchase_bypass_info": "eyJ0eXBlIjoicGFpZCIsIm1hcmtldF9pZCI6IjE1Iiwib3JkZXJfaWQiOi..."
}
支払い結果送信の例(支払いがキャンセルされた場合)¶
{
    "type": "cancelled",
    "market_id": "15",
    "order_id": "H2168993822440686730",
    "market_pid": "com.com2us.hivesdk.windows.microsoftstore.global.normal.item01",
    "vid": "20000011337",
    "uid": "67200717",
    "vid_type": "v4",
    "server_id": "kr",
    "appid": "com.com2us.hivesdk.windows.microsoftstore.global.normal",
    "amount": "1200",
    "started_datetime": "2023-07-21 20:17:06",
    "paid_datetime": "2023-07-21 20:18:13",
    "cancelled_datetime": "2023-07-21 20:21:44",
    "cancelled_reason": "테스트 결제 취소",
    "currency": "KRW",
    "quantity": 1,
    "hiveiap_receipt": "tJpwQSIlNFiCSPokHSRYTvTLmtbDiSZnkYa7+IWaMwM=",
    "started_datetime_ms": 1689938226000,
    "paid_datetime_ms": 1689938293000,
    "cancelled_datetime_ms": 1689938504000,
    "iap_payload": null,
    "purchase_bypass_info": "eyJ0eXBlIjoiY2FuY2VsbGVkIiwibWFya2V0X2lkIjoiMT..."
}