/// <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; }
/// <summary> /// Отправка сообщения /// </summary> /// <param name="message"></param> /// <returns>возвращает результат отправки</returns> public virtual SentMessage SendMessage(Message message) { return CheckAutorizedInvoke(() => client.SendMessage(Token, message)); }
public IAsyncResult BeginSendMessage(Message message, AsyncCallback asyncCallback) { return client.BeginSendMessage(Token, message, asyncCallback, null); }
/// <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); }
/// <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); }
/// <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); }
/// <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; }
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; }
/// <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); }
/// <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(); }