SurveyGateアンケートへのアクセス
本セクションでは、Quick Startの「Step2:SurveyGateアンケートへのアクセス」で説明した「SurveyGateウェブページへアクセスする方法」と「アンケート一覧を取得する方法」について、詳細仕様を記載します。
■ SurveyGateウェブページへアクセスする方法
リクエストURL
【本番環境】
https://surveygate.jp/connect?mid={mid}&mmid={mmid}&hash={hash}
【検証環境】
https://stg.surveygate.jp/connect?mid={mid}&mmid={mmid}&hash={hash}
パラメータ仕様
| パラメータ名 | 論理名 | データ型 | 必須 | 説明 |
|---|---|---|---|---|
| mid | メディアID | 文字列 | ○ | メディアを識別するID(SurveyGate側から事前に通知される値) |
| mmid | メディアモニターID | 文字列 | ○ | モニターを一意に判別するID |
| hash | ハッシュ | 文字列 | ○ | 認証用ハッシュ値(hash計算仕様に従う) |
サンプルコード
サンプルコード(Node.js):
const crypto = require("crypto");
/** 秘密鍵を含むため、必ずサーバーサイドで実行すること。 */
function buildUrl(domain, mid, mmid, hashSecret) {
const canonicalString = `${hashSecret}${mid}${mmid}`;
const hash = crypto
.createHash("sha256")
.update(canonicalString)
.digest("hex");
const params = new URLSearchParams({
mid: mid,
mmid: mmid,
hash: hash,
});
return `https://${domain}/connect?${params.toString()}`;
}
const domain = "surveygate.jp";
const mid = "panelA";
const mmid = "monitor0000000001";
const hashSecret = "your-secret-key";
const url = buildUrl(domain, mid, mmid, hashSecret);
console.log(url);
サンプルコード(PHP):
<?php
/** 秘密鍵を含むため、必ずサーバーサイドで実行すること。 */
function buildUrl($domain, $mid, $mmid, $hashSecret) {
$canonicalString = $hashSecret . $mid . $mmid;
$hash = hash('sha256', $canonicalString);
$queryParams = [
'mid' => $mid,
'mmid' => $mmid,
'hash' => $hash
];
$queryString = http_build_query($queryParams);
return "https://{$domain}/connect?{$queryString}";
}
$domain = 'surveygate.jp';
$mid = 'panelA';
$mmid = 'monitor0000000001';
$hashSecret = 'your-secret-key';
$url = buildUrl($domain, $mid, $mmid, $hashSecret);
echo $url;
?>
エラー時の対応
モニターが生成されたURLにアクセスした際、URLの設定やhash計算に誤りがあると、400系や401系のエラーが返される場合があります。
その場合は、mid / mmid / hash の各パラメータが正しく設定されているか、hash計算仕様(署名対象文字列の形式、アルゴリズム、出力形式)が正しいかをご確認ください。
エラーが継続して発生する場合は、SurveyGate側のサポートにお問い合わせください。
■ アンケート一覧を取得する方法
メディアはAPI(POST /api/v2/enquetes)を呼び出し、レスポンスのアンケート一覧(data.enquetes)を利用して一覧を表示する方法です。
メディア側でアンケート一覧を表示し、モニターが「回答する」等のリンクをクリックすることでアンケート画面へ遷移します
リクエスト
基本情報:
URL
【本番環境】
https://surveygate.jp/api/v2/enquetes
【検証環境】
https://stg.surveygate.jp/api/v2/enquetes
| 項目 | 内容 |
|---|---|
| メソッド | POST |
| エンドポイント | /api/v2/enquetes |
リクエストヘッダー:
| ヘッダー名 | 必須 | 例 |
|---|---|---|
| Content-Type | ○ | application/json |
リクエストボディ:
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
| mid | 文字列 | ○ | メディアID(パネルID) |
| mmid | 文字列 | ○ | モニターID(メディア側で一意) |
| hash | 文字列 | ○ | 認証用ハッシュ(hash計算仕様に従う) |
リクエスト例:
{
"mid": "panelA",
"mmid": "monitor0000000001",
"hash": "(hash計算仕様に従って生成した値)"
}
レスポンス
APIのレスポンスに含まれる data.enquetes の各要素の項目は以下のとおりです。
| 項目 | 型 | 説明 |
|---|---|---|
| enquete_id | 文字列 | アンケートID |
| enquete_name | 文字列 | アンケート名 |
| enquete_research_type | 数値 | 調査種別(1:WEB、2:リクルート、3:誘導、4:海外、5:日記、6:広告、7:お知らせ、90:CM属性取得) |
| min_monitor_point | 数値 | 最小ポイント(1stは単一値のため min=max) |
| max_monitor_point | 数値 | 最大ポイント(全パート回答時の合計) |
| min_estimated_time | 数値 | 最小所要時間(分) |
| max_estimated_time | 数値 | 最大所要時間(分) |
| is_delay | boolean | 後日付与フラグ(後日付与の場合 true) |
| point_grant_type | 数値 | ポイント付与区分(1: 自動付与, 2: 手動・後日付与) |
| status | 数値 | 回答ステータス(0: 未回答, 1: 回答済み) |
| delivered_at | 日時/null | 配信日時。1stアンケートの場合は null |
| enquete_start_url | 文字列 | 開始URL。メディアは「回答する」の href 等に設定する。 形式: https://surveygate.jp/api/v2/enquetes/start?e={暗号化パラメータ}&d={暗号化パラメータ} |
サンプルコード
サンプルコード(Node.js):
const crypto = require("crypto");
/** 秘密鍵を含むため、必ずサーバーサイドで実行すること。 */
function buildRequestBody(mid, mmid, hashSecret) {
const canonicalString = `${hashSecret}${mid}${mmid}`;
const hash = crypto
.createHash("sha256")
.update(canonicalString)
.digest("hex");
return { mid, mmid, hash };
}
// APIを1回呼び出す。レスポンスに data.enquetes が含まれる。
const mid = "panelA";
const mmid = "monitor0000000001";
const hashSecret = "your-secret-key";
const body = buildRequestBody(mid, mmid, hashSecret);
const res = await fetch("https://surveygate.jp/api/v2/enquetes", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body),
});
const json = await res.json();
// json.data.enquetes[].enquete_start_url を「回答する」の href に設定する。
サンプルコード(PHP):
<?php
/** 秘密鍵を含むため、必ずサーバーサイドで実行すること。 */
function buildRequestBody($mid, $mmid, $hashSecret) {
$canonicalString = $hashSecret . $mid . $mmid;
$hash = hash('sha256', $canonicalString);
return ['mid' => $mid, 'mmid' => $mmid, 'hash' => $hash];
}
$mid = 'panelA';
$mmid = 'monitor0000000001';
$hashSecret = 'your-secret-key';
$body = buildRequestBody($mid, $mmid, $hashSecret);
// APIを1回呼び出す。レスポンスに data.enquetes が含まれる。
$context = stream_context_create([
'http' => [
'method' => 'POST',
'header' => 'Content-Type: application/json',
'content' => json_encode($body)
]
]);
$res = @file_get_contents('https://surveygate.jp/api/v2/enquetes', false, $context);
$json = json_decode($res, true);
// $json['data']['enquetes'][*]['enquete_start_url'] を「回答する」の href に設定する。
?>
■ hash計算仕様
使用する値:
hash_secret: ハッシュシークレット(SurveyGate側から事前に通知される固有キー。URL生成時に使用)mid: メディアID(パラメータ仕様参照)mmid: メディアモニターID(パラメータ仕様参照)
アルゴリズム: SHA-256
文字コード: UTF-8
出力形式:
- 16進数(hex)
- 小文字(必須)
注意事項:
- 出力は16進数(hex)形式で、0-9とa-fの文字で表現されます
- 小文字での出力が必須です(SurveyGate側の検証処理は大文字小文字を区別するため、大文字で出力するとエラーになります)
計算手順:
hash_secret、mid、mmidを連結して署名対象文字列を作成
{hash_secret}{mid}{mmid}
- SHA-256(単純ハッシュ)でハッシュ化
- 16進数(小文字)で出力(必須)
注意事項:
mmidはメディア内で一意のIDを使用してくださいmmidに個人情報(メールアドレス等)を直接含めないでください- すべてのパラメータは必須です
サンプルコード
サンプルコード(Node.js):
const crypto = require("crypto");
function calculateHash(hashSecret, mid, mmid) {
const canonicalString = `${hashSecret}${mid}${mmid}`;
return crypto.createHash("sha256").update(canonicalString).digest("hex");
}
サンプルコード(PHP):
function calculateHash($hashSecret, $mid, $mmid) {
$canonicalString = $hashSecret . $mid . $mmid;
return hash('sha256', $canonicalString);
}
よくあるエラー原因:
- SHA-256以外のアルゴリズムを使用している
- hex出力が大文字になっている
- UTF-8以外の文字コードで計算している
エラー発生時は、上記をご確認ください。