Как я могу связаться с API Kronos?

У меня есть Кронос точка входа http://kronos../wfc / XmlService что я должен иметь доступ, однако, когда я открываю его в brower, ответ:

<Kronos_WFC>
<Response Status="Failure" ErrorCode="1332" Message="WFP-01110 The MIME type of the request is invalid. Type Found: . Valid types: text/xml, application/xml."></Response>
</Kronos_WFC>

что мне делать, чтобы использовать веб-службы?

кстати, я использую C# для связи с сервером.

4 ответов


вы получаете это с помощью brower, потому что сервер Kronos поддерживает только запросы POST, и браузер выдает запрос GET. Причина этого заключается в том, что Kronos требует XML в теле, и POST является наиболее подходящим методом для этого.

способ доступа к XML API Kronos, делает WebRequest на URL-адрес с помощью метода POST и такой:

HttpWebRequest reqFp = (HttpWebRequest)HttpWebRequest.Create(KronosServerUrl);
reqFp.Method = "POST";
reqFp.ContentType = "text/xml";

обратите внимание, как ContentType также установлен в text / xml.


кроме того, вам нужно убедиться, что у вас есть XML API access check в профиле доступа к функциям в Kronos.


As Ник указал, вы можете общаться с API Kronos, используя запросы XML POST.

хотя ваш метод отправки запросов может отличаться, формат запроса и точка входа API (wfc/XmlService) должно применяться ко всем языкам.


Глава 1: понимание XML API

на WFC v5.0 инструментарий разработчика программиста Руководство1 предоставляет общее руководство для общения с API Kronos на разных языках. В первой главе рассматривается XML API, как будут отправляться все запросы API.

Запрос На Вход

стандартный запрос входа в систему XML для Kronos WFC. Это должно быть отправлено первым перед любыми другими запросами.

<Kronos_WFC version = "1.0">
  <Request
    Object = "System"
    Action = "Logon"
    Username = "ValidUsername"
    Password = "ValidPassword"
  />
</Kronos_WFC>

пример ответа:

<Kronos_WFC version="1.0" TimeStamp="11/15/2017 3:35PM GMT-05:00">
    <Response Status="Success" Timeout="1800" PersonKey="123456" Object="System"
              Username="ValidUsername" Action="Logon" PersonNumber="112233">
    </Response>
</Kronos_WFC>

Запрос На Выход

этот запрос выхода завершит активную сессию Kronos.

<Kronos_WFC version="1.0">
  <Request Object="System" Action="Logoff"/>
</Kronos_WFC>

Общий Запрос Периода Оплаты

этот запрос загружает общую сумму периода оплаты для сотрудника 12345 С 20 октября 2017 года и 27 октября 2017 года.

<Kronos_WFC version="1.0">
  <Request Action="Load">
    <Timesheet>
      <Employee>
        <PersonIdentity PersonNumber = "12345"/>
      </Employee>
      <Period>
        <TimeFramePeriod PeriodDateSpan = "10/20/2017 - 10/27/2017"/>
      </Period>
    </Timesheet>
  </Request>
</Kronos_WFC>

Глава 2: Использование XML API

в этой главе рассматриваются языковые примеры отправки XML-запросов в Kronos. Он включает примеры для Java и Visual Basic. (для Python, см. kronos-wfc-login.py)

обратите внимание, что эти примеры носят достаточно упрощенный. Я рекомендую изучить более современную библиотеку XML или HTTP-запросов, специфичную для любого языка, который вы используете.

реализация на основе Java2

существует восемь шагов с использованием языка Java:

  1. открыть HTTP подключение к серверу с помощью следующей строки URL:

    URL url = new URL("http://localhost/wfc/XmlService");
    HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    

    не забудьте заменить http://localhost С URL вашего сервера

  2. настройте соединение, установив метод HTTP в " POST "и тип содержимого в" text/xml", как показано:

    conn.setRequestMethod("POST");
    conn.setRequestProperty("Content-type", "text/xml");
    

    HTTP-соединение, которое вы устанавливаете, используется для обоих входных данных (отправка XML <Request>) и вывод (чтение XML <Response>). Необходимо также убедиться, что любой прокси-сервер или промежуточный шлюз не пытается кэшировать <Request> или <Response>.

    conn.setDoOutput(true);
    conn.setDoInput(true);
    conn.setUseCaches(false);
    
  3. установите cookies для подключения. Изначально при первом подключении к серверу набор cookies будет пустым. Однако, the <Response> для входа <Request> вернет набор cookies это должно быть сохранено и отправлено обратно в последующих HTTP-запросах.

    Vector cookies = new Vector();
    …
    //set the cookie values - if available
    for (int i=0; i <cookies.size(); i++) {
        String cookie = (String)cookies.elementAt(i);
        conn.setRequestProperty("Cookie", cookie);
    }
    
  4. пишите XML-текст как часть HTTP-запроса.

    String xml_send = "<?xml version='1.0'?> … </Kronos_WFC>"
    PrintWriter out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream()));
    out.println(xml_send);
    out.close();
    
  5. подключиться к серверу.

    conn.connect();
    
  6. откройте ответ от сервера.

    InputStream is = conn.getInputStream();
    
  7. читать ответ. Ответ HTTP от сервера будет содержать ответ XML API. В случае запроса на вход в систему строка xml_recv содержит ответ.

    int size = conn.getContentLength();
    byte[] dataBytes = new byte[size];
    int bytesRead = 0;
    int pos = 0;
    //read stream into byte array
    while ( (bytesRead >= 0) && (pos < size)) {
        if ((bytesRead = is.read(dataBytes, pos, size-pos)) >= 0) {
            pos = pos + bytesRead;
        }
    }
    String xml_recv = new String(dataBytes, 0, size);
    is.close();
    
  8. читать куки от ответ и хранить их для последующих HTTP-запросов.

    int j = 1;//
    while (true) {
        String key = conn.getHeaderFieldKey(j);
        if (key==null)
            break;
        else if (key.equals("Set-Cookie")) {
            String value = conn.getHeaderField(j);
            cookies.addElement(value);
        }
        j++;
    }
    

Реализация Visual Basic

в этом разделе те же основные шаги, реализованные в Java в последнее разделы реализованы в Visual Basic. Это сравнение показывает, что Визуальный основной упрощает процесс внутренне управление куки и большая часть обработки HTTP-соединений.

следующее Inet1 COM object обрабатывает вызов HTTP запрос, как показано ниже:

Dim sPost As String
Dim sAction As String
Dim sXMLData As String
Dim sHTTPHeaders As String

sPost = "POST"
sAction = "http://localhost/wfc/XmlService"
sXMLData = "<xml ..> <request …….. /></xml>"
sHTTPHeaders = "Content-type: text/xml"

' Inet1 object is an instance
' of the msinet.ocx control
' placed on the current form
Inet1.Execute sAction, sPost, sXMLData, sHTTPHeaders

Полезные Ресурсы

Примечания:

1: первоначально указанная документация была написана для Kronos WFC 5.0 (API 1.0). Хотя версиях до 6.3 должны использовать тот же API, я не могу гарантировать точность для других версий. (См. XML API версии 6.3-8.0 обновление)
2: приведенные ниже примеры кода относятся к 2004 году. Реализация Java может быть значительно упрощена с помощью библиотеки HTTP.


не только доступ XML, но пользователь также должен иметь удаленный доступ к api включен