public static void PostLargeNonformalized() { // Для использования Диадок требуются: // 1. крипто-API, предоставляемое операционной системой (доступно через класс WinApiCrypt) // 2. экземпляр класса DiadocApi, проксирующий работу с веб-сервисом Диадок var crypt = new WinApiCrypt(); var api = new DiadocApi( DefaultClientId, // идентификатор клиента DefaultApiUrl, // URL веб-сервиса Диадок crypt); // Можно использовать либо аутентификацию по логину/паролю, либо по сертификату var authToken = api.Authenticate(DefaultLogin, DefaultPassword); // Для отправки комплекта документов через Диадок требуется подготовить структуру MessageToPost, // которая и будет содержать отправляемый комплект документов var message = new MessageToPost { // GUID ящика отправителя FromBoxId = DefaultFromBoxId, // GUID ящика получателя ToBoxId = DefaultToBoxId }; // Читаем содержимое отправляемого файла var content = ReadFileContent(FileToSendName); // Загружаем отправляемый файл на "полку" (на сервер временного хранения файлов Диадок) var uploadedFileShelfName = api.UploadFileToShelf(authToken, content); // Для того, чтобы подписать файл, требуется сертификат var certContent = ReadFileContent(FileWithCertName); var cert = new X509Certificate2(certContent); // Подписываем содержимое файла var signature = crypt.Sign(content, cert.RawData); // Формируем структуру для представления неформализованного (с точки зрения Диадока) документа var attachment = new NonformalizedAttachment { Comment = "Комментарий к отправляемому документу", // Комментарий к отправляемому документу FileName = new FileInfo(FileToSendName).Name, // Протокол обмена с Диадок требует наличия имени файла (без пути!) NeedRecipientSignature = false, // Требуется ли подпись получателя DocumentDate = DateTime.Now.ToShortDateString(), // Дата составления документа DocumentNumber = "123", // Номер документа CustomDocumentId = "", // Строковый идентификатор документа (если требуется связать документы в пакете) SignedContent = new SignedContent { NameOnShelf = uploadedFileShelfName, // Имя файла, ранее загруженного на "полку" Signature = signature // Подпись к отправляемому содержимому } }; // Документ подготовлен к отправке. Добавляем его в отправляемое сообщение message.AddAttachment(attachment); // Отправляем подготовленный комплект документов через Диадок var response = api.PostMessage(authToken, message); // При необходимости можно обработать ответ сервера (например, можно получить // и сохранить для последующей обработки идентификатор сообщения) Console.Out.WriteLine("Message was successfully sent."); Console.Out.WriteLine("The message ID is: " + response.MessageId); }
public void Execute(ISession session) { api = new DiadocApi(/*ConfigurationManager.AppSettings["DiadokApi"]*/ "Analit-988b9e85-1b8e-40a9-b6bd-543790d0a7ec", "https://diadoc-api.kontur.ru", new WinApiCrypt()); token = api.Authenticate(ddkConfig.sender_login, ddkConfig.sender_passwd); box = api.GetMyOrganizations(token).Organizations[0].Boxes[0]; signers = new List <Signer>(); var msgs = GetMessages(); for (int i = 0; i < msgs.Item1.Count(); i++) { api.Delete(token, box.BoxId, msgs.Item2[i].MessageId, msgs.Item1[i].EntityId); } var msg = new MessageToPost(); NonformalizedAttachment nfa = new NonformalizedAttachment(); nfa.SignedContent = new SignedContent(); nfa.SignedContent.Content = Encoding.GetEncoding(1251).GetBytes("ТЕСТОВЫЙ НЕФОРМАЛИЗИРОВННЫЙ ДОКУМЕНТ"); nfa.SignedContent.SignWithTestSignature = true; nfa.FileName = "НеформализированныйДокумент.txt"; nfa.NeedRecipientSignature = true; nfa.DocumentDate = DateTime.UtcNow.ToString("dd.MM.yyyy"); nfa.DocumentNumber = DateTime.UtcNow.Millisecond.ToString(); msg.NonformalizedDocuments.Add(nfa); msg.NonformalizedDocuments.Add(nfa); msg.NonformalizedDocuments.Add(nfa); msg.NonformalizedDocuments.Add(nfa); msg.NonformalizedDocuments.Add(nfa); msg.NonformalizedDocuments.Add(nfa); msg.NonformalizedDocuments.Add(nfa); XmlDocumentAttachment sii = new XmlDocumentAttachment(); byte[] content = Encoding.GetEncoding(1251).GetBytes(DiadokFixtureData.InvoiceXml); byte[] sign = null; InvoiceInfo ii = api.ParseInvoiceXml(content); signers.Add(ii.Signer); GeneratedFile iiFile = api.GenerateInvoiceXml(token, ii); sii.SignedContent = new SignedContent(); sii.SignedContent.SignWithTestSignature = true; sii.SignedContent.Content = iiFile.Content; sii.SignedContent.Signature = sign; msg.Invoices.Add(sii); msg.Invoices.Add(sii); msg.Invoices.Add(sii); msg.Invoices.Add(sii); msg.Invoices.Add(sii); msg.Invoices.Add(sii); msg.Invoices.Add(sii); msg.Invoices.Add(sii); XmlDocumentAttachment att12 = new XmlDocumentAttachment(); content = Encoding.GetEncoding(1251).GetBytes(DiadokFixtureData.Torg12Xml); Torg12SellerTitleInfo tsti12 = api.ParseTorg12SellerTitleXml(content); signers.Add(tsti12.Signer); iiFile = api.GenerateTorg12XmlForSeller(token, tsti12, true); att12.SignedContent = new SignedContent(); att12.SignedContent.SignWithTestSignature = true; att12.SignedContent.Content = iiFile.Content; att12.SignedContent.Signature = sign; msg.AddXmlTorg12SellerTitle(att12); msg.AddXmlTorg12SellerTitle(att12); msg.AddXmlTorg12SellerTitle(att12); msg.AddXmlTorg12SellerTitle(att12); msg.AddXmlTorg12SellerTitle(att12); msg.AddXmlTorg12SellerTitle(att12); msg.AddXmlTorg12SellerTitle(att12); msg.AddXmlTorg12SellerTitle(att12); msg.FromBoxId = ddkConfig.sender_boxid; msg.ToBoxId = ddkConfig.reciever_boxid; // пакет из трех api.PostMessage(token, msg); Thread.Sleep(TimeSpan.FromSeconds(3)); msg.NonformalizedDocuments.Clear(); msg.Invoices.Clear(); msg.XmlTorg12SellerTitles.Clear(); // инвойс msg.Invoices.Add(sii); api.PostMessage(token, msg); Thread.Sleep(TimeSpan.FromSeconds(3)); msg.Invoices.Clear(); msg.XmlTorg12SellerTitles.Clear(); // накладная msg.AddXmlTorg12SellerTitle(att12); api.PostMessage(token, msg); }