3.3.6. Обработка ошибок
|
|
Такском-Доклайнз .NET SDK кроме стандартных исключений платформы .NET предусматривает специфические исключения следующих типов:
•
|
TaxcomApiException: ошибки обработки электронных документов на сервере системы Такском-Доклайнз (например, вызов метода Login() с некорректным значением параметра Software application ID, назначенным для экземпляра класса TaxcomApi);
|
•
|
TaxcomSdkException: проблемы с установкой и использованием библиотек .NET SDK (например, неправильная установка библиотеки Taxcom CryptoAX).
|
Перечень API ошибок на стороне сервера Такском-Доклайнз см. в Приложении 2. Коды ошибок (исключения TaxcomApiException).
Если TaxcomApiException или TaxcomSdkException генерируются при стандартном исключении .NET платформы, исходное исключение представлено в InnerException свойстве сгенерированного объекта.
Описание классов исключений
public class TaxcomSdkException : TaxcomException
{
}
public class TaxcomApiException : TaxcomException
{
// Taxcom-Doclnes server side error code
public int ApiErrorCode { get; set; }
// HTTP-error code
public int HttpErrorCode { get; set; }
}
public abstract class TaxcomException : Exception
{
// Error message
public string Details { get; set; }
}
Пример кода C#
try
{
Factory factory = new Factory();
TaxcomApi api = factory.CreateApiFromFiles("https://api-invoice.taxcom.ru/v1.3/", "TaxcomFiler_F9244126-2184-4E43-8F62-F5BB1BEE4418", "C:\\authCert.cer");
api.Login();
}
catch (TaxcomApiException ex)
{
// to handle Taxcom-Doclines server side errors
}
catch (TaxcomSdkException ex)
{
// to
}
catch (Exception ex)
{
// To handle other errors
}
Для получения информации об асинхронной ошибке нужно после отправки документа методом GetDocFlowList получить данные о его статусе, описание ошибки будет включено в поле сообщения.
Типы и виды ошибок
Вид ошибки
|
Тип ошибки (ErrorType)
|
Описание
(ErrorDescription)
|
Ошибки сертификатов
|
ImportFailed
|
Импорт документа с некорректной подписью
|
Сертификат подписи отсутствует у абонента
| ||
Подпись не соответствует переданному файлу. После подписания изменили xml
| ||
Ошибки тарификации
|
DocflowError
|
Тариф недействителен, нет активных счетчиков
|
Исчерпан лимит отправок по счетчикам
| ||
Ошибки взаимодействия с партнёром
|
VerificationError
|
Отправка партнёру, которого нет в контактах (который не дал согласие на обмен документами)
|
Ошибки верификации документа
|
VerificationError
|
Ошибка форматологического контроля документа, ApiCode="6100"
|
Неверно указан подписант в документе, ApiCode="6101"
| ||
Неверно указан отправитель документе, ApiCode="6102"
| ||
Неверно указан получатель документе, ApiCode="6103"
| ||
Ошибка в названии файла документа, ApiCode="6104"
| ||
Ошибка проверки документа по XSD схеме, ApiCode="6105"
|
Примеры результатов метода GetDocFlowList при наличии ошибок
Пример 1. Импорт документа с некорректной подписью:
02.12.2014 9:53:54 - <?xml version="1.0" encoding="utf-8"?><ContainerDescription RequestDateTime="2014-12-02 08:53:54.243" IsLast="true" LastRecordDateTime="2014-12-02 09:53:39.817" xmlns="http://api-invoice.taxcom.ru/meta"><DocFlow Status="Error" ErrorType="ImportFailed" ErrorDescription="Ошибка проверки подписи документа при импорте" StatusChangeDateTime="2014-12-02 09:53:39.817"><Documents><Document><Definition><Identifiers ExternalIdentifier="ON_SFAKT_2AL-8C017440-18CE-4CC2-A6CC-DDCACF38D64C-00000_2AL-0D317DAD-6557-4314-9244-79314A896DFC-00000_20140707_76D13F9A-8BD9-4A9E-9011-9381D87BD011.xml" /></Definition></Document></Documents></DocFlow></ContainerDescription>
Пример 2. Сертификат подписи отсутствует у абонента:
02.12.2014 9:56:44 - <?xml version="1.0" encoding="utf-8"?><ContainerDescription RequestDateTime="2014-12-02 08:56:44.583" IsLast="true" LastRecordDateTime="2014-12-02 09:56:35.800" xmlns="http://api-invoice.taxcom.ru/meta"><DocFlow Status="Error" ErrorType="ImportFailed" ErrorDescription="Сертификат (отпечаток 'D223731066C49C088DCAA3A7F652416D020DAD9A'), которым подписан данный документ, отсутствует у абонента." StatusChangeDateTime="2014-12-02 09:56:35.800"><Documents><Document><Definition><Identifiers ExternalIdentifier="ON_SFAKT_2AL-8C017440-18CE-4CC2-A6CC-DDCACF38D64C-00000_2AL-0D317DAD-6557-"></Identifiers>
Пример 3. Подпись не соответствует переданному файлу. После подписания изменили xml
02.12.2014 9:59:57 - <?xml version="1.0" encoding="utf-8"?><ContainerDescription RequestDateTime="2014-12-02 08:59:56.961" IsLast="true" LastRecordDateTime="2014-12-02 09:59:41.813" xmlns="http://api-invoice.taxcom.ru/meta"><DocFlow Status="Error" ErrorType="ImportFailed" ErrorDescription="Подпись для 'ON_SFAKT_2AL-8C017440-18CE-4CC2-A6CC-DDCACF38D64C-00000_2AL-0D317DAD-6557-4314-9244-79314A896DFC-00000_20140707_76D13F9A-8BD9-4A9E-9011-9381D87BD011.xml' не соответствует переданному файлу" StatusChangeDateTime="2014-12-02 09:59:41.813"><Documents><Document><Definition><Identifiers ExternalIdentifier="ON_SFAKT_2AL-8C017440-18CE-4CC2-A6CC-DDCACF38D64C-00000_2AL-0D317DAD-6557-4314-9244-79314A896DFC-00000_20140707_76D13F9A-8BD9-4A9E-9011-9381D87BD011.xml" /></Definition></Document></Documents></DocFlow></ContainerDescription>
Пример 4. Тариф недействителен, нет активных счетчиков
02.12.2014 10:06:23 - <?xml version="1.0" encoding="utf-8"?><ContainerDescription RequestDateTime="2014-12-02 09:06:23.682" IsLast="true" LastRecordDateTime="2014-12-02 10:06:09.300" xmlns="http://api-invoice.taxcom.ru/meta"><DocFlow Id="39ec14c2-c9d9-4735-b6b4-e5100ab92a57" Status="Error" ErrorType="DocflowError" StatusChangeDateTime="2014-12-02 10:06:09.300"><Documents><Document><Definition><Identifiers InternalId="fdd98d77-5822-4c44-9f3f-2aaff996f11f" ExternalIdentifier="ON_SFAKT_2AL-8C017440-18CE-4CC2-A6CC-DDCACF38D64C-00000_2AL-0D317DAD-6557-4314-9244-79314A896DFC-00000_20140707_76D13F9A-8BD9-4A9E-9011-9381D87BD011.xml" /></Definition></Document></Documents></DocFlow></ContainerDescription>
Обработка ошибок, возникших при выполнении Регламентов ЭДО (в методе AutoSendReceive)
Метод GetErrors()
В каждом экземпляре TaxcomApi присутсвует метод GetErrors(), возвращающий список сообщений об ошибках, возникших при выполнении Регламентов ЭДО на стороне клиента:
object[] GetErrors()
В случае, если при выполнении Регламентов ЭДО в методе AutoSendReceive возникла ошибка, её текст можно будет получить, вызвав метод GetErrors() экземпляра TaxcomApi.
Если, например, с сервера пришла команда подписать документ с использованием сертификата ЭП, отсутствующего на компьютере клиента, данная команда не будет выполнена, а информация об ошибке будет доступна для метода GetErrors(). При этом, ошибка не затронет выполнение других команд, полученных от сервера методом AutoSendReceive.
Пример использования:
bool wasAnythingProcessed = api1.AutoSendReceive();
var errors = api1.GetErrors();
bool hasErrors = errors.Length > 0;
Интерфейс ITaxcomApiErrorHandler
Для получения более подробной информации об ошибках, возникших при выполнении метода AutoSendReceive, необходимо:
1. Реализовать обработчик ошибок, имплементирующий интерфейс ITaxcomApiErrorHandler :
public class SampleErrorHandler:ITaxcomApiErrorHandler
{
public bool OnError(TaxcomApiErrorDescription taxcomApiErrorDescription)
{
var exception = taxcomApiErrorDescription.InnerException;
//можно, например, логировать полученное исключение...
Debug.WriteLine(exception);
/*
* в зависимости от полученного исключения, интеграционное средство может принять решение
* либо остановить последующее выполнение регламентых операций, либо продолжить
*/
var processingShouldBeStopped = false;
return processingShouldBeStopped;
}
}
2. Передать экземпляр обработчика ошибок при создании нового экземпляра TaxcomApi:
var api = new Factory().CreateApi(serviceUrl, useDefaultProxy, clientIdentifier, authCertificateBody, edxClientId, new SampleErrorHandler());