Example #1
0
        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);
        }