Пример запросов C#
В архиве находится тестовый пример. Для запуска необходимо заполнить параметры лицензирования в класс LicenseSettings.
wsexample2.zip
Начало работы
Чтобы начать работать с White Server, необходимо:
1. Получить логин(userName), пароль(password), токен(token) в отделе лицензирования.
2. Получить объект агрегатора, объект ресторана и абстрактный софт(продукт), если их нет, в отделе лицензирования.
3. Получить лицензии. Подробнее о том, как получить лицензии: Порядок создания и проверки лицензий
4. Настроить агент. Подробнее о том, как настроить агент: Настройка WhiteServer Agent
5. Заменить данные в файле на wsexample\WSExample\Client\Models\LicenseSettings.cs(в примере из архива) на полученные.
1 Авторизация
Для Авторизации необходимо отправить POST запрос на адрес http://white_server_address/wsserverlp/api/client/login такого вида:
<?xml version="1.0" encoding="utf-8"?> <AUTHCMD key="LicenseCode" usr="usr"/>
LicenseCode: выданный код лицензии;
usr: Base64(userName + “;” + lowercase(hPassword) + “;” + lowercase(md5(token)));
hPassword – вычисляется как MD5(userName+password);
userName, password - дилерский логин/пароль;
token - токен лицензирования.
В ответ вернется xml вида:
<Error code="0" Text="Ok" />
В запросе вернется cookie - идентификатор сессии, которую необходимо использовать в последующих запросах.
2 Синхронная команда
Отправляем POST запрос на http://white_server_address/wsserverlp/api/client/cmd, вкладывая полученную cookie.
public string SendXmlCommand(Aggregator aggregator) { //текст запроса var testString = @"<RQ cmd = ""get_objects""/>"; var response = new ServerResponse(); try { response = DataSender.SendDataToServer(LicenseSettings.WhiteServerUrl + "/api/client/cmd", requestString, aggregator.Cookie, "text/xml"); Console.WriteLine("Response: " + response.ResponseString); return response.ResponseString; } catch (Exception exception) { Console.WriteLine("SendXmlCommands catch: " + exception.Message + " ResponseString:" + response.ResponseString); } return null; }
3 Асинхронная команда
Отправка синхронной команды происходит аналогично синхронной, но добавляется атрибут callback, в котором необходимо указать адрес сервиса, принимающего колбэк. В ответ на запрос придет xml c taskguid (подробней см. описание методов), а на адрес, указанный в callback - асинхронный ответ.
public string SendXmlCommand(Aggregator aggregator) { //текст запроса var testString = @"<RQ cmd = ""exec_rk7call"" tasktype = ""any_call"" callback = ""%%_Callback_%%""> <PARAM name = ""object_id"" val = ""%%_ObjectCode_%%""/> <RK7Query> <RK7CMD CMD = ""GetSystemInfo""/> </RK7Query> </RQ>"; //LicenseSettings - статический класс, в котором хранятся настройки: id агента, дилерские логин и пароль, адрес WS и // AggregatorServerUrl - адрес, куда будут приходить колбэки var requestString = testString.Replace("%%_ObjectCode_%%", LicenseSettings.AgentId) .Replace("%%_Callback_%%", LicenseSettings.AggregatorServerUrl+ "/api/callbacks/save"); var response = new ServerResponse(); try { response = DataSender.SendDataToServer(LicenseSettings.WhiteServerUrl + "/api/client/cmd", requestString, aggregator.Cookie, "text/xml"); Console.WriteLine("Response: " + response.ResponseString); return response.ResponseString; } catch (Exception exception) { Console.WriteLine("SendXmlCommands catch: " + exception.Message + " ResponseString:" + response.ResponseString); } return null; }