using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Web; using System.Threading.Tasks; using System.Windows; using System.Windows.Forms; using System.Windows.Threading; using BS.Shared.DataContracts; using Newtonsoft.Json; using MessageBox = System.Windows.MessageBox; namespace BeWo.ownChat { public class OwnChatHelper { public static void OpenOwnChatPdf(string tenant, string apikey, string benutzername, string passwort, string chatcode) { var r = HoleOwnChatPdf(tenant, apikey, benutzername, passwort, chatcode); switch (r) { case 0: // wenn hier dann alles ok break; case 11: MessageBox.Show("Kundennummer unbekannt.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation); break; case 12: MessageBox.Show("Der API-Key ist falsch -> Auth-Error.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation); break; case 13: MessageBox.Show("Es existiert kein API-Key für die angegebene Kundennummer.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation); break; case 40: MessageBox.Show("Vorlage nicht gefunden.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation); break; case 41: MessageBox.Show("Ungültige Custom-Logo-URL.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation); break; case 60: MessageBox.Show("Fehler: \n" + "", "Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation); break; } } private static int HoleOwnChatPdf(string tenant, string apikey, string benutzername, string passwort, string chatcode) { try { #region ServerErmittlung und Link ermittlung string serverUrl = ErmittleServerURL(tenant); if (serverUrl == null) { return 11; } else if (serverUrl.Equals("")) { return 11; } var endurl = serverUrl + "/api/ownchat/createpdfmanual/" + apikey + "/" + tenant; #endregion #region Post Parameter Uebergabe Dictionary postparameter = new Dictionary(); if (!String.IsNullOrEmpty(benutzername)) postparameter.Add("username", benutzername); if (!String.IsNullOrEmpty(passwort)) postparameter.Add("password", passwort); if (!String.IsNullOrEmpty(chatcode)) postparameter.Add("chatcode", chatcode); string postdaten = ""; int i = 0; foreach (var key in postparameter.Keys) { postdaten += HttpUtility.UrlEncode(key) + "=" + HttpUtility.UrlEncode(postparameter[key]) + "&"; } #endregion #region Webrequest Aufbau ink. stream WebRequest requesten = WebRequest.Create(endurl); requesten.Method = "POST"; requesten.ContentType = "application/x-www-form-urlencoded"; byte[] daten = Encoding.ASCII.GetBytes(postdaten); requesten.ContentLength = daten.Length; try { Stream requestStream = requesten.GetRequestStream(); requestStream.Write(daten, 0, daten.Length); requestStream.Close(); var inte = VerarbeiteErhalteneDaten(requesten, chatcode); return inte; } catch (Exception e) { MessageBox.Show("Es konnte keine Verbindung aufgebaut werden.", "Fehler", MessageBoxButton.OK); return 0; } #endregion } catch (Exception e) { return 60; } } public static int VerarbeiteErhalteneDaten(WebRequest requesten, string chatcode) { try { #region Verarbeitung der Erhaltenen Daten using (HttpWebResponse response = (HttpWebResponse) requesten.GetResponse()) { string responseFromServer = ""; using (Stream reqStr2 = response.GetResponseStream()) { byte[] barray = null; byte[] Stringmesage = null; using (var memoryStream = new MemoryStream()) { reqStr2.CopyTo(memoryStream); barray = memoryStream.ToArray(); } if (barray != null) { Stringmesage = barray; responseFromServer = System.Text.Encoding.Default.GetString(Stringmesage); } if (responseFromServer.Contains("PDF")) { SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Title = "Dokument Speichern"; saveFileDialog1.FileName = Path.GetFileName(String.Format("ownChat-Kurzanleitung_{0}.pdf", chatcode)); if (saveFileDialog1.ShowDialog() == DialogResult.OK) { File.WriteAllBytes(saveFileDialog1.FileName, barray); Process.Start(saveFileDialog1.FileName); reqStr2.Close(); } return 0; } else { var jsonDatentyp = JsonConvert.DeserializeObject(responseFromServer); return jsonDatentyp.Result; } } } #endregion } catch (Exception e) { return 60; } } private static string ErmittleServerURL(string tenant) { ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; string url = "https://dict.ownchat.de/api/server/resolve/1/" + tenant;//customerId; //customerid == kundennummer WebRequest request = WebRequest.Create(url); request.Credentials = CredentialCache.DefaultCredentials; WebResponse response = request.GetResponse(); Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); string responseFromServer = reader.ReadToEnd(); dataStream.Dispose(); reader.Dispose(); dataStream.Close(); reader.Close(); var definition = new { status = "", URL = "", SYNCTYPE = "" }; var jsondaten = JsonConvert.DeserializeAnonymousType(responseFromServer, definition); string serverUrl = jsondaten.URL; response.Close(); return serverUrl; } } }