ИС "Такском-Доклайнз"                  ИНФОРМАЦИЯ ДЛЯ РАЗРАБОТЧИКОВ
×
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, до получения пустого списка изменений.
 
Примеры 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 = (HttpWebRequestWebRequest.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;
  }
}