Пример #1
0
        /// <summary>
        /// Добавить в сообщение документ перед отправкой
        /// </summary>
        /// <param name="message">сообщение</param>
        /// <param name="document"></param>
        /// <param name="sign"></param>
        /// <returns></returns>
        public static Message AddDocumentToNewMessage(Message message, Document document, byte[] sign)
        {
            if (message == null) throw new ArgumentNullException("message");
            if (document == null) throw new ArgumentNullException("document");
            if (sign == null) throw new ArgumentNullException("sign");
            if (string.IsNullOrEmpty(document.Id))
            {
                throw new ArgumentException("Не указан идентификатор документа");
            }

            if (message.Documents == null)
                message.Documents = new Document[0];
            if (message.Signs == null)
                message.Signs = new Sign[0];

            if (message.Documents.Any(d => d.Id == document.Id))
                throw new ArgumentException("Документ с идентификатором \"{0}\" уже добавлен в сообщение", document.Id);

            var documents = new List<Document>(message.Documents);
            documents.Add(document);
            message.Documents = documents.ToArray();

            var signs = new List<Sign>(message.Signs);
            signs.Add(new Sign()
            {
                Id = Guid.NewGuid().ToString(),
                DocumentId = document.Id,
                Raw = sign
            });
            message.Signs = signs.ToArray();

            return message;
        }
Пример #2
0
 /// <summary>
 /// Отправка сообщения
 /// </summary>
 /// <param name="message"></param>
 /// <returns>возвращает результат отправки</returns>
 public virtual SentMessage SendMessage(Message message)
 {
     return CheckAutorizedInvoke(() => client.SendMessage(Token, message));
 }
Пример #3
0
 public IAsyncResult BeginSendMessage(Message message, AsyncCallback asyncCallback)
 {
     return client.BeginSendMessage(Token, message, asyncCallback, null);
 }
Пример #4
0
 /// <summary>
 /// Создать сообщение с СД ИОП (регламент ЭСФ)
 /// </summary>
 /// <returns></returns>
 public Message CreateInvoiceReceipt(Message message, Document document, X509Certificate2 certificate2)
 {
     if (message == null) throw new ArgumentNullException("message");
     if (document == null) throw new ArgumentNullException("document");
     if (certificate2 == null) throw new ArgumentNullException("certificate2");
     var generatedNotice = client.GenerateInvoiceReceipt(CurrentBox, document.Id);
     return CreateServiceDocumentMessage(message, document, certificate2, DocumentType.ServiceInvoiceReceipt, generatedNotice);
 }
Пример #5
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="message"></param>
 /// <param name="document"></param>
 /// <param name="certificate"></param>
 /// <returns></returns>
 public Message CreateAmendmentRequest(Message message, Document document, string text, X509Certificate2 certificate)
 {
     var amendmentRequest = client.GenerateAmendmentRequest(CurrentBox, document.Id, text);
     return CreateServiceDocumentMessage(message, document, certificate, DocumentType.ServiceAmendmentRequest, amendmentRequest);
 }
Пример #6
0
 /// <summary>
 /// Создать сообщение с СД УОУ (регламент ЭСФ)
 /// </summary>
 /// <param name="message"></param>
 /// <param name="document"></param>
 /// <param name="certificate"></param>
 /// <returns></returns>
 public Message GenerateInvoiceAmendmentRequest(Message message, Document document, string text, X509Certificate2 certificate)
 {
     if (message == null) throw new ArgumentNullException("message");
     if (document == null) throw new ArgumentNullException("document");
     if (certificate == null) throw new ArgumentNullException("certificate");
     var amendmentRequest = client.GenerateInvoiceAmendmentRequest(CurrentBox, document.Id, text);
     return CreateServiceDocumentMessage(message, document, certificate, DocumentType.ServiceInvoiceAmendmentRequest, amendmentRequest);
 }
Пример #7
0
 /// <summary>
 /// Создать сообщение с подписью (общий регламент)
 /// </summary>
 /// <param name="message"></param>
 /// <param name="document"></param>
 /// <param name="certificate"></param>
 /// <returns></returns>
 public Message CreateSign(Message message, Document document, X509Certificate2 certificate)
 {
     if (message == null) throw new ArgumentNullException("message");
     if (document == null) throw new ArgumentNullException("document");
     if (certificate == null) throw new ArgumentNullException("certificate");
     if (document.Content == null)
         throw new ArgumentException("Содержимое документа не загружено");
     var sign = CryptoApiHelper.Sign(certificate, document.Content, true);
     var signMessage = new Message()
     {
         Id = Guid.NewGuid().ToString(),
         From = CurrentBox,
         Recipients = message.GetRecipientListForSender(CurrentBox),
         Signs = new []
             {
                 new Sign()
                 {
                     DocumentId = document.Id,
                     Raw = sign,
                     Id = Guid.NewGuid().ToString()
                 }
             }
     };
     return signMessage;
 }
Пример #8
0
 public Message CreateServiceDocumentMessage(Message message, Document document, X509Certificate2 certificate2,
                                                     DocumentType documentType, NamedContent generatedNotice)
 {
     var noticeMessage = AddDocumentToNewMessage(
         new Message()
             {
                 Id = Guid.NewGuid().ToString(),
                 From = CurrentBox,
                 Recipients = message.GetRecipientListForSender(CurrentBox),
             },
         new Document()
             {
                 Id = (Guid.NewGuid().ToString()),
                 DocumentType =
                     documentType,
                 ParentDocumentId = document.Id,
                 FileName = generatedNotice.Name,
                 Content = generatedNotice.Content
             },
         CryptoApiHelper.Sign(certificate2,
                              generatedNotice.Content, true));
     return noticeMessage;
 }
Пример #9
0
        /// <summary>
        /// Создать сообщение с СД ИОП (общий регламент)
        /// </summary>
        /// <param name="message"></param>
        /// <param name="document"></param>
        /// <param name="certificate2"></param>
        /// <returns></returns>
        public Message CreateReceipt(Message message, Document document, X509Certificate2 certificate2)
        {
            if (message == null) throw new ArgumentNullException("message");
            if (document == null) throw new ArgumentNullException("document");
            if (certificate2 == null) throw new ArgumentNullException("certificate2");
            var deliveryConfirmation = client.GenerateDeliveryConfirmation(CurrentBox, document.Id);

            return CreateServiceDocumentMessage(message, document, certificate2, DocumentType.ServiceReceipt, deliveryConfirmation);
        }
Пример #10
0
        /// <summary>
        /// Пример авторизации по сертификату
        /// получение данных по ИНН об организации-получателе
        /// отправка документа с подписью сертификатом пользователя
        /// отправка документ без подписания
        /// </summary>
        /// <param name="args"></param>
        private static void Main(string[] args)
        {
            var url = "https://service.synerdocs.ru/exchangeservice.svc";
            var appId = new Guid().ToString();

            var client = new Client(url, false, false, "", "WSHttpsBinding_IExchangeService");

            // сертификат для входа по сертификату и подписания
            var certificate = TryInstallOrGetCertificate();
            if (certificate == null)
                return;

            Console.WriteLine("Успешно получен сертификат с отпечатком: " + certificate.Thumbprint);

            // авторизуемся по сертификату
            if (client.AuthenticateWithCertificate(certificate.Thumbprint, appId))
            {
                Console.WriteLine("Успешная авторизация по сертификату, получен токен:");
                Console.WriteLine(client.Token);
            }
            else
            {
                Console.WriteLine("Ошибка авторизации по сертификату");
            }

            // ИНН организации-получателя
            var inn = "1839839904";
            // не знаем КПП, при пустом значении - должно найти головное подразделение организации
            var kpp = "";

            // поиск организации получателя по атрибутам
            var organizations = client.GetOrganizationListByInnKpp(inn, kpp);
            foreach (var organization in organizations)
                Console.WriteLine(organization.Name);

            // получаем содержимое неформализованного документа из файла на локальном компьютере
            var filesDir = "../../../../..";
            // пример подписи файлов с локального компьютера
            var filePath = filesDir + "/Documents/Untyped 3.txt";
            var filePath2 = filesDir + "/Documents/Untyped 1.png";
            var fileBytes = File.ReadAllBytes(filePath);
            var fileBytes2 = File.ReadAllBytes(filePath2);
            // создание подписей к бинарному содержимому файлов, подписание с помощью выбранного ранее сертификата
            var signature = CryptoApiHelper.Sign(certificate, fileBytes, true);
            var signature2 = CryptoApiHelper.Sign(certificate, fileBytes2, true);

            // получение текущего ящика
            var boxInfo = client.GetBoxes().FirstOrDefault();
            if (boxInfo == null)
            {
                Console.WriteLine("Ошибка при получении ящиков");
                return;
            }
            var currentBox = boxInfo.Address;

            // создание документа
            var document = new Document
            {
                Id = Guid.NewGuid().ToString(),
                DocumentType = DocumentType.Untyped,
                UntypedKind = null,
                FileName = Path.GetFileName(filePath),
                Content = fileBytes,
                Card = null,
                NeedSign = false
            };
            // создание еще одного документа (опционально)
            var document2 = new Document
            {
                Id = Guid.NewGuid().ToString(),
                DocumentType = DocumentType.Untyped,
                UntypedKind = null,
                FileName = Path.GetFileName(filePath2),
                Content = fileBytes2,
                Card = null,
                NeedSign = false
            };

            // создаем сообщение для отправки
            var message = new Message
            {
                // генерируем уникальный идентификатор для сообщения
                Id = Guid.NewGuid().ToString(),
                // указываем свой текущий ящик (ящик отправителя)
                From = currentBox,
                // документы
                Documents = new[]
                {
                    document,
                    document2
                },
                // получатели
                Recipients = organizations.Select(x =>
                    new MessageRecipient
                    {
                        OrganizationBoxId = x.BoxAddress
                    }).ToArray(),
                // прикрепляем подписи
                Signs = new[]
                {
                    new Sign
                    {
                        Id = Guid.NewGuid().ToString(),
                        DocumentId = document.Id,
                        Raw = signature
                    },
                    new Sign
                    {
                        Id = Guid.NewGuid().ToString(),
                        DocumentId = document2.Id,
                        Raw = signature2
                    }
                }
            };
            SentMessage result;
            try
            {
                result = client.SendMessage(message);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Ошибка при отправке документов: " + ex.Message);
                Console.ReadKey();
                return;
            }
            Console.WriteLine("Успешно отправлено исходящее сообщение MessageId = {0}", result.MessageId);

            Console.WriteLine("Для выхода нажмите enter");
            Console.ReadLine();
        }