Orbitvu Public Support Site

プレゼンテーションアップロードの仕様

Updated on

Orbitvu Stationは、以下に説明する仕様に基づき、オンラインストアとアプリケーションの間で通信を行います。 当仕様に基づき、お客様独自のショッププラットフォームに、同様のメカニズムを実装することができます。

ステップ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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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('&', '&amp;', $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;
}
  1. リモートアップロード url : https://your_remote_upload_url?ov_key=my_secret_key
  2. サーバー側で、$ _GET [‘ov_key’]がサーバーで定義された定数"ov_key"と同じであるかどうかをチェックします。
  3. 同じであれば、サーバー側で一意のトークンを生成し、それをグローバル変数 $_SESSION[‘ov_token’] に保存します。そしてアップロード先URLを含めた形での下記のようなレスポンスをOrbitvu Stationに送信します。
    https://your_remote_upload_url?ov_key=my_secret_key&ov_token=generated_token&ov_action=upload
  4.  Orbitvu StationはそのURLを基にサーバーに別のリクエストを送信します。
    https://your_remote_upload_url?ov_key=my_secret_key&ov_token=generated_token&ov_action=upload
  5.  サーバー側で、$_GET[‘ov_key’]が適切でかつ$_GET[‘ov_token’]$_SESSION[‘ov_token’と同じであるかどうかをチェックします。
  6. キーとトークンが有効な場合、プレゼンテーションをアップロードして$_SESSION[‘token’]を破棄することを許可します。 最後にOrbitvu Stationにレスポンスを返します。
Previous Article Shopify マイグレーション
Next Article 概要
Still Need Help? Contact Us