ノーコード決済 - サーバサイド IAP検証

このドキュメントでは、サーバサイド IAP 検証の構成手順について説明します。

now.ggノーコード決済では、購入の真正性を確認するためにサーバサイドの検証機能を実装しています。検証に成功すると、ゲーム内で購入した商品をユーザに割り当てたり、購入した商品を消費済みとして処理することができます。

アプリにノーコード決済を実装する方法:

  • このガイドに従って、nowStudioで ‘ノーコード決済’ を選択します。
  • 以下の手順で、‘ノーコード決済’のサーバ側設定を行います。

ワークフロー

以下はnow.ggノーコード決済に関連するワークフローです。:

  • ユーザーは購入するアプリ内製品を選択します。
  • now.gg決済が呼び出されます。
  • 決済が正常に処理されると、ゲーム内で購入トークンを取得します。
  • ゲームからゲームサーバに購入トークンが送信され、確認されます。
  • ゲームサーバは購入トークンをnow.ggサーバに確認します。
  • 確認に成功すると、ゲームは購入したアプリ内商品をユーザに割り当てます。

サーバサイド設定の実装

このセクションでは’ノーコード決済’のサーバサイド設定を実装する手順を説明します。
Contents

1. 購入検証

この手順を使用してnow.ggノーコード決済を使用したアプリ内課金を確認できます。

重要な情報

  • すでに他のプロバイダで購入を確認している場合は、すでに使用している同じURLハンドラでpurchase_tokenを受け取ります。
  • now.gg purchase_tokenは‘-nowgg-’で始まります。これを使って、now.ggからのアプリ内課金を識別することができます。

以下はアプリ内課金を確認する実装のサンプルです。:

def verify_purchase(package_name, product_id, purchase_token):

   # game-specific validation code
    
    if purchase_token.startswith("-nowgg-"):
        response = verify_purchase_with_nowgg(
                   package_name, product_id, purchase_token)
    else:
        # continue verification with other providers

   # game-specific response handling code

nowgg確認コードのサンプル

以下のサンプルコードはverifyPurchase APIを使用した関連リクエストの例です。.

import requests

  url = "https://payments-api.now.gg/v2/seller/order/verifyPurchase"

  payload = 'purchaseToken=<nowgg_purchase_token>'
  headers = {
  'Authorization': '<payment_api_key_here>',
  'Content-Type': 'application/x-www-form-urlencoded'
  }

  response = requests.request("POST", url, headers=headers, data=payload)

  print(response.text)

重要な情報

  • PurchaseToken – URLハンドラから受け取ったpurchaseTokenを使用します。
  • API KeyPayments API Key はnowStudioのクレデンシャルセクションで確認することができます。 詳細はこちら

期待されるレスポンス

以下はverifyPurchase APIからのレスポンスのサンプルです。

{
    "success": true,
    "code": 0,
    "codeMsg": "success",
    "data": {
      "purchaseTimeMillis": "1630529397125", // このフィールドは廃止されました。代わりに
      "purchaseTime": "1630529397125",
      "purchaseState": 0,
      "consumptionState": 0,
      "developerPayload": "<developer_payload>",
      "orderId": "<orderId_here>",
      "kind": "nowgg#productPurchase",
      "regionCode": "US",
      "currency": "USD",
      "packageName": "<package_name>",
      "payStatusTxt": "Paid",
      "orderAmount": "25.15",
      "isTestOrder": false,
      "payTimeTxt": "2024 - 10 - 3006: 08: 01",
      "sellerGoodsId": "11223343"
    }
 }

レスポンスパラメータ

パラメータ タイプ 説明
success boolean 成功の場合はtrue、失敗の場合はfalseを返します。
code int 成功の場合は0、失敗の場合は0以外を返します。
codeMsg string エラーコードに関連するメッセージを返します。 (こちらで提供)
purchaseTimeMillis (廃止) string エポック時間からのミリ秒単位で、製品が購入された時間を返します。このフィールドは廃止されました。代わりに purchaseTime を使用してください。
purchaseTime string 製品が購入された時間(エポックからの秒数)。
purchaseState int 注文の購入状態を返します。可能な値は次の通りです:
0: 未払い, 1: 支払済み, 2: 失敗
consumptionState int アプリ内製品の消費状態を返します。可能な値は次の通りです:
0: 未消費, 1: 消費済み
developerPayload string 注文に関する補足情報を含む開発者指定の文字列です。
orderId string 各アプリ内購入製品に関連付けられている注文ID(ユニークな取引識別子)です。
kind string ハードコーディングされたnowgg#productPurchaseというタイプで購入されたアプリ内製品の種類です。
regionCode string 製品が付与された時点でのユーザーのISO 3166-1 alpha-2請求地域コードです。
currency string 購入の通貨。例:USD、INRなど
packageName string アプリに関連付けられたpackageName
payStatusTxt string 決済状況(「決済済み」または「未決済」)
orderAmount string 自身の購入のorderAmount
isTestOrder boolean テスト中にオーダーが生成された場合、結果をtrueまたはfalseで返します。
payTimeTxt string 購入に関連付けられた決済日時
sellerGoodsId string 購入したプロダクトに関連付けられているプロダクトID


2. 消費購入

購入を確認したら消費済みとして処理してください。

消費購入には以下が含まれます。:

  • 購入した製品をユーザに割り当てます。
  • 商品が消費されたことをnow.ggに通知します。

消費購入コードのサンプル

以下のサンプルコードはconsumePurchase API を使用した関連リクエストの例です。

import requests

  url = "https://payments-api.now.ggn/v2/order/consumePurchase"

  payload = 'purchaseToken=nowgg-_purchase_token'
  headers = {
    'Authorization': 'payment_api_key_here',
    'Content-Type': 'application/x-www-form-urlencoded'
  }

  response = requests.request("POST", url, headers=headers, data=payload)

  print(response.text)

重要な情報

  • PurchaseToken – URLハンドラから受け取ったpurchaseTokenを使用します。
  • API KeyPayments API Key はnowStudioのクレデンシャルセクションで確認することができます。 詳細はこちら

期待されるレスポンス

以下はconsumePurchase APIからのレスポンスのサンプルです。

 }  
   "success": true,
   "code": 0,
   "codeMsg": "success",
   "data": {}
 }

レスポンスパラメータ

パラメータ 説明
success boolean 処理結果をtrueまたはfalseで返します。
code int 成功した場合は 0、失敗した場合は 0 以外のコードを返します。
codeMsg string エラーコードに関連するメッセージを返します。 (ここを参照)
data object デコードされたデータがレスポンスとして返されます。

エラーコードマッピング

エラーコード メッセージ 説明
3800 ERROR_CONSUMING_PRODUCT 製品の消費処理中にエラーが発生しました。
3900 INVALID_AUTHORIZATION_KEY 認証のために渡されたAPI Keyが無効です。
3901 INVALID_PURCHASE_TOKEN 渡された購入トークンが無効です。

シーケンス図

×
テキストがクリップボードにコピーされました。
copyLinkText
ご不明な点がございましたら、お気軽にお問い合わせください。 dev-support@now.gg