public Authenticate ( string login, string password, string applicationId = null ) : bool | ||
login | string | логин |
password | string | пароль |
applicationId | string | |
return | bool |
private static void Main(string[] args) { // публичный адрес подключения к SOAP сервису var url = "https://service.synerdocs.ru/exchangeservice.svc"; // необязательный параметр - идентификатор клиентского приложения, // может использоваться при авторизации для различения подключений с разных клиентов var appId = new Guid().ToString(); var login = "******"; var password = "******"; var client = new Client(url, false, false, "", "WSHttpsBinding_IExchangeService"); // авторизуемся по логину и паролю, получаем токен if (client.Authenticate(login, password, appId)) { Console.WriteLine("Успешная авторизация по логину и паролю, получен токен:"); Console.WriteLine(client.Token); } else { Console.WriteLine("Ошибка авторизации, неверный логин или пароль?"); } var filesDir = "../../../../.."; // путь до файла сертификата БЕЗ закртытого ключа var certificatePath = filesDir + "/Certificates/certificate.crt"; if (!File.Exists(certificatePath)) { Console.WriteLine("Файл сертификата не был найден по пути: \n {0} \n. " + "Для работы необходимо наличие файла сертификата по указанному пути.\n" + "Для получения сертификата обратитесь в техническую поддержку", certificatePath); Console.ReadLine(); return; } // бинарное содержимое сертификата var certificateBytes = File.ReadAllBytes(certificatePath); // получим сертификат для входа по сертификату БЕЗ возможности подписания, т.к. в certificate при таком способе // фактически - это структура данных с отобржаением свойств сертификата // ! для создания подписей необходимо получить сертификат из локального хранилища по другому (см. Samples.SendDocument) var certificate = new X509Certificate2(certificateBytes); // авторизуемся по сертификату if (client.AuthenticateWithCertificate(certificate.Thumbprint, appId)) { Console.WriteLine("Успешная авторизация по сертификату, получен токен:"); Console.WriteLine(client.Token); } else { Console.WriteLine("Ошибка авторизации по сертификату"); } Console.WriteLine("Для выхода нажмите enter"); Console.ReadLine(); }
private static void Main(string[] args) { var url = "https://service.synerdocs.ru/exchangeservice.svc"; var appId = new Guid().ToString(); var login = "******"; var password = "******"; var client = new Client(url, false, false, "", "WSHttpsBinding_IExchangeService"); // авторизуемся по логину и паролю, получаем токен if (client.Authenticate(login, password, appId)) { Console.WriteLine("Успешная авторизация по логину и паролю, получен токен:"); Console.WriteLine(client.Token); } else { Console.WriteLine("Ошибка авторизации, неверный логин или пароль?"); } var boxInfo = client.GetBoxes().FirstOrDefault(); if (boxInfo == null) { Console.WriteLine("Ошибка при получении ящиков"); return; } // текущий ящик == наш ящик var currentBox = boxInfo.Address; Console.WriteLine(currentBox); // получаем список исходящих документов var docs = client.GetDocumentList(new DocumentListOptions { // ! для того, чтобы выбрать входящие документы, необходимо указать в поле BoxTo - наш ящик BoxTo = null, // отправленных от нашего ящика BoxFrom = currentBox, // начать с этого индекса для постраничной выборки элементов First = 0, // кол-во элементов на странице Max = 10 }); Console.WriteLine(docs.Total); foreach (var doc in docs.Items) Console.WriteLine(doc.Name); Console.WriteLine("Для выхода нажмите enter"); Console.ReadLine(); }
/// <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 login = "******"; var password = "******"; if (client.Authenticate(login, password)) { Console.WriteLine("Успешная авторизация, получен токен:"); Console.WriteLine(client.Token); } else { Console.WriteLine("Ошибка авторизации"); Console.ReadKey(); return; } // получение текущего ящика var currentBoxInfo = client.GetBoxes().FirstOrDefault(); if (currentBoxInfo == null) { Console.WriteLine("Ошибка при получении ящиков"); return; } // выбор текущего ящика - от него будем отправлять документы // в простом случае - у пользователя доступен только один ящик // а если пользователь состоит в нескольких организациях - ящиков может быть несколько var currentBox = currentBoxInfo.Address; // ранее сохраненный или полученный ИД документа внутри сообщения, доступного для текущего авторизованного пользователя: // ИД документа - может быть и в формате "50008423799c4c82944b5b82c38be02e" var documentId = "50008423-799c-4c82-944b-5b82c38be02e"; try { // получение тела (бинарного содержимого) документа var documentContent = client.GetDocumentContent(currentBox, documentId); Console.WriteLine("Получено содержимое документа NBytes=" + documentContent.Length); // запрос информации о документе с указаним того, какую информацию необходимо получить var docInfo = client.GetFullDocumentInfo(currentBox, documentId, new FullDocumentInfoRequestParams { GetCard = true, GetContent = false, GetRelatedDocuments = true, GetServiceDocuments = true, GetSigns = true }); if (docInfo != null) { Console.WriteLine("Получена информация о документе"); // получении информации о сообщении документооборота, в которое входит документ var messageId = docInfo.MessageId; var message = client.GetMessage(currentBox, messageId); if (message != null) Console.WriteLine("Получена информации о сообщении документооборота"); } // получение полной информации о документе включая информацию документооборотам и вхождениям, // с указаним того, какую информацию необходимо получить // результат метода дублирует информацию, которую можно получать из других методов API // например информацию о подписях и т.д. var flowDocumentInfo = client.GetFlowDocumentInfo(currentBox, documentId, new FlowDocumentInfoRequestParams { GetSigns = true, GetServiceDocuments = true, GetRelatedDocuments = true, FlowResult = DocumentFlowResultMode.FullInfo }); if (flowDocumentInfo != null) Console.WriteLine("Получена информация о документе с докуметооборотами"); } catch (Exception ex) { Console.WriteLine("Произошла ошибка" + ex.GetType() + " " + ex.Message); Console.ReadKey(); return; } Console.WriteLine("Для выхода нажмите enter"); Console.ReadLine(); }
/// <summary> /// Пример авторизации по сертификату /// получение данных по ИНН об организации-получателе /// отправка документа с подписью сертификатом пользователя /// отправка документов без подписания /// /// отправка идет так: /// /// сообщение1 - получателю1 без указания подразления /// документ1 /// документ2 /// </summary> /// <param name="args"></param> private static void Main(string[] args) { var url = "https://service.synerdocs.ru/exchangeservice.svc"; var client = new Client(url, false, false, "", "WSHttpsBinding_IExchangeService"); // авторизация по логину и паролю (тут возможно использовать также // авторизацию по сертификату при необходимости) var login = "******"; var password = "******"; if (client.Authenticate(login, password)) { Console.WriteLine("Успешная авторизация, получен токен:"); Console.WriteLine(client.Token); } else { Console.WriteLine("Ошибка авторизации"); Console.ReadKey(); return; } // получение текущего ящика var currentBoxInfo = client.GetBoxes().FirstOrDefault(); if (currentBoxInfo == null) { Console.WriteLine("Ошибка при получении ящиков"); return; } // выбор текущего ящика - от него будем отправлять документы // в простом случае - у пользователя доступен только один ящик // а если пользователь состоит в нескольких организациях - ящиков может быть несколько var currentBox = currentBoxInfo.Address; // ИНН организации-получателя var inn = "1839839970"; // пусть не знаем КПП, при пустом значении - должно автоматически быть получено головное // при получении списка организации var kpp = ""; // поиск организации получателя по атрибутам var organizations = client.GetOrganizationListByInnKpp(inn, kpp); // отладочный вывод некоторой информации о найденных организациях Console.WriteLine("Организации - получатели:"); foreach (var organization in organizations) Console.WriteLine(organization.Name); // создание списка получателей документов в сообщении var messageRecipients = organizations.Select(x => new MessageRecipient { // ящик получателя, при этом автоматически будет выбрано головное подразделение, // т.к. явно не указали подразделение OrganizationBoxId = x.BoxAddress }).ToList(); // добавление еще одного получателя: // выбор по определенному КПП подразделения организации - получателя var moreRecipientKpp = "243456789"; var moreRecipient = client.GetOrganizationByInnKpp("1839840035", null); // вывод некоторой инфомрации о найденном получателе: Console.WriteLine("Организация - дополнительный получатель:"); Console.WriteLine(moreRecipient.Name); // получим все подразделения организации и выберем нужное по КПП // в параметр метода передается текущий выбранный ящик var departments = client.GetOrganizationStructure(currentBox, moreRecipient.OrganizationId); var moreRecipientDepartment = departments.FirstOrDefault(x => x.Kpp == moreRecipientKpp); if (moreRecipientDepartment == null) { Console.WriteLine("Не удалось найти подразделение организации - дополительного получателя по КПП - " + moreRecipientKpp); return; } // ! т.к. Отправка документов без подписи нескольким контрагентам невозможна, // поэтому каждый из списков получателей содержим только одного получателя // Но например при отправке документов с подписью возможно отправлять документы сразу нескольких получателям // Пример указания определенного подразделения организации - получателя: // добавим полученную информацию о подразделении получателя в нужный список получателей var messageRecipientsWithDepartments = new List<MessageRecipient> { new MessageRecipient { // ящик организации - получателя OrganizationBoxId = moreRecipient.BoxAddress, // ИД подразделения организации - получателя (необязательный параметр) DepartmentId = moreRecipientDepartment.Id } }; // содержимое неформализованного документа из файла на локальном компьютере var filesDir = "../../../../.."; var filePath = filesDir + "/Documents/Untyped 3.txt"; var fileBytes = File.ReadAllBytes(filePath); // Пример создание документов: // созданный объект - документ можно использовать при отправке в сообщениях // только 1 раз, т.к. поля должны быть уникальными var document1 = new Document { Id = Guid.NewGuid().ToString(), DocumentType = DocumentType.Untyped, UntypedKind = null, FileName = "Отправка без подписи - первый документ1 - " + Path.GetFileName(filePath), Content = fileBytes, Card = null, NeedSign = false }; // создание 2го документа var document2 = new Document { Id = Guid.NewGuid().ToString(), DocumentType = DocumentType.Untyped, UntypedKind = null, FileName = "Отправка без подписи - второй документ2 - " + Path.GetFileName(filePath), Content = fileBytes, Card = null, NeedSign = false }; // создаем сообщение для отправки var unsignedMessage = new UnsignedMessage { From = currentBox, // документы в сообщение Documents = new[] { document1, document2 }, // получатели Recipients = messageRecipients.ToArray() }; // создаем сообщение для отправки по второму списку получателей - для примера c указанием подразделений // создание 3го документа var document3 = new Document { // для исключения дублирования ID документов - всегда необходимо создание уникальных идентификаторов документов Id = Guid.NewGuid().ToString(), DocumentType = DocumentType.Untyped, UntypedKind = null, FileName = "Отправка без подписи - первый документ3 - " + Path.GetFileName(filePath), Content = fileBytes, Card = null, NeedSign = false }; // создание 4го документа var document4 = new Document { Id = Guid.NewGuid().ToString(), DocumentType = DocumentType.Untyped, UntypedKind = null, FileName = "Отправка без подписи - второй документ4 - " + Path.GetFileName(filePath), Content = fileBytes, Card = null, NeedSign = false }; // создание 2го сообщения var unsignedMessage2 = new UnsignedMessage { From = currentBox, // документы в сообщение Documents = new[] { document3, document4 }, // получатели Recipients = messageRecipientsWithDepartments.ToArray() }; // пример отправки двух сообщений с разными наборами получателей // отправляем сообщение 1 SentMessage result1; try { result1 = client.SendUnsignedMessage(unsignedMessage); Console.WriteLine("Успешно отправлено исходящее сообщение с документами без подписи 1"); } catch (Exception ex) { Console.WriteLine("Ошибка при отправке сообщения 1" + ex.Message); Console.ReadKey(); return; } // отправляем сообщение 2 SentMessage result2; try { result2 = client.SendUnsignedMessage(unsignedMessage2); Console.WriteLine("Успешно отправлено исходящее сообщение с документами без подписи 2"); } catch (Exception ex) { Console.WriteLine("Ошибка при отправке сообщения 2" + ex.Message); Console.ReadKey(); return; } Console.WriteLine("Успешно отправлено исходящее сообщения"); Console.WriteLine("Для выхода нажмите enter"); Console.ReadLine(); }
/// <summary> /// Авторизоваться /// </summary> /// <param name="client"></param> private void Auth(Client client) { var byCertificate = new UserInput.Option("1", "По сертификату", true); var byPassword = new UserInput.Option("2", "По паролю", false); var register = new UserInput.Option("3", "Зарегистрироваться в сервисе", false); while (true) { var authOption = UserInput.ChooseOption("Выберите способ аутентификации", new[] { byCertificate, byPassword, register }); if (authOption == byPassword) { var login = UserInput.ReadParameter("имя пользователя"); var password = UserInput.ReadParameter("пароль"); try { if (client.Authenticate(login, password, _applicationId)) { UserInput.Success("Аутентификация прошла успешно"); _context.Login = login; return; } UserInput.Error("Неправильный логин или пароль"); } catch (Exception ex) { UserInput.Error("Произошла неожиданная ошибка"); UserInput.Error(ex.ToString()); } } else if (authOption == byCertificate) { try { // выбор сертификата по списку ChooseCertificate(); if (client.AuthenticateWithCertificate(_context.Certificate.Thumbprint, _applicationId)) { UserInput.Success("Аутентификация прошла успешно"); return; } UserInput.Error("Аутентификация не пройдена"); } catch (Win32Exception win32Ex) { UserInput.Error("Произошла ошибка при попытке расшифровать токен"); UserInput.Error(win32Ex.ToString()); } catch (Exception ex) { UserInput.Error("Произошла неожиданная ошибка"); UserInput.Error(ex.ToString()); } } else { try { var registerResult = Register(); if (registerResult.Success) { client.Authenticate(registerResult.RegisterModel.Login, registerResult.RegisterModel.Password, _applicationId); } return; } catch (Exception ex) { UserInput.Error("Произошла неожиданная ошибка"); UserInput.Error(ex.ToString()); } } } }