using System; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Xml.Linq; namespace ConsoleApplication1 { public class PostaGuvercini { private readonly string Username; private readonly string Password; private readonly TimeSpan ExpireTime; public PostaGuvercini(string username, string password) { Username = username; Password = password; ExpireTime = TimeSpan.FromHours(24); } ////// Tek Mesaj Çok Alıcı /// /// /// ///public IResult SmsInsert_1_N(string[] recepients, string message) { try { var request = WebRequest.CreateHttp("http://www.postaguvercini.com/api_ws/smsservice.asmx"); request.Method = "POST"; request.Host = "www.postaguvercini.com"; request.ContentType = "text/xml; charset=utf-8"; request.Headers.Add("SOAPAction", "http://83.66.137.24/PgApiWs/SmsInsert_1_N"); request.ContentLength = 0; var xeRecepients = new XElement("Recepients"); foreach (var recepient in recepients) { xeRecepients.Add(new XElement("string", recepient)); } XNamespace nsXsd = "http://www.w3.org/2001/XMLSchema"; XNamespace nsXsi = "http://www.w3.org/2001/XMLSchema-instance"; XNamespace nsSoap = "http://schemas.xmlsoap.org/soap/envelope/"; XNamespace nsPg = "http://83.66.137.24/PgApiWs"; var xml = new XDocument( new XDeclaration("1.0", "utf-8", null), new XElement(nsSoap + "Envelope", new XAttribute(XNamespace.Xmlns + "xsi", nsXsi), new XAttribute(XNamespace.Xmlns + "xsd", nsXsd), new XAttribute(XNamespace.Xmlns + "soap", nsSoap), new XElement(nsSoap + "Body", new XElement(nsPg + "SmsInsert_1_N", new XAttribute("xmlns", "http://83.66.137.24/PgApiWs"), new XElement(nsPg + "Username", Username), new XElement(nsPg + "Password", Password), new XElement(nsPg + "SendDate", DateTime.Now), new XElement(nsPg + "ExpireDate", DateTime.Now.Add(ExpireTime)), xeRecepients, new XElement(nsPg + "Message", message) ) ) )); var xmlData = Encoding.UTF8.GetBytes(xml.ToString()); var length = xmlData.Length; request.ContentLength = length; using (var req = request.GetRequestStream()) { req.Write(xmlData, 0, length); } using (var resp = (HttpWebResponse)request.GetResponse()) { var reader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8); var responseString = reader.ReadToEnd(); return new SmsSendResult(true, responseString, "SmsInsert_1_N"); } } catch (WebException webex) { var errResp = webex.Response; using (Stream respStream = errResp.GetResponseStream()) { StreamReader reader = new StreamReader(respStream, Encoding.UTF8); var responseString = reader.ReadToEnd(); return new SmsSendResult(false, responseString, "SmsInsert_1_N"); } } } /// /// Çok Mesaj Çok Alıcı /// /// /// ///public IResult SmsInsert_N_N(string[] recepients, string[] messages) { try { var request = WebRequest.CreateHttp("http://www.postaguvercini.com/api_ws/smsservice.asmx"); request.Method = "POST"; request.Host = "www.postaguvercini.com"; request.ContentType = "text/xml; charset=utf-8"; request.Headers.Add("SOAPAction", "http://83.66.137.24/PgApiWs/SmsInsert_N_N"); request.ContentLength = 0; XNamespace nsXsd = "http://www.w3.org/2001/XMLSchema"; XNamespace nsXsi = "http://www.w3.org/2001/XMLSchema-instance"; XNamespace nsSoap = "http://schemas.xmlsoap.org/soap/envelope/"; XNamespace nsPg = "http://83.66.137.24/PgApiWs"; var xeMessages = new XElement("Messages"); foreach (var message in messages) { xeMessages.Add(new XElement("string", message)); } var xeRecepients = new XElement("Recepients"); foreach (var recepient in recepients) { xeRecepients.Add(new XElement("string", recepient)); } var xml = new XDocument( new XDeclaration("1.0", "utf-8", null), new XElement(nsSoap + "Envelope", new XAttribute(XNamespace.Xmlns + "xsi", nsXsi), new XAttribute(XNamespace.Xmlns + "xsd", nsXsd), new XAttribute(XNamespace.Xmlns + "soap", nsSoap), new XElement(nsSoap + "Body", new XElement(nsPg + "SmsInsert_N_N", new XAttribute("xmlns", "http://83.66.137.24/PgApiWs"), new XElement(nsPg + "Username", Username), new XElement(nsPg + "Password", Password), new XElement(nsPg + "SendDate", DateTime.Now), new XElement(nsPg + "ExpireDate", DateTime.Now.Add(ExpireTime)), xeRecepients, xeMessages ) ) )); var xmlData = Encoding.UTF8.GetBytes(xml.ToString()); var length = xmlData.Length; request.ContentLength = length; using (var req = request.GetRequestStream()) { req.Write(xmlData, 0, length); } using (var resp = (HttpWebResponse)request.GetResponse()) { var reader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8); var responseString = reader.ReadToEnd(); return new SmsSendResult(true, responseString, "SmsInsert_N_N"); } } catch (WebException webex) { var errResp = webex.Response; using (Stream respStream = errResp.GetResponseStream()) { StreamReader reader = new StreamReader(respStream, Encoding.UTF8); var responseString = reader.ReadToEnd(); return new SmsSendResult(false, responseString, "SmsInsert_N_N"); } } } /// /// Kredi sorgulama /// ///public IResult CreditBalance() { try { var request = WebRequest.CreateHttp("http://www.postaguvercini.com/api_ws/smsservice.asmx"); request.Method = "POST"; request.Host = "www.postaguvercini.com"; request.ContentType = "text/xml; charset=utf-8"; request.Headers.Add("SOAPAction", "http://83.66.137.24/PgApiWs/CreditBalance"); request.ContentLength = 0; XNamespace nsXsd = "http://www.w3.org/2001/XMLSchema"; XNamespace nsXsi = "http://www.w3.org/2001/XMLSchema-instance"; XNamespace nsSoap = "http://schemas.xmlsoap.org/soap/envelope/"; XNamespace nsPg = "http://83.66.137.24/PgApiWs"; var xml = new XDocument( new XDeclaration("1.0", "utf-8", null), new XElement(nsSoap + "Envelope", new XAttribute(XNamespace.Xmlns + "xsi", nsXsi), new XAttribute(XNamespace.Xmlns + "xsd", nsXsd), new XAttribute(XNamespace.Xmlns + "soap", nsSoap), new XElement(nsSoap + "Body", new XElement(nsPg + "CreditBalance", new XAttribute("xmlns", "http://83.66.137.24/PgApiWs"), new XElement(nsPg + "Username", Username), new XElement(nsPg + "Password", Password) ) ) )); var xmlData = Encoding.UTF8.GetBytes(xml.ToString()); var length = xmlData.Length; request.ContentLength = length; using (var req = request.GetRequestStream()) { req.Write(xmlData, 0, length); } using (var resp = (HttpWebResponse)request.GetResponse()) { var reader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8); var responseString = reader.ReadToEnd(); return new CreditBalanceResult(true, responseString, "CreditBalance"); } } catch (WebException webex) { var errResp = webex.Response; using (Stream respStream = errResp.GetResponseStream()) { StreamReader reader = new StreamReader(respStream, Encoding.UTF8); var responseString = reader.ReadToEnd(); return new CreditBalanceResult(false, responseString, "CreditBalance"); } } } public IResult SmsStatus(params string[] messageIds) { try { var request = WebRequest.CreateHttp("http://www.postaguvercini.com/api_ws/smsservice.asmx"); request.Method = "POST"; request.Host = "www.postaguvercini.com"; request.ContentType = "text/xml; charset=utf-8"; request.Headers.Add("SOAPAction", "http://83.66.137.24/PgApiWs/SmsStatus"); request.ContentLength = 0; XNamespace nsXsd = "http://www.w3.org/2001/XMLSchema"; XNamespace nsXsi = "http://www.w3.org/2001/XMLSchema-instance"; XNamespace nsSoap = "http://schemas.xmlsoap.org/soap/envelope/"; XNamespace nsPg = "http://83.66.137.24/PgApiWs"; var xeMessageIds = new XElement("MessageIDs"); foreach (var messageId in messageIds) { xeMessageIds.Add(new XElement("string", messageId)); } var xml = new XDocument( new XDeclaration("1.0", "utf-8", null), new XElement(nsSoap + "Envelope", new XAttribute(XNamespace.Xmlns + "xsi", nsXsi), new XAttribute(XNamespace.Xmlns + "xsd", nsXsd), new XAttribute(XNamespace.Xmlns + "soap", nsSoap), new XElement(nsSoap + "Body", new XElement(nsPg + "SmsStatus", new XAttribute("xmlns", "http://83.66.137.24/PgApiWs"), new XElement(nsPg + "Username", Username), new XElement(nsPg + "Password", Password), xeMessageIds ) ) )); var xmlData = Encoding.UTF8.GetBytes(xml.ToString()); var length = xmlData.Length; request.ContentLength = length; using (var req = request.GetRequestStream()) { req.Write(xmlData, 0, length); } using (var resp = (HttpWebResponse)request.GetResponse()) { var reader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8); var responseString = reader.ReadToEnd(); return new SmsSendResult(true, responseString, "SmsStatus"); } } catch (WebException webex) { var errResp = webex.Response; using (Stream respStream = errResp.GetResponseStream()) { StreamReader reader = new StreamReader(respStream, Encoding.UTF8); var responseString = reader.ReadToEnd(); return new SmsSendResult(false, responseString, "SmsStatus"); } } } public IResult SmsSend(string[] receipents, params string[] messages) { if (receipents == null || receipents.Length == 0) { throw new ArgumentNullException("receipents", new Exception("Alıcılar boş gönderilemez")); } if (messages == null || receipents.Length == 0) { throw new ArgumentNullException("messages", new Exception("Boş mesaj gönderilemez")); } if (messages.Length == 1) return SmsInsert_1_N(receipents, messages[0]); else return SmsInsert_N_N(receipents, messages); } public IResult SmsSend(string receipent, params string[] messages) { if (string.IsNullOrWhiteSpace(receipent)) { throw new ArgumentNullException("receipent", new Exception("Alıcı boş gönderilemez")); } var receipents = new string[1] { receipent }; return SmsSend(receipents, messages); } public interface IResult { string OperationName { get; } bool Succeded { get; } T Result { get; } Fault Fault { get; } string ToString(); } public class Fault { public readonly string FaultCode; public readonly string FaultString; public readonly string Detail; public Fault(string faultCode, string faultString, string detail) { FaultCode = faultCode; FaultString = faultString; Detail = detail; } public override string ToString() { return $"HATA! Fault Code: {FaultCode} \n Fault String: {FaultString}\n Detail:{Detail}"; } } public class SmsSendResult : IResult { private readonly string operationName; private readonly bool succeded; private readonly string[] result; private readonly Fault fault; public string OperationName => operationName; public bool Succeded => succeded; public string[] Result => result; public Fault Fault => fault; public SmsSendResult(bool succeded, string responseText, string operationName) { this.operationName = operationName; this.succeded = succeded; this.result = succeded ? ParseSmsInsertResponse(responseText) : null; this.fault = succeded ? null : ParseError(responseText); } public override string ToString() { if (Succeded) { var sb = new StringBuilder(); sb.Append("BAŞARILI! "); foreach (var _result in Result) { sb.AppendLine(_result); } return sb.ToString(); } else return Fault.ToString(); } } public class CreditBalanceResult : IResult { private readonly string operationName; private readonly bool succeded; private readonly int result; private readonly Fault fault; public string OperationName => operationName; public bool Succeded => succeded; public int Result => result; public Fault Fault => fault; public CreditBalanceResult(bool succeded, string responseText, string operationName) { this.operationName = operationName; this.succeded = succeded; this.result = succeded ? ParseCreditBalanceResponse(responseText) : -1; this.fault = succeded ? null : ParseError(responseText); } public override string ToString() { if (Succeded) { var sb = new StringBuilder(); sb.Append("BAŞARILI! Kredi Sorgulama Sonucu: "); sb.Append(Result); return sb.ToString(); } else return Fault.ToString(); } } private static string[] ParseSmsInsertResponse(string responseText) { var xDoc = XDocument.Parse(responseText); var soapBody = (XElement)((XElement)(xDoc.FirstNode)).FirstNode; var soapFault = (XElement)((soapBody)).FirstNode; var soapResponse = (XElement)((soapBody)).FirstNode; var soapResults = (XElement)((soapBody)).FirstNode; var resultCount = soapResults.Elements().Count(); var results = new string[resultCount]; for (int i = 0; i < resultCount; i++) { results[0] = results[i]; } return results; } private static int ParseCreditBalanceResponse(string responseText) { var xDoc = XDocument.Parse(responseText); var soapBody = (XElement)((XElement)(xDoc.FirstNode)).FirstNode; var soapFault = (XElement)((soapBody)).FirstNode; var soapResponse = (XElement)((soapBody)).FirstNode; var soapResults = (XElement)((soapBody)).FirstNode; return Convert.ToInt32(soapResults.Value); } private static Fault ParseError(string responseText) { if (!string.IsNullOrWhiteSpace(responseText)) { var xDoc = XDocument.Parse(responseText); var soapBody = (XElement)((XElement)(xDoc.FirstNode)).FirstNode; var soapFault = (XElement)((soapBody)).FirstNode; var faultCode = string.Empty; var faultString = string.Empty; var detail = string.Empty; foreach (var item in soapFault.Elements()) { switch (item.Name.LocalName) { case "faultcode": faultCode = item?.Value; break; case "faultstring": faultString = item?.Value; break; case "detail": detail = item?.Value; break; } } return new Fault(faultCode, faultString, detail); } return null; } } }
22 Haziran 2018
Posta Güvercini C# Web Servis Tüketimi
Test Edilmemiştir!