Příklady implementace WebSale a datových exportů
Pokud si nejste jistí, že máte vše potřebné, kontaktujte technickou podporu Perfect System.
Při vývoji rezervačních stránek, ať už z důvodu použití nových technologií či pouhé optimalizace
rezervačního sytému, může čas od času dojít ke změně URL adres (snažíme se tomu vyhnout,
ale někdy není jiná cesta). Nabízíme Vám možnost, jak naimplementovat jednotlivé URL adresy tak,
abyste při případné změně nemuseli zasahovat do webových stránek Vaší organizace.
Na rezervační stránky jsme umístili XML dokument, jehož volání zůstane vždy zachované a bude obsahovat
jednotlivé URL adresy pro stávající verzi rezervačních stránek.
Jedná se také o nejjednodušší způsob, jak zákazníkovi zprostředkovat informace o stavu košíku, popřípadě zobrazit a
zpracovat informace o přihlášeném zákazníkovi.
XML dokument se volá tímto odkazem:
http://<websaleurl>/globalinfo?mrsid=<mrsid>
Ukázat
http://<websaleurl>/globalinfo?mrsid=<mrsid>&full=1
Ukázat
V případě, že chcete uskutečnit volání XML na pozadí pomocí XMLHttpRequest, je třeba mít od
technické podpory Perfect System
nastavený web.config nebo .htaccess soubor tak, aby fungoval
CORS (cross-origin HTTP request).
Poté se již jedná o standardní AJAX dotaz, který má navíc parametry:
/**
* Retrieves globalInfo from WebSale
*
* @param mrsId webSale id
* @param webSaleUrl webSale url
*/
function getData(mrsId, webSaleUrl) {
$.ajax({
cache : false,
type : "GET",
crossDomain: true,
url : webSaleUrl + "/globalinfo",
xhrFields : {withCredentials: true}, // send credentials such as cookies, certificate, etc.
data : {
mrsid: mrsId,
full : "1" // we want everything
},
dataType : "xml", // response type
success : parseData, // call function parseData on success
error : function (XMLHttpRequest, textStatus, errorThrown) { // log errors
console.log(XMLHttpRequest);
console.log(textStatus);
console.log(errorThrown);
}
});
}
/**
* Parses globalInfo xml
*
* @param xml received xml
* @param status request status
* @param xhr jqXHR object
*/
function parseData(xml, status, xhr) {
// do stuff
}
Stáhnout GlobalInfo
XML obsahuje seznam podporovaných URL odkazů, které je možné implementovat na Vaše webové stránky pro zjednodušený přístup na rezervační stránky (WebSale). Mezi těmito odkazy najdete například:
Z výše uvedených doporučujeme implementovat na Váš portál zejména odkaz na košík.
Některé odkazy jsou v XML obsaženy pouze za předpokladu,
že přihlášený zákazník je členem určitého programu (kreditní systém, věrnostní program).
Při volání s parametrem full=1 máte k dispozici aktuální stav přihlášeného zákazníka.
Informace obsahují například:
XML dále obsahuje:
Ukázka:
<?xml version="1.0" encoding="UTF-8"?>
<GlobalInfo xmlns="http://colosseum.eu/colosseum/schemas/GlobalInfo.xsd">
<urlInfo>
<logout>http://obchodnitest.colosseum.eu/obchodni-test/General/Account/Deauthorize?mrsid=72</logout>
<forgottenPassword>http://obchodnitest.colosseum.eu/obchodni-test/General/Account?mrsid=72#forgottenPassword
</forgottenPassword>
<registration>http://obchodnitest.colosseum.eu/obchodni-test/General/MyAccount/Registration?mrsid=72
</registration>
<orderList>http://obchodnitest.colosseum.eu/obchodni-test/General/MyAccount?mrsid=72</orderList>
<cart>http://obchodnitest.colosseum.eu/obchodni-test/standard/MCart/Index?mrsid=72</cart>
<creditProgram>http://obchodnitest.colosseum.eu/obchodni-test/General/MyAccount?mrsid=72</creditProgram>
</urlInfo>
<accountInfo>
<authorized>true</authorized>
<name>Zuzana Čarná</name>
<externalSessionId></externalSessionId>
<sessionValidity>2018-03-19T11:01:05</sessionValidity>
<registrationInfo>
<firstname>Zuzana</firstname>
<surname>Čarná</surname>
<phone>987456321</phone>
<mailSending>true</mailSending>
<deliveryAddress>
<street>Radlická 68</street>
<city>Praha 5</city>
<postalCode>150 00</postalCode>
<country>Česká republika</country>
</deliveryAddress>
<invoiceAddress>
<company>System Perfect</company>
<ico>123456789</ico>
<dic>987654321</dic>
<street>Radlická 68</street>
<city>Praha 5</city>
<postalCode>150 00</postalCode>
<country>Česká republika</country>
</invoiceAddress>
</registrationInfo>
<errors/>
<creditProgram>
<balance>0</balance>
<card>
<type></type>
<active>true</active>
<validity>2018-08-01</validity>
</card>
</creditProgram>
<customerCards>
<card>
<name>Kreditka</name>
<type>NONE</type>
<number>4</number>
<externalNumber>00000004</externalNumber>
<active>true</active>
<validity>2018-08-01</validity>
</card>
</customerCards>
</accountInfo>
<cartInfo>
<count>0</count>
<price>0</price>
<currency></currency>
<validity>0001-01-01T00:00:00</validity>
</cartInfo>
</GlobalInfo>
Pro lepší využití webových služeb jsme pro Vás připravili několik externích přístupů k rezervačnímu webu.
Po každém odeslání POST požadavku systém zasílá opět POST požadavkem XML na předem určenou adresu.
Zároveň dojde k přesměrování na tuto adresu.
Návratovou adresu nastaví technická podpora Perfect System (adresu Vašeho portálu, kam se bude zasílat informační XML).
Není potřeba implementovat všechny požadavky z následujících ukázek. Můžete například implementovat pouze externí
přihlášení a o zbytek se postarat pouze zveřejněním odkazů na konkrétní URL adresy,
které se dají získat pomocí GlobalInfo (viz kapitola GlobalInfo).
Pokud neplánujete implementovat vlastní fomuláře, či pokročilé statistiky a chcete svým zákazníkům pouze zprostředkovat možnost
přihlášení do Websale je nejjednodušší při každém načtení Vaší stránky provést Ajax dotaz na
GlobalInfo. Pokud zákazník není přihlášen zobrazíte pouze odkaz do detailu účtu,
ten nepřihlášeného uživatele přeměruje na přihlašovací formulář. Pokud je zákazník přihlášen,
GlobalInfo vrátí informace o zákazníkovi a další dostupné odkazy.
Jestliže si chcete vést pokročilé statistiky o chování vašich zákazníků, či implementovat vlastní formuláře (registrace, …), je třeba Websalu sdělit sessionId uživatele na
Vaší stránce. Toto id budete posílat s každým požadavkem na Websale ve formě parametru <externalsessionid>.
Po každé provedené akci Websale vrátí XML na předem určenou adresu. Toto XML obsahuje element
<externalsessionid>, čímž lze přesně určit zákazníka, ke kterému patří.
V případě, že chcete uskutečnit volání na pozadí pomocí XMLHttpRequest, je třeba mít od technické podpory Perfect System nastavený web.config nebo .htaccess soubor tak, aby fungoval CORS (cross-origin HTTP request).
Po provedení každého požadavku je na předem určenou adresu odesláno XML s výsledkem (XML se odesílá i po každé akci provedené na WebSale). Pro rozlišení požadavku (koho se zaslané XML týká) se používá parametr <externalsessionid>. Přístup k přijatému XML může vypadat takto:
//reads data posted as raw xml
$xmlRawData = file_get_contents('php://input');
Příchozí XML má podobnou strukturu jako GlobalInfo (viz kapitola GlobalInfo), obsahuje však navíc i informaci o chybách <errors>, například v případě špatně vyplněného formuláře. Níže je ukázka přijatého XML po odeslání prázdného registračního formuláře.
<?xml version="1.0" encoding="UTF-8"?>
<GlobalInfo xmlns="http://colosseum.eu/colosseum/schemas/GlobalInfo.xsd">
<urlInfo>
<logout>https://ukazka-websale.colosseum.eu/obchodni-test/myprofile/account/deauthorize?mrsid=72</logout>
<forgottenPassword>https://ukazka-websale.colosseum.eu/obchodni-test/forgottenpassword?mrsid=72</forgottenPassword>
<registration>https://ukazka-websale.colosseum.eu/obchodni-test/myprofile/account/register?mrsid=72</registration>
<orderList>https://ukazka-websale.colosseum.eu/obchodni-test/myprofile?mrsid=72</orderList>
<cart>https://ukazka-websale.colosseum.eu/obchodni-test/standard/mcart/index?mrsid=72</cart>
</urlInfo>
<accountInfo>
<authorized>false</authorized>
<name></name>
<externalSessionId>123456</externalSessionId>
<sessionValidity>2017-05-03T15:40:30</sessionValidity>
<errors>
<error>
<fieldName>Name</fieldName>
<message>Vyplňte povinný údaj</message>
</error>
<error>
<fieldName>Surname</fieldName>
<message>Vyplňte povinný údaj</message>
</error>
<error>
<fieldName>Email</fieldName>
<message>Vyplňte povinný údaj</message>
</error>
<error>
<fieldName>PhoneNumber</fieldName>
<message>Vyplňte povinný údaj</message>
</error>
<error>
<fieldName>Password</fieldName>
<message>Vyplňte povinný údaj</message>
</error>
<error>
<fieldName>Password2</fieldName>
<message>Vyplňte povinný údaj</message>
</error>
<error>
<fieldName>AddressDelivery.Street</fieldName>
<message>Vyplňte povinný údaj</message>
</error>
<error>
<fieldName>AddressDelivery.City</fieldName>
<message>Vyplňte povinný údaj</message>
</error>
<error>
<fieldName>AddressDelivery.ZipCode</fieldName>
<message>Vyplňte povinný údaj</message>
</error>
</errors>
</accountInfo>
<cartInfo>
<count>0</count>
<price>0</price>
<currency></currency>
</cartInfo>
</GlobalInfo>
Lze provést odesláním požadavku na adresu:
http://<websaleurl>/accountloginxml
Parametr | Typ | Popis |
---|---|---|
externalsessionid | Povinný | Externí identifikátor uživatele na straně odesílatele (string) |
mrsid | Povinný | Unikátní číslo prodejního webu |
login | Povinný | Login – e-mail uživatele (string 100) |
password | Povinný | Heslo (string 50) |
<form action="<websaleurl>/accountloginxml" method="post">
<input type="hidden" name="externalsessionid" value="vaše externalsessionid" />
<input type="hidden" name="mrsid" value="vaše mrsid" />
E-mail: <input type="text" name="login" value="" maxlength="100" />
Password: <input type="password" name="password" value="" maxlength="50" />
<button type="submit">Sign in</button>
</form>
Ukázka přihlášení pomocí XMLHttpRequest:
/**
* Tries to sign in user
*
* @param mrsId id of an organization
* @param webSaleUrl url
* @param login username
* @param psswd password
* @param exSession user session on this website
*/
function doLogin(mrsId, webSaleUrl, login, psswd, exSession) {
$.ajax({
cache : false,
type : "POST",
crossDomain: true,
url : webSaleUrl,
xhrFields : {withCredentials: true}, // send credentials such as cookies, certificate, etc.
data : {
mrsid : mrsId,
login : login,
password : psswd,
externalsessionid: exSession
}
});
}
Lze provést odesláním požadavku na adresu:
http://<websaleurl>/accountlogoutxml
Parametr | Typ | Popis |
---|---|---|
externalsessionid | Povinný | Externí identifikátor uživatele na straně odesílatele (string) |
mrsid | Povinný | Unikátní číslo prodejního webu |
<form action="http://<websaleurl>/accountlogoutxml" method="post">
<input type="hidden" name="externalsessionid" value="vaše externalsessionid" />
<input type="hidden" name="mrsid" value="vaše mrsid" />
<button type="submit" >Log out</button>
</form>
Externí registrace je určena nejen pro registraci nového uživatele,
ale i pro editaci údajů právě přihlášeného uživatele. Při externí registraci se vyhledá kontakt dle zadaného IČ
a pokud je nalezen, provede se editace této společnosti a založí se k ní osoba. Po úspěšné registraci zároveň dojde
k automatickému přihlášení nového uživatele a uživateli přijde e-mail o registraci.
Lze provést odesláním požadavku na adresu:
http://<websaleurl>/accountregisterxml
Parametr | Typ | Popis |
---|---|---|
externalsessionid | Povinný | Externí identifikátor uživatele na straně odesílatele (string) |
mrsid | Povinný | Unikátní číslo prodejního webu |
name | Povinný | Jméno osoby (string 50) |
surname | Povinný | Příjmení osoby (string 50) |
Povinný | E-mail – slouží zároveň jako login (string 100) | |
phonenumber | Povinný | Telefonní číslo osoby(string 50) |
password | Povinný | Heslo (string 50) |
password2 | Povinný | Znovu zadané heslo pro kontrolu (string 50) |
addressdelivery.street | Povinný | ulice kontaktu pro fakturaci (string 50 |
addressdelivery.city | Povinný | město kontaktu pro fakturaci (string 50) |
addressdelivery.zipcode | Povinný | PSČ kontaktu pro fakturaci (string 10) |
function | Nepovinný | Název funkce dané osoby (string 50) |
clientnature | Nepovinný | Poznámka ke společnosti (string 255) |
companyname | Nepovinný | Název společnosti (string 50) |
ic | Nepovinný | IČO společnosti (string 15) |
dic | Nepovinný | DIČ společnosti (string 20) |
companylegalformid | Nepovinný | Číselník právní formy společnosti ze systému Colosseum (integer) |
addrdelcountry | Nepovinný | Číselník zemí ze systému Colosseum (integer) |
<form action="http://<websaleurl>/accountregisterxml" method="post">
<input type="hidden" name="externalsessionid" value="vaše externalsessionid" />
<input type="hidden" name="mrsid" value="vaše mrsid" />
Name: <input type="text" name="name" value="" maxlength="50" />
Surname: <input type="text" name="surname" value="" maxlength="50" />
E-mail: <input type="text" name="email" value="" maxlength="100" />
Phone number: <input type="text" name="phonenumber" value="" maxlength="50" />
Password: <input type="password" name="password" value="" maxlength="50" />
Password re-entry: <input type="password" name="password2" value="" maxlength="50" />
Function: <input type="text" name="function" value="" maxlength="50" />
Client nature: <input type="text" name="clientnature" value="" maxlength="255" />
Company name: <input type="text" name="companyname" value="" maxlength="50" />
IČ: <input type="text" name="ic" value="" maxlength="15" />
DIČ: <input type="text" name="dic" value="" maxlength="20" />
Company legal form ID: <input type="text" name="companylegalformid" value="" />
Address - street: <input type="text" name="addressdelivery.street" value="" maxlength="50" />
Address - city: <input type="text" name="addressdelivery.city" value="" maxlength="50" />
Address - zipcode: <input type="text" name="addressdelivery.zipcode" value="" maxlength="50" />
Country ID: <input type="text" name="addrdelcountry" value="" />
<button type="submit">REGISTER</button>
</form>
Změna hesla je možná pouze pro aktuálně přihlášeného uživatele. Lze provést odesláním požadavku na adresu:
http://<websaleurl>/accountpasswordchangexml
Parametr | Typ | Popis |
---|---|---|
externalsessionid | Povinný | Externí identifikátor uživatele na straně odesílatele (string) |
mrsid | Povinný | Unikátní číslo prodejního webu |
oldpassword | Povinný | Aktuální heslo právě přihlášeného uživatele |
password | Povinný | Nové heslo |
password2 | Povinný | Nové heslo opsané znovu pro kontrolu |
<form action="http://<websaleurl>/accountpasswordchangexml" method="post">
<input type="hidden" name="externalsessionid" value="vaše externalsessionid" />
<input type="hidden" name="mrsid" value="vaše mrsid" />
Old password: <input type="password" name="oldpassword" value="" maxlength="50" />
New password: <input type="password" name="password" value="" maxlength="50" />
New password retype: <input type="password" name="password2" value="" maxlength="50" />
<button type="submit">Change password</button>
</form>
Uživateli přijde na jeho registrační e-mail nově vygenerované heslo. Lze provést odesláním požadavku na adresu:
http://<websaleurl>/accountforgottenpasswordxml
Parametr | Typ | Popis |
---|---|---|
externalsessionid | Povinný | Externí identifikátor uživatele na straně odesílatele (string) |
mrsid | Povinný | Unikátní číslo prodejního webu |
forgottenpasswordemail | Povinný | Registrační e-mail uživatele |
<form action="http://<websaleurl>/accountforgottenpasswordxml" method="post">
<input type="hidden" name="externalsessionid" value="vaše externalsessionid" />
<input type="hidden" name="mrsid" value="vaše mrsid" />
E-mail: <input type="text" name="forgottenpasswordemail" value="" maxlength="50" />
<button type="submit">Send password</button>
</form>
WebSale (modul systému Colosseum - dále jen WS) podporuje pokročilou integraci s webovými stránkami (portály) třetích stran. WS, který se volá pomocí POST požadavků, nejprve zpracuje příchozí parametry a nastaví se tak, aby pak dále dovedl uživatele až k úspěšnému nákupu vstupenek či jejich rezervaci. Příchozí parametry WS ukládá do sessiony návštěvníka a zobrazuje mu vždy požadovanou stránku (produkt) v patřičné grafice, v odpovídajícím jazyce a s tlačítkem pro návrat zpět na portál.
Parametr | Popis |
---|---|
Povinné paramtery | |
Mrsid | Parametr pro definici MRS (integer). Přidělí Vám technická podpora systému Colosseum. |
successRedirect | Návratová adresa po úspěšném zaplacení/založení rezervace. Tzn. po úspěšné rezervaci či nákupu vstupenek bude mít zákazník možnost se vrátit zpět na tuto adresu. |
failedRedirect | Návratová adresa pro funkci zpět na předchozí stránky. |
Nepovinné paramtery | |
redirectaddtickets | Návratová adresa ze sálu, která zaktivní volbu Vybrat další vstupenky
– uživatel je přesměrován zpět na adresu dle parametru. Pokud není parametr předán, pak není možné vložit více vstupenek z různých akcí do košíku. |
language | RFC kód podporovaného jazyka (cs-CZ, en-GB, de-DE, sk-SK). Pokud nepředáno, použije se „cs-CZ“. |
partnerid | Id partnerského webu (integer). Tato funkce je užitečná pro zúčtování provizí partnerským webům. |
Nklid | Identifikátor nákladového střediska. |
externalSessionId | Definuje externí identifikátor uživatele použitý v XML komunikaci s třetími stranami. |
Url adresa pro prodej vstupenek:
https:// vaše websale url /hall
Parametr | Typ | Popis |
---|---|---|
eventid | Povinný | Jednoznačný identifikátor akce v systému Colosseum. |
currency | Nepovinný | Identifikátor měny podle normy ISO 4217 (czk, eur apod.) |
Formulář pro prodej akce Louskáček (3049565, 20.08.2025 17:00) může vypadat takto:
<form method="post" action="https:// vaše websale url /hall">
<input type="hidden" name="mrsid" value="vaše mrsid" />
<input type="hidden" name="eventid" value="id požadované akce" />
<input type="hidden" name="successredirect" value="https:// můj web " />
<input type="hidden" name="failedredirect" value="https:// můj web " />
<input type="hidden" name="redirectaddtickets" value="https:// můj web " />
<input type="hidden" name="language" value="cs-CZ" />
<button type="submit">Koupit</button>
</form>
Url adresa pro prodej předplatného:
https:// vaše websale url /subscriptiondetail
Parametr | Typ | Popis |
---|---|---|
subscriptionId | Povinný | Jednoznačný identifikátor předplatného v systému Colosseum. |
currency | Nepovinný | Identifikátor měny podle normy ISO 4217 (czk, eur apod.) |
<form method="post" action="http:// vaše websale url /subscriptiondetail">
<input type="hidden" name="mrsid" value="vaše mrsid" />
<input type="hidden" name="subscriptionid" value="id požadovaného předplatného" />
<input type="hidden" name="successredirect" value="http:// můj web " />
<input type="hidden" name="failedredirect" value="http:// můj web " />
<input type="hidden" name="redirectaddtickets" value="http:// můj web " />
<input type="hidden" name="currency" value="CZK" />
<input type="hidden" name="language" value="cs-CZ" />
<button type="submit">Koupit</button>
</form>
Url adresa pro prodej balíčků:
https:// vaše websale url /packagedetail
Parametr | Typ | Popis |
---|---|---|
packageid | Povinný | Jednoznačný identifikátor balíčku v systému Colosseum. |
<form method="post" action="https:// vaše websale url /packagedetail">
<input type="hidden" name="mrsid" value="vaše mrsid" />
<input type="hidden" name="packageid" value="id požadovaného balíčku" />
<input type="hidden" name="successredirect" value="https:// můj web " />
<input type="hidden" name="failedredirect" value="https:// můj web " />
<input type="hidden" name="language" value="cs-CZ" />
<button type="submit">Koupit</button>
</form>
Url adresa pro prodej voucherů:
https:// vaše websale url /vouchersaleadd
Parametr | Typ | Popis |
---|---|---|
vouchersaleid | Povinný | Jednoznačný identifikátor voucheru v systému Colosseum |
currency | Povinný | Identifikátor měny podle normy ISO 4217 (CZK, EUR, USD, GBP) |
amount | Povinný | Počet položek (minimálně jedna) |
redirectbacktoportal | Nepovinný | Pokud „redirectbacktoportal“ = 1, přesměruje zákazníka na successredirect hned po vložení položky do košíku. |
<form method="post" action="https:// vaše websale url /vouchersaleadd">
<input type="hidden" name="mrsid" value="vaše mrsid" />
<input type="hidden" name="vouchersaleid" value="id požadovaného typu voucheru" />
<input type="hidden" name="successredirect" value="https:// můj web " />
<input type="hidden" name="failedredirect" value="https:// můj web " />
<input type="hidden" name="redirectbacktoportal" value="1" />
<input type="hidden" name="currency" value="CZK" />
<input type="text" name="amount" value="1" />
<input type="hidden" name="language" value="cs-CZ" />
<button type="submit">Koupit</button>
</form>
Url adresa pro práci s kreditními balíčky:
https:// vaše websale url /creditpackageadd
Parametr | Typ | Popis |
---|---|---|
creditpackageid | Povinný | Jednoznačný identifikátor kreditního balíčku v systému Colosseum |
redirectbacktoportal | Nepovinný | Pokud „redirectbacktoportal“ = 1, přesměruje zákazníka na successRedirect hned po vložení položky do košíku. |
account | Povinný alespoň jeden | Koupit kreditní balíček na vlastní účet |
donate | Darovat kredit (jiné osobě v podobě dárkového voucheru) |
<form method="post" action="https:// vaše websale url /creditpackageadd">
<input type="hidden" name="mrsid" value="vaše mrsid" />
<input type="hidden" name="creditpackageid" value="id požadovaného kreditního balíčku" />
<input type="hidden" name="successredirect" value="https:// můj web " />
<input type="hidden" name="failedredirect" value="https:// můj web " />
<input type="hidden" name="redirectbacktoportal" value="1" />
<input type="hidden" name="language" value="cs-CZ" />
<button type="submit" name="account">Buy</button>
<button type="submit" name="donate">Donate</button>
</form>
Url adresa pro práci se zbožím:
https:// vaše websale url /goodsadd
Parametr | Typ | Popis |
---|---|---|
commodityId | Povinný | Jednoznačný identifikátor zboží v systému Colosseum |
currency | Povinný | Identifikátor měny podle normy ISO 4217 (CZK, EUR, USD, GBP) |
redirectBackToPortal | Nepovinný | Pokud „redirectbacktoportal“ = 1, přesměruje zákazníka na successRedirect hned po vložení položky do košíku. |
commodityAmount | Povinný | Počet daného zboží - Pokud již položka není k dispozici (nebo zákazník vybere vyšší počet než je skladem) zůstane zákazník v košíku s informací, že zboží není k dispozici i přestože je redirectBackToPortal = 1 |
<form action="https:// vaše websale url /goodsadd" method="post">
<input type="hidden" name="mrsid" value="vaše mrsid" />
<input type="hidden" name="commodityId" value="id požadivaného typu zboží" />
<input type="hidden" name="currency" value="CZK" />
<input type="hidden" name="redirectBackToPortal" value="0" />
<input type="hidden" name="failedRedirect" value="https:// můj web " />
<input type="hidden" name="successRedirect" value="https:// můj web " />
<input type="text" name="commodityAmount" value="1" />
<button type="submit">Buy</button>
</form>
Url adresa pro práci s nečasovanými tituly:
https:// vaše websale url /ticketsnonnumberedadd
Parametr | Typ | Popis |
---|---|---|
titleid | Povinný | Jednoznačný identifikátor titulu v systému Colosseum |
<form action="https:// vaše websale url /ticketsnonnumberedadd" method="post">
<input type="hidden" name="mrsid" value="vaše mrsid" />
<input type="hidden" name="titleid" value="id požadovaného titulu" />
<input type="hidden" name="language" value="cs-CZ" />
<input type="hidden" name="currency" value="CZK" />
<input type="hidden" name="failedRedirect" value="https:// můj web " />
<input type="hidden" name="successRedirect" value="https:// můj web " />
<input type="hidden" name="redirectaddtickets" value="https:// můj web " />
<button type="submit">Koupit</button>
</form>
Pro práci s kombinacemi:
https:// vaše websale url /tourscombinationdetail
<form action="https:// vaše websale url /tourscombinationdetail" method="post">
<input type="hidden" name="mrsid" value="24">
<input type="hidden" name="tourscombinationid" value="6269"/>
<input type="hidden" name="successredirect" value="https:// můj web" />
<input type="hidden" name="failedredirect" value="https:// můj web" />
<button type="submit">Koupit</button>
</form>
Pro účely datových exportů do externích systémů je na serveru organizace zprovozněna webová služba poskytující
strukturovaná data. Webová služba provádí na požádání export dat z databáze Colosseum a získaná data pak předává
volající straně pomocí protokolu SOAP. Aby nedošlo ke zneužití webové služby a přetížení vstupenkového systému,
tak je možné volat službu pouze jednou za 10 minut (pouze pro účely testování je možné tuto hodnotu snížit).
Při opakovaném volání bude přístup odepřen. Po uplynutí požadovaného intervalu mezi 2 voláními,
je možné službu znovu zavolat.
URL webové služby:
http://<adresa webové služby>/ColosseumDataService.asmx?Wsdl
Při zpracování XML je potřeba myslet i na to, že se exporty mohou rozšiřovat, tedy parsovat XML podle závorek není vhodné.
Id | Argumenty | Popis | Odkaz na schéma dokumentu |
---|---|---|---|
GET_EXPORT |
|
Export pro divadelní modul. Obsahuje informace o sálech, představeních a datech konání. | |
GET_LOV_SYSTEM |
|
Seznam systémových číselníků. | GetLOVSystem.xsd |
GET_LOV |
|
Seznam uživatelských číselníků. | GetLOV.xsd |
GET_CATALOG |
|
Katalog zboží. | GetCatalog.xsd |
GET_COMMODITIES |
|
Seznam zboží. | GetCommodities.xsd |
GET_GOODS_MOVEMENTS |
|
Seznam pohybů zboží. | GetGoodsMovements.xsd |
GET_PERSONS |
|
Seznam osob. | GetPersons.xsd |
GET_SALE_DOCUMENTS |
|
Seznam prodejů včetně položek. | GetSaleDocuments.xsd |
GET_GOODS_ORDER_STATES |
|
Zjištění stavu objednávky. | GetGoodsOrderStates.xsd |
Pomocí ID jsou vyjádřeny vazby mezi objekty. Např. každá akce (event) má své PRDID a obsahuje TPRID (titul, ke kterému patří), OBJID (sál ve kterém so koná) a ORGID (organizace).
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Document xmlns="http://colosseum.eu/ColosseumDataService">
<id>GET_EXPORT</id>
<args>ORGID=516;NAME=venues,vouchers,titlesEx,eventsEx;email=vas@email.cz</args>
<data></data>
</Document>
</soap:Body>
</soap:Envelope>
HEADERS
Content-Type:text/xml
SOAPAction:http://colosseum.eu/ColosseumDataService/Document
Implementaci exportů na webové stránky si ukážeme na příkladu exportu GET_EXPORT.
Způsob volání ostatních exportů je velmi podobný, liší se jen v předávaných argumentech.
Při implementaci exportů je vhodné připravit si reprezentaci dotazu na webovou službu. Tou může být jednoduchý objekt.
/**
* Simplest object representation of request
*/
class SoapRequest
{
/** @var string SOAP action name */
public $id;
/** @var string arguments */
public $args;
/** @var string data */
public $data;
}
Parametr | Typ | Popis |
---|---|---|
id | string | Identifikátor dotazu (např.: GET_EXPORT, GET_SALES, …) |
args | string | Argumenty dotazau odělené středníkem (každý typ dotazu má jiné) |
data | string | Obsahuje data, která se mají uložit přes webovou službu (např. e-mail uživatele při přihlašování do newsletteru) |
Tento objekt lze využít pro všechny exporty. Jestliže máme prostředek k reprezentaci dotazu, můžeme si webové službě říci o data (respektive ji nějaká data poslat). Níže uvedená funkce volá GET_EXPORT, pokud vše proběhne v pořádku, vrátí webová služba XML soubor, obsahující informace o sálech, akcích a titulech pro dané ORGID.
$xml = $this->requestData('GET_EXPORT', 742, 'venues,vouchers,titlesEx,eventsEx', 'http://data-centrala.colosseum.eu/ColosseumDataService.asmx?wsdl', 'wsukazka@email.cz');
/**
* Requests data from WebService
*
* @param $id string request id
* @param $orgid int orgid
* @param $names string desired parts
* @param $webServiceUrl string url of soap webservice
* @param $email string e-mail
*
* @return SimpleXMLElement
*/
private function requestData($id, $orgid, $names, $webServiceUrl, $email)
{
// Parameters for the query
$request = new SoapRequest;
$request->id = $id;
$request->args = 'ORGID=' . $orgid . ';EMAIL=' . $email.';NAME='.$names;
$request->data = '';
// Set Web Services Description Language
ini_set('soap.wsdl_cache_enabled', '0');
try
{
// try to connect
$soap = new SoapClient($webServiceUrl);
}
catch (SoapFault $e)
{
// error handling
return null;
}
// get response (document() is function on web service)
$documentResponse = $soap->document($request);
unset ($soap);
// simplexml_load_string converts xml string to object
$xml = simplexml_load_string($documentResponse->DocumentResult); // if DocumentResult is empty, xml will be false
return $xml;
}
Přijaté XML bylo pomocí funkce simlexml_load_string() převedeno na objektovou reprezentaci, což ulehčí následnou práci s daty. Pokud služba nic nevrátila, je výsledkem této funkce hodnota false. Seznam titulů může vypadat takto (celý export - XML / SimpleXMLElement ) :
[titlesEx] => SimpleXMLElement Object
(
[Table] => Array
(
[0] => SimpleXMLElement Object
(
[ORGID] => 742
[TPRID] => 97631
[ZNRID] => 6
[ZNR_NAZEV_UZIV] => Komedie
[ID_JAZYK] => 1
[MINUTAZ] => 90
[FILM_3D] => 0
[FILM_3D_ZVUK] => 0
[FILM_TITULKY] => 0
[FILM_DABING] => 0
[FILM_DETI] => 0
[FILM_CINEMAEUROPE] => 0
[AKTUALNI_NABIDKA] => 0
[NAZEV] => Léto s kovbojem
[PODTITUL] => SimpleXMLElement Object
(
)
[PODTITUL2] => SimpleXMLElement Object
(
)
[POZNAMKA] => Hlavními postavami je mladá psycholožka Doubravka a vesnický mladík Honza Macháček. On je traktorista, který při ztřeštěné sázce dočasně přišel o řidičský průkaz, takže teď pase družstevní stádo krav, ona je na chatě se svým chlapcem Bobou, který nepříliš úspěšně studuje medicínu a právě se připravuje na opravné zkoušky. Honzova bezprostřednost, optimismus a přístup k životu i práci ostře kontrastuje se sobeckým, slabošským a nevyrovnaným Bobou a Doubravka si stále víc uvědomuje, že její cit k Bobovi zmizel a doopravdy má vlastně ráda Honzu.
[PREMIERA] => 2016-06-28T00:00:00+02:00
[PRISTUP] => SimpleXMLElement Object
(
)
[MONOP] => SimpleXMLElement Object
(
)
[TIMEZONE_KEY] => Central Europe Standard Time
)
[1] => SimpleXMLElement Object
(
[ORGID] => 742
[TPRID] => 97632
[ZNRID] => 6
[ZNR_NAZEV_UZIV] => Drama
[ID_JAZYK] => 1
[MINUTAZ] => 120
[FILM_3D] => 0
[FILM_3D_ZVUK] => 0
[FILM_TITULKY] => 0
[FILM_DABING] => 0
[FILM_DETI] => 0
[FILM_CINEMAEUROPE] => 0
[AKTUALNI_NABIDKA] => 0
[NAZEV] => Hamlet
[PODTITUL] => SimpleXMLElement Object
(
)
[PODTITUL2] => SimpleXMLElement Object
(
)
[POZNAMKA] => Něco shnilého je v království Dánském. Kralevic Hamlet se vrací do svého rodného kraje a zjišťuje, že jeho otec tragicky zemřel a jeho místo po matčině boku zaujal strýc Klaudius. Jako nový král Hamleta nutí, aby se co nejrychleji oženil s jeho milovanou Ofélií, ale Hamletovi se ve snu zjeví duch jeho otce a prozradí mu, jak se ve skutečnosti věci mají. Zdrcený Hamlet je tak postaven před nejtěžší volbu svého života... Adaptace slavné Shakespearovy hry pod taktovkou Franca Zefirelliho. V hlavní roli Hamleta se objevuje Mel Gibson.
[PREMIERA] => 2016-04-26T00:00:00+02:00
[PRISTUP] => SimpleXMLElement Object
(
)
[MONOP] => SimpleXMLElement Object
(
)
[TIMEZONE_KEY] => Central Europe Standard Time
)
Přístup k datům je nyní jednoduchý. Objektový přístup je nezávislý na pořadí dat v XML, implementace bude fungovat, i když se formát XML změní (nelze zaručit, že ID organizace bude vždy na prvním místě).
$titleId = $xml->titlesEx->Table[0]->TPRID;
$titleName = $xml->titlesEx->Table[0]->NAZEV;
POZOR! Exporty obsahují název obrázku, ale již neobsahují cestu k obrázku.
Cesta k obrázku je: https://storage.colosseum.eu/Content/data/<ID_ORGANIZACE>/titles/<NÁZEV_OBRÁZKU_Z_EXPORTU>/
Pro úplnost je níže uvedena jednoduchá funkce pro ukládání akcí z XML do databáze.
/**
* Saves events to db
*
* @param $xml SimpleXMLElement data
*/
private function saveEvents($xml)
{
foreach ($xml->eventsEx->Table as $item)
{
try
{
$query = $this->db->prepare(
"INSERT INTO `events`(prdid, tprid, objid, orgid, cng_start) VALUES (:prdid, :tprid, :objid, :orgid, :cng_start) " .
"ON DUPLICATE KEY UPDATE cng_start = :cng_start"
);
$result = $query->execute(
[
':prdid' => $item->PRDID,
':tprid' => $item->TPRID,
':objid' => $item->OBJID,
':orgid' => $item->ORGID,
':cng_start' => date('Y-m-d H:i:s', strtotime($item->DATUM_OD))
]
);
}
catch (PDOException $e)
{
// error handling
}
}
}