예제 #1
0
파일: EDOApi.cs 프로젝트: fazyloff/EdoApi
 public DiadocConnector()
 {
     try
     {
         this.ApiKey = "gradient-c5a5fb07-eafa-495c-9240-557096c92fff";
         this.crypt  = new Diadoc.Api.Cryptography.WinApiCrypt();
         this.api    = new Diadoc.Api.DiadocApi(this.ApiKey, apiUrl, this.crypt);
     }
     catch
     {
     }
 }
예제 #2
0
        private async Task DoAction(string phase, string action, string comment = null)
        {
            var cert   = Settings.Value.GetCert(Settings.Value.SbisCert);
            var parts  = Util.ParseSubject(cert);
            var result = await client.JsonRpc("СБИС.ПодготовитьДействие", new {
                Документ = new {
                    Идентификатор = CurrentItem.Value.Message.Идентификатор,
                    Этап          = new {
                        Название = phase,
                        Действие = new {
                            Название    = action,
                            Комментарий = comment,
                            Сертификат  = new {
                                ФИО       = parts.GetValueOrDefault("SN") + " " + parts.GetValueOrDefault("G"),
                                Должность = parts.GetValueOrDefault("T"),
                                ИНН       = parts.GetValueOrDefault("ИНН")
                            }
                        }
                    }
                }
            });

            var attachments = result["result"]["Этап"][0]["Вложение"].ToObject <Attach[]>();
            var crypt       = new Diadoc.Api.Cryptography.WinApiCrypt();
            var signs       = new List <Attach>();

            foreach (var attachment in attachments)
            {
                var file = await client.GetAsync(attachment.Файл.Ссылка);

                file.EnsureSuccessStatusCode();
                var content = await file.Content.ReadAsByteArrayAsync();

                var signature = await TaskEx.Run(() => crypt.Sign(content, cert.RawData));

                signs.Add(new Attach {
                    Идентификатор = attachment.Идентификатор,
                    Подпись       = new[] { new FileRef(signature) }
                });
            }
            result = await client.JsonRpc("СБИС.ВыполнитьДействие", new {
                Документ = new {
                    Идентификатор = CurrentItem.Value.Message.Идентификатор,
                    Этап          = new {
                        Название = phase,
                        Вложение = signs.ToArray(),
                        Действие = new {
                            Название = action,
                        }
                    }
                }
            });

            var doc = result["result"].ToObject <Doc>();

            foreach (var item in items.Where(x => x.Message.Идентификатор == doc.Идентификатор))
            {
                item.Message.Состояние = doc.Состояние;
                item.Status            = doc.Состояние?.Название;
            }
        }