# サーバー間のコールバックイベントハンドラー

> ironsourceサーバー間コミッション イベント コールバックを実装して認証し、提供されたパラメーターとPHPまたはJavaのサンプル コードを使用して、広告オファーの完了に対してユーザーに安全な報酬を付与します。

コミッション イベントは、ユーザーが広告オファーを完了した後に発生します。

* Rewarded Video と Offerwall の場合、これはユーザーにゲームゲーム内通貨またはアイテムの報酬を与える必要があることを意味します。Ironsource は、報酬に関する詳細とともに手数料イベントコールバック (アプリケーション設定の コールバック URL パラメーターで定義) を呼び出します。
* リワード型動画とオファーウォールの場合は、コードが正しいユーザーに正しい金額を授与するように、コミッションイベントコールコールバックを実装する必要があります。インタースティシャルの場合、イベントはユーザーがオファーを完了したことを示すのみ通知します(報酬は含まれません)。

以下のセクションでは、コミッションイベントコールバックの構文について説明し、コードサンプルを提供し、イベントコールバックを認証、管理、テストする方法について説明します。

* リワード動画では、サーバー側のコミッションイベントコールバックが呼び出されることに加えて、ユーザーが広告オファーを完了したときに（iOS の場合は RewardedVideoDidReceiveCredit、Android の場合は onRVAdCredited を参照）、クライアント側のイベントも送信されます。
* OfferWall の場合、クライアント側イベントの ssaOfferWallDidReceiveCredit （iOS の場合）または onOWAdCredited （Android の場合）が呼び出されます。推奨されるベストプラクティスは、サーバー側のイベントを使用してユーザー報酬をトリガーすることです。これは、コールバックバックの信頼性を検証できるためです。`ssaRewardedVideoDidReceiveCredit`(iOS)または`onRVAdCredited`(Android)を処理するときは、同じイベントでユーザーに2回報酬を与えないようにしてください。

> **Note:**
>
> アプリケーションのバック終了データサーバーを操作しておらず、クライアント側のイベントのみに依存する場合は、サーバー間のコールバックシステムを無効にできます。

## Commissionイベント コールバック##commission-event-callbacks

コミッションイベントコールバックは、ユーザーが広告オファーを完了し、クレジットまたは仮想アイテムの報酬を受け取る必要があるときに呼び出されます。このイベントをハンドルするコードを実装する必要があります。

### パラメーター##parameters

| **名前**     | **型**  | **説明**                                                                                                                                                                                                                                            |
| ---------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| USER\_ID   | String | 報酬を受け取るユーザーの一意の識別子。ironsource 製品の初期化時に、呼び出し元アプリケーションによって送信されます。URL エンコードされた形式が渡されます(例えば、"123%40abc.com" ではなく "[123@abc.com](mailto:123@abc.com)")。                                                                                                |
| ゲーム内報酬     | Int    | ユーザーに付与するクレジットユニットの数。                                                                                                                                                                                                                             |
| EVENT\_ID  | String | Ironsource サーバーによって生成された、英数字で構成されるコールバックイベントの一意のの識別子                                                                                                                                                                                              |
| ITEM\_NAME | String | 付与する仮想項目の名前（仮想項目オプションが使用されている場合）。                                                                                                                                                                                                                 |
| タイムスタンプ    | String | このコールバックバックが呼び出された正確な日時を以下の形式で表した文字列列。YYYYMMDDHHMM (例えば:"201001021455" は 2010 年 1 月 2 日 14:55 を意味します。                                                                                                                                             |
| 署名         | String | 認証に使用される MD5 ハッシュ文字列。このキーは、md5(\[TIMESTAMP]\[EVENT\_ID]\[USER\_ID] \[REWARDS]\[PRIVATE\_KEY]) の式に基づいて生成されます。［ユーザー ID］ 要素は、userID の URL デコード値です(例えば、"[123@abc.com](mailto:123@abc.com)" ではなく "123%40abc.com")。\[PRIVATE\_KEY]キー 要素は、秘密鍵設定で定義した値です。 |

### レスポンス##response

アプリケーションは、200（OK）の状態の HTTP 反応を送信することで、Commission イベントの受信を確認する必要があります。この反応の任意の場所に`"\[EVENT\_ID\]:OK"`文字列が表示されます。

```text
<xml>
<status>dae8e6cf42b1357f8652ad6ecb5b24f1:OK</status>
</xml>
```

> **Note:**
>
> ironsource がコールバックの再試行を送信し続けないように、正しい構文で反応を送信することが重要です。

## サンプル手数料イベントコールバックコード - PHP##sample-commission-event-callback-code---php

以下の PHP コードサンプルは、一般的なコミッションイベントコールバックハンドラーを示しています。コードのコピー後に行う必要があるのは、`**alreadyProcessed()**\` 関数と `**doProcessEvent()**` 関数を実装し、`**\[YOUR\_PRIVATE\_KEY\]**`文字列を正しい値に設定するだけです。

```php
// get the variables
$userId = $_GET['applicationUserId'];
$eventId = $_GET['eventId'];
$rewards = $_GET['rewards'];
$signature = $_GET['signature'];
$timestamp = $_GET['timestamp'];
$privateKey = ‘[YOUR_PRIVATE_KEY]';
// validate the call using the signature
if (md5($timestamp.$eventId.$userId.$rewards.$privateKey) != $signature)
{
   echo "Signature doesn't match parameters"; （署名がパラメータと一致しません）
   return;
}
// check that we haven't processed the same event before
if (!alreadyProcessed($eventId)){
   // grant the rewards
   doProcessEvent($eventId, $userId, $rewards);
}
// return ok
echo $eventId.":OK";
```

## サンプル手数料イベントコールバックコード - Java##sample-commission-event-callback-code---java

以下の Java コードサンプルは、一般的なコミッションイベントコールバックハンドラーを示しています。コードのコピー後に行う必要があるのは、`**getPostParameter()**` メソッドと `**alreadyProcessed()**\` メソッドを実装し、`**\[myPrivateKey\]**`文字列を正しい値に設定するだけです。

```java
import java.security.*;
import java.math.BigInteger;
public class HelloWorld {
     public static void main(String []args) {
        
        validateSuperSonicCallback();
     }
     
    public static String getPostParameter(String param){
         // TODO : your app implementaion for get post parmas
        return "";
     }
	 
	  public static boolean alreadyProcessed(String eventId){
         // TODO 
        return true;
     }
     public static boolean validateSuperSonicCallback() {
         
         String applicationUserId = getPostParameter("applicationUserId");
         String eventId = getPostParameter("eventId");
         String signature = getPostParameter("signature");
         String userId = getPostParameter("userId");
         String rewards = getPostParameter("rewards");
         String timestamp = getPostParameter("timestamp");
         String privateKey = "myPrivateKey" ;// enter your private key
         String mySignature = "";
        try {
            String message = timestamp + eventId + userId + rewards +privateKey;
            MessageDigest md = MessageDigest.getInstance("MD5"); 
            md.update(message.getBytes());
            BigInteger hash = new BigInteger(1, md.digest());
            String result = hash.toString(16);
            while(result.length() < 32) {
                result = "0" + result;
            }
                        System.out.println(結果); // 文字列のディスプレイ
        } catch (NoSuchAlgorithmException e){
        }
        if (mySignature!=signature){
	     return false;
	}else{
	     return !alreadyProcessed(eventId);
    }
     
  }
}
```

## コミッションイベントコールバックの認証##authenticating-the-commission-event-callback

不正アクセスからコードを保護するために推奨されるベストプラクティスは、コミッションイベントのコールバック署名とソースをテストして、呼び出しがIronsourceによって行われたことを確認することです。

コミッションイベントコールバックを認証するには、以下のアクションを実行します。

1. `md5(\[TIMESTAMP\]\[EVENT\_ID\]\[USER\_ID\] \[REWARDS\]\[PRIVATE\_KEY\])` の式に従って、呼び出しのパラメーターから MD5 ハッシュ値を生成し、結果が署名パラメーター値と同じであることを確認します。
2. 呼び出しが以下の IP アドレスのいずれかから発信されていることを確認します。
   * 79.125.5.179
   * 79.125.26.193
   * 79.125.117.130
   * 176.34.224.39
   * 176.34.224.41
   * 176.34.224.49
   * 34.194.180.125
   * 34.196.56.165
   * 34.196.251.81
   * 34.196.253.23
   * 54.88.253.218
   * 54.209.185.78
