ИС "Такском-Доклайнз"                  ИНФОРМАЦИЯ ДЛЯ РАЗРАБОТЧИКОВ
×
3.2.3.2. Метод GetContactListUpdates
 
Метод GetContactListUpdates предназначен для получения обновления для списка статусов приглашений, а также информации о подразделениях и сотрудниках организации с включенной опцией "Показывать контрагентам при заполнении данных получателя". В списке статусов приглашений возможны следующие изменения:
•
Получение ответа на отправленное приглашение (изменение его статуса). Связь ответа с отправленным приглашением может быть установлена с помощью параметра ExternalContactId, назначенного контрагенту в XML файле приглашения, предварительно отправленного с помощью метода SendContacts.
•
Получение нового приглашения (приглашений) от контрагента (контрагентов).
•
Получение от одного или нескольких контрагентов уведомления об отказе от обмена электронными документами.
Каждая запись обновления списка приглашений имеет один из следующих статусов:
Статус
Описание
Sent
Исходящее приглашение отправлено. Ожидание ответа.
Incoming
Входящее приглашение получено. Контрагент ждёт ответа.
Rejected
Приглашение отклонено
Accepted
Приглашение принято. Обмен документами разрешён.
Error
Возможны следующие коды ошибок:
•
ErrorCode=InvalidInn: Некорректный ИНН
•
ErrorCode=InvalidEmail: Некорректный формат адреса E-mail
•
ErrorCode=NotFound:
o
Для исходящих приглашений: приглашение не может быть отправлено, так как контрагент не зарегистрирован в Такском-Доклайнз , а его  e-mail адрес задан некорректно;
o
Для входящих приглашений: при попытке отклонить или принять приглашение не найдено.
 
Внимание!
Вызывать метод GetContactListUpdates следует не чаще, чем 1 раз в минуту.
 
HTTP-запрос
HTTP-method: GET
Адрес запроса (URI)
https://<server>.taxcom.ru/v<version>/API/GetContactListUpdates?date={DATE}&status={STATUS}
Параметры адреса запроса
DATE
Обязательный параметр,  указывающий момент времени, начиная с которого следует собрать и представить сведения об изменениях.
В качестве этого параметра указывается момент предыдущего вызова метода.
Формат параметра DATE: yyyy-MM-ddTHH:mm:ss
STATUS
Необязательный параметр. Используется для фильтрации приглашений по статусу.
Заголовок запроса
Integrator-Id
Идентификатор интеграционного решения. Формат этого идентификатора:
COMPANY_AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA
Assistant-Key
Маркер временного доступа.
 
Пример вызова метода GetContactListUpdates для получения информации обо всех приглашениях со статусом Incoming (контрагент ждёт ответа), начиная с 1 января 2013 г.:
https://api-invoice.taxcom.ru/v1.3/API/GetContactListUpdates?DATE=2013-01-01T00:00:00&STATUS=Incoming
 
HTTP-ответ сервера:
XML файл с обновлением для списка приглашений, содержащий не более 100 записей об изменениях в этом списке.
Если необходимо получить все изменения, то при следующем вызове метода в качестве параметра DATE следует указать момент самого позднего из полученных изменений и затем повторять вызов метода, обновляя параметр DATE, до получения пустого списка изменений.
 Адреса серверов:
URL тестового сервиса Такском API:  https://api-invoice.taxcom.ru/v1.3/
URL продуктового сервиса Такском API:  https://api.taxcom.ru/v1.3/ 
Примеры XML файла обновления:
Пример 1
<?xml version="1.0" encoding="utf-8"?>
<Contacts Asof="2012-02-03T14:48:23.85" xmlns="http://api-invoice.taxcom.ru/contacts">
  <Contact>
      <State Code="Sent" Changed="2011-07-15T13:25:00"> An invitation has been sent to contact. Awaiting the answer.</State>
      <Name>"Test Company" ltd</Name>
      <Inn>5233333323</Inn>
      <Kpp>523301001</Kpp>
      <Login>Test_B</Login>
      <Email>user@server.com</Email>
      <EDXClientId>TXCE207D97190694FA6B07A9CADD8439048</EDXClientId>
      <Agreements>
          <Agreement Number="8890" Date="2011-07-15T00:00:00"/>
          <Agreement Number="AL-1567" Date="2011-09-11T00:00:00"/>
      </Agreements>
  </Contact>
</Contacts>
Пример 2
<?xml version="1.0" encoding="utf-8"?>
<Contacts Asof="2019-01-22T09:27:05.19" xmlns="http://api-invoice.taxcom.ru/contacts">
 <Contact>
         <State Code="Sent" ErrorCode="" Changed="2019-01-21T15:37:46.29">Ожидается ответ на приглашение, отправленное на email</State>
         <Name>-</Name>
         <Inn>5011019404</Inn>
         <Email>-</Email>
         <Comment>Давайте обмениваться электронными документами</Comment>
         <Agreements>
                 <Agreement Number="5534" />
                 <Agreement Number="45438" />
         </Agreements>
 </Contact>
 <Contact>
         <State Code="Error" ErrorCode="InvalidScan" Changed="2019-01-21T15:56:02.98">Расширение прикрепленного файла не поддерживается </State>
         <Name>-</Name>
         <Inn>5011019404</Inn>
         <Email>-</Email>
         <Comment>Давайте обмениваться электронными документами</Comment>
         <Agreements />
 </Contact>
 <Contact>
         <State Code="Error" ErrorCode="InvalidScan" Changed="2019-01-21T16:09:18.263">Размер файла превышает 10 МБ</State>
         <Name>-</Name>
         <Inn>5011019404</Inn>
         <Email>-</Email>
         <Comment>Давайте обмениваться электронными документами</Comment>
         <Agreements />
 </Contact>
 <Contact>
         <State Code="Error" ErrorCode="InvalidEdxClientId" Changed="2019-01-21T20:12:11.07">Идентификатор EdxClientId должен отсутствовать</State>
         <Name>-</Name>
         <Inn>5011019404</Inn>
         <Email>-</Email>
         <Comment>Давайте обмениваться электронными документами</Comment>
         <Agreements />
 </Contact>
 <Contact>
         <State Code="Error" ErrorCode="InvalidScanFilename" Changed="2019-01-21T20:18:20.677">Отсутствует наименование прикрепленного файла</State>
         <Name>-</Name>
         <Inn>5011019404</Inn>
         <Email>-</Email>
         <Comment>Давайте обмениваться электронными документами</Comment>
         <Agreements />
 </Contact>
 <TemplateID>00000000-0000-0000-0000-000000000000</TemplateID>
</Contacts>
 
Пример кода C#
public void GetUpdatedContactList()
{
  const string API_srv = @"https://api.taxcom.ru/v1.3/";
  XmlDocument XmlResponse = null;
  const string externalId = @"5c89fe6e-ab68-435a-96cb-3db25d9d1f49";
  var lastRequestDate = DateTime.Today.Date.ToString(CultureInfo.InvariantCulture);
 
    try
    {
        var request = (HttpWebRequest) WebRequest.Create(API_srv + "API/GetContactListUpdates?date=" + lastRequestDate);
        request.Headers.Add("Assistant-Key", "session token");
        request.Headers.Add("Integrator-Id", "vendor_id");
        request.Method = "GET";
 
        using (var response = request.GetResponse())
        using (var responseStream = response.GetResponseStream())
        using (var ms = new MemoryStream())
        using (var reader = new StreamReader(ms))
        {
            if (responseStream != null) responseStream.CopyTo(ms);
            ms.Position = 0;
            XmlResponse = new XmlDocument();
            var responsString = reader.ReadToEnd();
            if (string.IsNullOrWhiteSpace(responsString))
            {
                return;
            }
            XmlResponse.LoadXml(responsString);
            var contactStatus = FindXPathInXml(XmlResponse, String.Format(@"//k:Contact[k:ExternalContactId[text()='{0}']]/k:State/@Code", externalId));
        }
    }
 
    catch (WebException exception)
    {
        Assert.Fail(exception.ToString());
    }
    catch (Exception exception)
    {
        Assert.Fail(exception.ToString());
    }
}
public static string FindXPathInXml(XmlDocument xmldoc, string xpath)
{
  var ns = new XmlNamespaceManager(xmldoc.NameTable);
  ns.AddNamespace("m", "http://api-invoice.taxcom.ru/meta");
  ns.AddNamespace("c", "http://api-invoice.taxcom.ru/card");
  ns.AddNamespace("k", "http://api-invoice.taxcom.ru/contacts");
 
  try
  {
      return xmldoc.SelectSingleNode(xpath, ns).Value;
  }
  catch (Exception)
  {
      return null;
  }
}