3.2.3.2. Метод GetContactListUpdates
|
|
Метод GetContactListUpdates предназначен для получения обновления для списка статусов приглашений, а также информации о подразделениях и сотрудниках организации с включенной опцией "Показывать контрагентам при заполнении данных получателя". В списке статусов приглашений возможны следующие изменения:
•
|
Получение ответа на отправленное приглашение (изменение его статуса). Связь ответа с отправленным приглашением может быть установлена с помощью параметра ExternalContactId, назначенного контрагенту в XML файле приглашения, предварительно отправленного с помощью метода SendContacts.
|
•
|
Получение нового приглашения (приглашений) от контрагента (контрагентов).
|
•
|
Получение от одного или нескольких контрагентов уведомления об отказе от обмена электронными документами.
|
Каждая запись обновления списка приглашений имеет один из следующих статусов:
Статус
|
Описание
| ||||||||||
Sent
|
Исходящее приглашение отправлено. Ожидание ответа.
| ||||||||||
Incoming
|
Входящее приглашение получено. Контрагент ждёт ответа.
| ||||||||||
Rejected
|
Приглашение отклонено
| ||||||||||
Accepted
|
Приглашение принято. Обмен документами разрешён.
| ||||||||||
Error
|
Возможны следующие коды ошибок:
|
Внимание!
Вызывать метод 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 = (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;
}
}