You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

221 lines
8.6 KiB

using Common.Models.RequestResponse;
using Common.Models.SendSMS;
using Common.Utility;
using log4net;
using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Web;
namespace Business.BusinessLogic.SMSApiService
{
public class SMSService : ISMSService
{
private readonly ILog _log = LogManager.GetLogger(typeof(SMSService));
private readonly string _baseUrl;
private readonly string _baseUrlStatus;
private readonly string _userName;
private readonly string _password;
private readonly string _senderId;
private readonly string _langType;
public SMSService()
{
_baseUrl = GetStatic.ReadWebConfig("onewaysmsURL", "");
_baseUrlStatus = GetStatic.ReadWebConfig("onewaysmsURLStatus", "");
_userName = GetStatic.ReadWebConfig("onewaysmsUserName", "");
_password = GetStatic.ReadWebConfig("onewaysmsPassword", "");
_senderId = GetStatic.ReadWebConfig("onewaysmsSenderId", "");
_langType = GetStatic.ReadWebConfig("onewaysmsLangType", "");
}
public TPResponse SMSApiMethod(SMSRequestModel model)
{
TPResponse _tPResponse = new TPResponse() { ResponseCode = "1" };
string _qs = "";
if (model.method.ToLower() == "send")
{
StringBuilder sb = new StringBuilder();
byte[] buf = new byte[1024];
string url = _baseUrl +
"?username=" + _userName + "&password=" + _password + "&option=xml" +
"&number=" + model.MobileNumber + "&message=" + HttpUtility.UrlEncode(model.SMSBody) +
"&orig=" + HttpUtility.UrlEncode(_senderId);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream resStream = response.GetResponseStream();
string tempString = null;
int count = 0;
do
{
count = resStream.Read(buf, 0, buf.Length);
if (count != 0)
{
tempString = Encoding.ASCII.GetString(buf, 0, count);
sb.Append(tempString);
}
}
while (count > 0);
var result = sb.ToString();
if (result.Contains("SUCCESS 722"))
{
_tPResponse.ResponseCode = "0";
_tPResponse.Msg = "SMS Sent Successfully!";
_tPResponse.Extra = result;
}
else
{
_tPResponse.ResponseCode = "1";
_tPResponse.Msg = "SMS Sent Failed!";
_tPResponse.Extra = result;
}
return _tPResponse;
}
else if (model.method.ToLower() == "status")
{
_qs = "?mtid=" + model.MTID;
_tPResponse = CallTPApi(_qs, "get", model.method, _baseUrlStatus);
}
return _tPResponse;
}
public TPResponse CallTPApi(string _apiUrl, string _methodType, string _requestType, string _baseURLAPI)
{
_log.Debug("Calling API for " + _requestType + " with request:" + _apiUrl);
TPResponse _tPResponse = new TPResponse() { ResponseCode = "1" };
using (HttpClient httpClient = new HttpClient())
{
try
{
//var _response = "";
//HttpWebRequest _httpRequest = (HttpWebRequest)WebRequest.Create(_baseURLAPI + _apiUrl);
//_httpRequest.ContentType = "application/json";
//_httpRequest.Method = "GET";
//var _httpResponse = (HttpWebResponse)_httpRequest.GetResponse();
//using (var _streamReader = new StreamReader(_httpResponse.GetResponseStream()))
//{
// _response = _streamReader.ReadToEnd().ToString();
//}
//_log.Debug(_response);
//_tPResponse = ParseResponseMsg(_response, _requestType);
//return _tPResponse;
httpClient.BaseAddress = new Uri(_baseURLAPI);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-formurlencoded"));
short timeOut = Convert.ToInt16(GetStatic.ReadWebConfig("transfast_apiTimeOutInSecond", "100"));
httpClient.Timeout = new TimeSpan(0, 0, timeOut);
HttpResponseMessage resp = new HttpResponseMessage();
if (_methodType.ToLower().Equals("get"))
{
_log.Debug("Initiating the call");
resp = httpClient.GetAsync(_apiUrl).Result;
_log.Debug("Call finished");
}
string result = resp.Content.ReadAsStringAsync().Result;
_log.Debug(resp);
if (resp.IsSuccessStatusCode)
{
_tPResponse = ParseResponseMsg(result, _requestType);
return _tPResponse;
}
else
{
_tPResponse.ResponseCode = "1";
_tPResponse.Msg = "Error sending request!";
return _tPResponse;
}
}
catch (HttpRequestException ex)
{
_tPResponse.ResponseCode = "999";
_tPResponse.Msg = ex.Message;
_tPResponse.Data = ex.Data;
}
};
return _tPResponse;
}
private TPResponse ParseResponseMsg(string result, string requestType)
{
TPResponse _tPResponse = new TPResponse() { ResponseCode = "1" };
long respCode = GetStatic.ParseLong(result);
if (requestType.ToLower() == "send")
{
if (respCode > 0)
{
_tPResponse.ResponseCode = "0";
_tPResponse.Msg = "SMS Sent Successfully!";
_tPResponse.Extra = result;
}
else if (respCode == -100)
{
_tPResponse.ResponseCode = "1";
_tPResponse.Msg = "API Password or Username invalid!";
_tPResponse.Extra = result;
}
else if (respCode == -200)
{
_tPResponse.ResponseCode = "1";
_tPResponse.Msg = "Sendr id is invalid!";
_tPResponse.Extra = result;
}
else if (respCode == -300)
{
_tPResponse.ResponseCode = "1";
_tPResponse.Msg = "Mobile number is invalid!";
_tPResponse.Extra = result;
}
else if (respCode == -400)
{
_tPResponse.ResponseCode = "1";
_tPResponse.Msg = "Language type is invalid!";
_tPResponse.Extra = result;
}
}
else if (requestType.ToLower() == "status")
{
if (respCode == 0)
{
_tPResponse.ResponseCode = "0";
_tPResponse.Msg = "Success receive on mobile handset!";
_tPResponse.Extra = result;
}
else if (respCode == 100)
{
_tPResponse.ResponseCode = "0";
_tPResponse.Msg = "Message delivered to Telco!";
_tPResponse.Extra = result;
}
else if (respCode == -100)
{
_tPResponse.ResponseCode = "1";
_tPResponse.Msg = "mtid invalid/not found! Response Code: " + respCode.ToString();
_tPResponse.Extra = result;
}
else if (respCode == -200)
{
_tPResponse.ResponseCode = "1";
_tPResponse.Msg = "Message sending fail! Response Code: " + respCode.ToString();
_tPResponse.Extra = result;
}
}
return _tPResponse;
}
}
}