- Код: Выделить всё
public enum DeliveryStatus
{
New = 0, // новая
Pending = 1, // поставлено в очередь провайдера
Sent = 2, // отправлено абоненту
Delivered = 3, // доставлено абоненту
NotSent = 4, // не отправлено абоненту
Sending = 5, // отправляется у провайдера
NotDelivered = 6, // сообщение отправлено, но не доставлено
}
private DeliveryStatus GetMessageStatusComtube(string messageID, string login, string password)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://api.comtube.ru/scripts/api/sms.php");
request.Method = "POST";
request.UserAgent = "Comtube SMS Client";
request.Accept = "text/html, application/xml;q=0.9, application/xhtml+xml";
SortedDictionary<string, string> param = new SortedDictionary<string, string>();
param.Add("action", "state");
param.Add("uid", messageID);
param.Add("username", login);
string postData = buildUrlParamsWithSignature(param, password);
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded;charset=" + Encoding.UTF8.BodyName;
request.KeepAlive = false;
request.ContentLength = byteArray.Length;
request.SendChunked = false;
request.ServicePoint.Expect100Continue = false;
request.ProtocolVersion = HttpVersion.Version11;
try
{
// Поток для записи
Stream dataStream = request.GetRequestStream();
// Записываем данные
dataStream.Write(byteArray, 0, byteArray.Length);
// закрываем поток
dataStream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// Получаем поток для чтения
dataStream = response.GetResponseStream();
Byte[] read = new Byte[response.ContentLength];
int count = dataStream.Read(read, 0, (int)response.ContentLength);
Encoding encode = System.Text.Encoding.GetEncoding(response.CharacterSet);
String xml = encode.GetString(read);
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
dataStream.Close();
response.Close();
XmlNodeList items = doc.GetElementsByTagName("status");
if (items.Count > 0)
{
switch (items[0].InnerText)
{
case "0":
return DeliveryStatus.NotSent;
case "10":
return DeliveryStatus.Sent;
case "12":
return DeliveryStatus.Delivered;
case "20":
default:
return DeliveryStatus.Pending;
}
}
}
catch (WebException ee)
{
Console.Write(ee.Response);
if (ee.Status == WebExceptionStatus.ProtocolError)
{
Console.WriteLine("Status Code : {0}", ((HttpWebResponse)ee.Response).StatusCode);
Console.WriteLine("Status Description : {0}", ((HttpWebResponse)ee.Response).StatusDescription);
}
}
catch { }
return DeliveryStatus.Pending;
}