Skip to main content

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側のサポートにお問い合わせください。

■ アンケート一覧を取得する方法

メディアはAPIPOST /api/v2/enquetes)を呼び出し、レスポンスのアンケート一覧(data.enquetes)を利用して一覧を表示する方法です。
メディア側でアンケート一覧を表示し、モニターが「回答する」等のリンクをクリックすることでアンケート画面へ遷移します

リクエスト

基本情報:

URL

【本番環境】
https://surveygate.jp/api/v2/enquetes

【検証環境】
https://stg.surveygate.jp/api/v2/enquetes

項目内容
メソッドPOST
エンドポイント/api/v2/enquetes

リクエストヘッダー:

ヘッダー名必須
Content-Typeapplication/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_delayboolean後日付与フラグ(後日付与の場合 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側の検証処理は大文字小文字を区別するため、大文字で出力するとエラーになります)

計算手順:

  1. hash_secretmidmmidを連結して署名対象文字列を作成
{hash_secret}{mid}{mmid}
  1. SHA-256(単純ハッシュ)でハッシュ化
  2. 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以外の文字コードで計算している

エラー発生時は、上記をご確認ください。