プレゼンテーションアップロードの仕様
Orbitvu Stationは、以下に説明する仕様に基づき、オンラインストアとアプリケーションの間で通信を行います。 当仕様に基づき、お客様独自のショッププラットフォームに、同様のメカニズムを実装することができます。
Orbitvu Stationは、以下に説明する仕様に基づき、オンラインストアとアプリケーションの間で通信を行います。 当仕様に基づき、お客様独自のショッププラットフォームに、同様のメカニズムを実装することができます。
.webp?dpl=dpl_8heLVZUwV7MVCJe9Dx63EpjbJ7e8)
ステップ1では、HTTPサーバーで任意の“cookie”を設定する必要があります(Orbitvu Stationは、指定されたURLの下に “Set-Cookie”ヘッダーが存在するかどうかを確認しますが、Cookieの名前は関係ありません)。そしてレスポンスを下記の様式でxml形式でOrbitvuStationに送信します。
<ovs_response> <code>0</code> <message>Authorization succeeded!</message> <data>https://your_remote_upload_url?ov_action=upload</data> </ovs_response>
ステップ2では、Orbitvu StationはPOSTリクエストを次のアドレスに送信します:https://your_remote_upload_url?ov_action=upload またこのリクエストには ZIP圧縮(“.ovus”)された Orbitvuプレゼンテーションを加えます。そしてHTTPサーバーからステータスメッセージを含むレスポンスをxml形式でOrbitvuStationに送信します。
実装のサンプル
index.php file:
if (isset($_GET['ov_action']) && $_GET['ov_action'] == 'upload') {
$archiveName = 'orbitvu_presentations'.DIRECTORY_SEPARATOR. $_FILES['path']['name'];
$xml = new SimpleXMLElement('<ovs_response/>');
if (copy($_FILES['path']['tmp_name'], $archiveName)) {
$xml->addChild('code', 0);
$xml->addChild('message', 'Upload succeed!');
} else {
$xml->addChild('code', 4);
$xml->addChild('message', 'Upload failed!');
}
header('Content-Type: text/xml; charset=utf-8');
print $xml->asXML();
exit();
} else {
setcookie('random_cookie', 'random_cookie_value', time() + 3600 * 3);
$xml = new SimpleXMLElement('<ovs_response/>');
$xml->addChild('code', 0);
$xml->addChild('message', 'Authorization succeeded!');
$xml->addChild('data', 'https://your_remote_upload_url?ov_action=upload');
header('Content-Type: text/xml; charset=utf-8');
print $xml->asXML();
exit();
}上記のサンプルでは、Orbitvuプレゼンテーションは “orbitvu_presentations" フォルダーに保存されます。 アップロードが成功したら、PHPクラス "ZipArchive" を使用してOrbitvuプレゼンテーションを解凍する必要があります(サンプルには示されていません)。 プレゼンテーションを解凍すると、当フォルダーにプレゼンテーションのSKUを含む content2.xml ファイルが配置されます。
認証を伴う実装のサンプル
index.php file:
define("OV_KEY", 'my_secret_key'); //secret key
if (!isset($_GET['ov_key']) || (OV_KEY !== $_GET['ov_key'])) {
return xmlResponse(4, "Authorization URL is not complete, not valid or expired.");
}
if (!isSessionStarted()) {
session_start();
}
if (isset($_GET['ov_action']) && $_GET['ov_action'] == 'upload') {
if (!isset($_SESSION['ov_token']) || !isset($_GET['ov_token'])
|| ($_SESSION['ov_token'] != $_GET['ov_token'])) {
return xmlResponse(4, 'Authorization failed!');
}
$archiveName = 'orbitvu_presentations'.DIRECTORY_SEPARATOR. $_FILES['path']['name'];
$xml = new SimpleXMLElement('<ovs_response/>');
if (copy($_FILES['path']['tmp_name'], $archiveName)) {
setcookie('random_cookie', '', time() - 3600); //destroy cookie
unset($_SESSION['ov_token']); //destroy ov_token
return xmlResponse(0, 'Upload succeed!');
} else {
return xmlResponse(4, 'Upload failed!');
}
} else {
//generate token
$token = md5(md5(date('Y-m-d H:i:s') . ' ' . mt_rand(1000, 10000)));
$_SESSION['ov_token'] = $token;
//set cookie for Orbitvu Station
setcookie('random_cookie', 'random_cookie_value', time() + 3600 * 3);
$uploadUrl = 'https://your_remote_upload_url?ov_action=upload&ov_key='.$_GET['ov_key'].'&ov_token='.$token;
return xmlResponse(0, 'Authorization succeeded!', $uploadUrl);
}
/**
* Returns xml response
*
* @param int $code
* @param string $message
* @param string $additionalData
*/
function xmlResponse($code, $message, $additionalData = '') {
$xml = new SimpleXMLElement('<ovs_response/>');
$xml->addChild('code', $code);
$xml->addChild('message', $message);
if ($additionalData !== '') {
$xml->addChild('data', str_replace('&', '&', $additionalData));
}
header('Content-Type: text/xml; charset=utf-8');
print $xml->asXML();
exit();
}
/**
* Checks if session is started
* @return bool
*/
function isSessionStarted() {
if (php_sapi_name() !== 'cli') {
if (version_compare(phpversion(), '5.4.0', '>=')) {
return session_status() === PHP_SESSION_ACTIVE ? true : false;
}
return session_id() === '' ? false : true;
}
return false;
}- リモートアップロード url : https://your_remote_upload_url?ov_key=my_secret_key
- サーバー側で、
$ _GET [‘ov_key’]がサーバーで定義された定数"ov_key"と同じであるかどうかをチェックします。 - 同じであれば、サーバー側で一意のトークンを生成し、それをグローバル変数
$_SESSION[‘ov_token’]に保存します。そしてアップロード先URLを含めた形での下記のようなレスポンスをOrbitvu Stationに送信します。 https://your_remote_upload_url?ov_key=my_secret_key&ov_token=generated_token&ov_action=upload - Orbitvu StationはそのURLを基にサーバーに別のリクエストを送信します。 https://your_remote_upload_url?ov_key=my_secret_key&ov_token=generated_token&ov_action=upload
- サーバー側で、
$_GET[‘ov_key’]が適切でかつ$_GET[‘ov_token’]が$_SESSION[‘ov_token’と同じであるかどうかをチェックします。 - キーとトークンが有効な場合、プレゼンテーションをアップロードして
$_SESSION[‘token’]を破棄することを許可します。 最後にOrbitvu Stationにレスポンスを返します。