EC-CUBEで各端末の識別IDを取得する方法

EC-CUBEで各端末の識別IDを取得する方法

eccube

EC-CUBEでは携帯端末の場合端末IDを取得する仕組みがあります。
ところがこの昨日が古すぎてドコモは取れたり取れなかったり、SoftBankは端末シリアル番号のみ取得しています。

というわけで目標は全機種簡単に固体識別番号を取れるようにすることです。
個体識別番号とはケータイの端末ID・ユーザIDの取得についてまとめてみました | ke-tai.org

1.PEAR Net_UserAgent_Mobileを最新バージョンにする

最新版をダウンロードしてきて設置してもそのままでは動きません((EC-CUBEのものすごくいけてない部分だと思う・・))

のでここはナイトリービルド版の中身を移植します。((もしくは差分をみて、最新版を使ってください))

EC-CUBE‐EC-CUBEダウンロード

ナイトリービルド版をダウンロードして解凍したら

data/module/Net/の下にある、UserAgentディレクトリを丸ごとコピーして、自分のEC-CUBEの同じ階層にあるものを上書きしてください。

2.SC_MobileUserAgentを修正する

data/class/SC_MobileUserAgent 70行目付近
~~~
isDoCoMo() || $objAgent->isVodafone()) {
$id = $objAgent->getSerialNumber();
} elseif ($objAgent->isEZweb()) {
$id = @$_SERVER[‘HTTP_X_UP_SUBNO’];
}
return isset($id) ? $id : false;
}
~~~

~~~
isDoCoMo() || $objAgent->isEZweb()) {
$id = $objAgent->getUID();
} elseif ($objAgent->isVodafone()) {
$id = ($objAgent->getUID()) ? $objAgent->getUID() : $objAgent->getSerialNumber();
}

return isset($id) ? $id : false;
}
~~~

こんな風にします。
詳しい理由はケータイの端末ID・ユーザIDの取得についてまとめてみました(サンプルプログラム編) | ke-tai.org

3.SC_Helper_Mobileを修正

data/class/helper/SC_Helper_Mobile 233行目付近
~~~
4.SC_SessionFactory_UseRequestを修正

214行目に追記
~~~
getSessionId();

if (!$sessionId) {
session_start();
}

// セッションIDまたはセッションデータが無効な場合は、セッションIDを再生成
// し、セッションデータを初期化する。
if ($sessionId === false || !$this->validateSession()) {
session_regenerate_id(true);
// セッションデータの初期化
$this->state->inisializeSessionData();

// 新しいセッションIDを付加してリダイレクトする。
if ($_SERVER[‘REQUEST_METHOD’] == ‘GET’) {
// GET の場合は同じページにリダイレクトする。
$objMobile = new SC_Helper_Mobile_Ex;
header(‘Location: ‘ . $objMobile->gfAddSessionId());
} else {
// GET 以外の場合はトップページへリダイレクトする。
if (defined(‘MOBILE_SITE’)) {
header(‘Location: ‘ . MOBILE_URL_SITE_TOP . ‘?’ . SID);

} else {
header(‘Location: ‘ . URL_SITE_TOP . ‘?’ . SID);
}
}
exit;
}

// 有効期限を更新する.
$this->state->updateExpire();

// ドコモが最初のアクセスでうまく取れないので
if (!$this->state->getPhoneId() && SC_MobileUserAgent::getId()) {
$this->state->updatePhoneId();
}
}
~~~

最初のアクセスだとdocomoだけ取れないので苦肉の策です、、どこかのリンク、formを使うと記録されます。

これだけがんばると、sessionに個体識別番号を持つようになるのであとは自由に使ってください、ログの書き出しなんかに使うと便利かもっ