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!