Orbitvu Public Support Site

Specyfikacja wrzucania prezentacji

Updated on

Orbitvu Station komunikuje się ze sklepem oraz aplikacją na podstawie specyfikacji wypisanych poniżej. Na podstawie ustawień możesz wprowadzić podobny mechanizm dla twojej platformy sklepu.

W kroku 1 należy ustawić jakiekolwiek ciasteczko na serverze HTTP (Orbitvu Station sprawdza czy pod specyficznym URL nagłówek “Set-Cookie” istnieje, dlatego nazwa ciasteczka nie ma znaczenia). Następnie wysyłamy odpowiedź do Orbitvu Station w formacie XML:

<ovs_response>
    <code>0</code>
    <message>Authorization succeeded!</message>
    <data>https://your_remote_upload_url?ov_action=upload</data>
</ovs_response>

W kroku 2, Orbitvu Station wysyła POST request na adres: https://your_remote_upload_url?ov_action=upload zapakowanym plikiem zawierającym prezentacje Orbitvu (“.ovus”). Następnie wysyłamy odpowiedź do Orbitvu station w formacie XML z status message.

Przykładowe wprowadzenie

Plik index.php:

 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();
}

Powyższy przykład przedstawia prezentacje Orbitvu zapisywanę w folderze “orbitvu_presentations”. Po ukończonym wrzucaniu należy odpakować prezentacje Orbitvu przy pomocy PHP class “ZipArchive” - nie jest to uwzględnione w przykładzie. Po rozpakowaniu prezentacji, folder będzie zawierał plik content2.xml, w którym będzie widoczne SKU prezentacji.

Przykładowe wprowadzenie z autoryzacją

Plik index.php:

 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 zdalnego wgrywania to: https://your_remote_upload_url?ov_key=my_secret_key
  2. Ze strony servera sprawdzamy czy $_GET[‘ov_key’] jest taki sam jak stały “ov_key” zdefiniowany na serwerze.
  3. Jeśli tak, tworzymy unikatowy token na serwerze i zapisujemy go na globalnej zmiennej $_SESSION[‘ov_token’]. Wysyłamy odpowiedź do Orbitvu Station z URL:
    https://your_remote_upload_url?ov_key=my_secret_key&ov_token=generated_token&ov_action=upload
  4. Orbitvu Station wysyła następne żądanie na serwer:
    https://your_remote_upload_url?ov_key=my_secret_key&ov_token=generated_token&ov_action=upload
  5. Ze strony serwera sprawdzamy $_GET[‘ov_key’] jest poprawny i czy $_GET[‘ov_token’] jest takie samo jak $_SESSION[‘ov_token’ .
  6. Jeśli klucz i tokenpoprawne, zezwalamy na wgranie prezentacji i niszczymy $_SESSION[‘token’]. Po wszystkim wysyłamy odpowiedź do Orbitvu Station.
Previous Article Sklep demo w czasie rzeczywistym
Still Need Help? Contact Us