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 { } }
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.Состояние?.Название; } }