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

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. using Common.Models.RequestResponse;
  2. using Common.Models.SendSMS;
  3. using Common.Utility;
  4. using log4net;
  5. using System;
  6. using System.IO;
  7. using System.Net;
  8. using System.Net.Http;
  9. using System.Net.Http.Headers;
  10. using System.Text;
  11. using System.Web;
  12. namespace Business.BusinessLogic.SMSApiService
  13. {
  14. public class SMSService : ISMSService
  15. {
  16. private readonly ILog _log = LogManager.GetLogger(typeof(SMSService));
  17. private readonly string _baseUrl;
  18. private readonly string _baseUrlStatus;
  19. private readonly string _userName;
  20. private readonly string _password;
  21. private readonly string _senderId;
  22. private readonly string _langType;
  23. public SMSService()
  24. {
  25. _baseUrl = GetStatic.ReadWebConfig("onewaysmsURL", "");
  26. _baseUrlStatus = GetStatic.ReadWebConfig("onewaysmsURLStatus", "");
  27. _userName = GetStatic.ReadWebConfig("onewaysmsUserName", "");
  28. _password = GetStatic.ReadWebConfig("onewaysmsPassword", "");
  29. _senderId = GetStatic.ReadWebConfig("onewaysmsSenderId", "");
  30. _langType = GetStatic.ReadWebConfig("onewaysmsLangType", "");
  31. }
  32. public TPResponse SMSApiMethod(SMSRequestModel model)
  33. {
  34. TPResponse _tPResponse = new TPResponse() { ResponseCode = "1" };
  35. string _qs = "";
  36. if (model.method.ToLower() == "send")
  37. {
  38. StringBuilder sb = new StringBuilder();
  39. byte[] buf = new byte[1024];
  40. string url = _baseUrl +
  41. "?username=" + _userName + "&password=" + _password + "&option=xml" +
  42. "&number=" + model.MobileNumber + "&message=" + HttpUtility.UrlEncode(model.SMSBody) +
  43. "&orig=" + HttpUtility.UrlEncode(_senderId);
  44. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  45. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  46. Stream resStream = response.GetResponseStream();
  47. string tempString = null;
  48. int count = 0;
  49. do
  50. {
  51. count = resStream.Read(buf, 0, buf.Length);
  52. if (count != 0)
  53. {
  54. tempString = Encoding.ASCII.GetString(buf, 0, count);
  55. sb.Append(tempString);
  56. }
  57. }
  58. while (count > 0);
  59. var result = sb.ToString();
  60. if (result.Contains("SUCCESS 722"))
  61. {
  62. _tPResponse.ResponseCode = "0";
  63. _tPResponse.Msg = "SMS Sent Successfully!";
  64. _tPResponse.Extra = result;
  65. }
  66. else
  67. {
  68. _tPResponse.ResponseCode = "1";
  69. _tPResponse.Msg = "SMS Sent Failed!";
  70. _tPResponse.Extra = result;
  71. }
  72. return _tPResponse;
  73. }
  74. else if (model.method.ToLower() == "status")
  75. {
  76. _qs = "?mtid=" + model.MTID;
  77. _tPResponse = CallTPApi(_qs, "get", model.method, _baseUrlStatus);
  78. }
  79. return _tPResponse;
  80. }
  81. public TPResponse CallTPApi(string _apiUrl, string _methodType, string _requestType, string _baseURLAPI)
  82. {
  83. _log.Debug("Calling API for " + _requestType + " with request:" + _apiUrl);
  84. TPResponse _tPResponse = new TPResponse() { ResponseCode = "1" };
  85. using (HttpClient httpClient = new HttpClient())
  86. {
  87. try
  88. {
  89. //var _response = "";
  90. //HttpWebRequest _httpRequest = (HttpWebRequest)WebRequest.Create(_baseURLAPI + _apiUrl);
  91. //_httpRequest.ContentType = "application/json";
  92. //_httpRequest.Method = "GET";
  93. //var _httpResponse = (HttpWebResponse)_httpRequest.GetResponse();
  94. //using (var _streamReader = new StreamReader(_httpResponse.GetResponseStream()))
  95. //{
  96. // _response = _streamReader.ReadToEnd().ToString();
  97. //}
  98. //_log.Debug(_response);
  99. //_tPResponse = ParseResponseMsg(_response, _requestType);
  100. //return _tPResponse;
  101. httpClient.BaseAddress = new Uri(_baseURLAPI);
  102. httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-formurlencoded"));
  103. short timeOut = Convert.ToInt16(GetStatic.ReadWebConfig("transfast_apiTimeOutInSecond", "100"));
  104. httpClient.Timeout = new TimeSpan(0, 0, timeOut);
  105. HttpResponseMessage resp = new HttpResponseMessage();
  106. if (_methodType.ToLower().Equals("get"))
  107. {
  108. _log.Debug("Initiating the call");
  109. resp = httpClient.GetAsync(_apiUrl).Result;
  110. _log.Debug("Call finished");
  111. }
  112. string result = resp.Content.ReadAsStringAsync().Result;
  113. _log.Debug(resp);
  114. if (resp.IsSuccessStatusCode)
  115. {
  116. _tPResponse = ParseResponseMsg(result, _requestType);
  117. return _tPResponse;
  118. }
  119. else
  120. {
  121. _tPResponse.ResponseCode = "1";
  122. _tPResponse.Msg = "Error sending request!";
  123. return _tPResponse;
  124. }
  125. }
  126. catch (HttpRequestException ex)
  127. {
  128. _tPResponse.ResponseCode = "999";
  129. _tPResponse.Msg = ex.Message;
  130. _tPResponse.Data = ex.Data;
  131. }
  132. };
  133. return _tPResponse;
  134. }
  135. private TPResponse ParseResponseMsg(string result, string requestType)
  136. {
  137. TPResponse _tPResponse = new TPResponse() { ResponseCode = "1" };
  138. long respCode = GetStatic.ParseLong(result);
  139. if (requestType.ToLower() == "send")
  140. {
  141. if (respCode > 0)
  142. {
  143. _tPResponse.ResponseCode = "0";
  144. _tPResponse.Msg = "SMS Sent Successfully!";
  145. _tPResponse.Extra = result;
  146. }
  147. else if (respCode == -100)
  148. {
  149. _tPResponse.ResponseCode = "1";
  150. _tPResponse.Msg = "API Password or Username invalid!";
  151. _tPResponse.Extra = result;
  152. }
  153. else if (respCode == -200)
  154. {
  155. _tPResponse.ResponseCode = "1";
  156. _tPResponse.Msg = "Sendr id is invalid!";
  157. _tPResponse.Extra = result;
  158. }
  159. else if (respCode == -300)
  160. {
  161. _tPResponse.ResponseCode = "1";
  162. _tPResponse.Msg = "Mobile number is invalid!";
  163. _tPResponse.Extra = result;
  164. }
  165. else if (respCode == -400)
  166. {
  167. _tPResponse.ResponseCode = "1";
  168. _tPResponse.Msg = "Language type is invalid!";
  169. _tPResponse.Extra = result;
  170. }
  171. }
  172. else if (requestType.ToLower() == "status")
  173. {
  174. if (respCode == 0)
  175. {
  176. _tPResponse.ResponseCode = "0";
  177. _tPResponse.Msg = "Success receive on mobile handset!";
  178. _tPResponse.Extra = result;
  179. }
  180. else if (respCode == 100)
  181. {
  182. _tPResponse.ResponseCode = "0";
  183. _tPResponse.Msg = "Message delivered to Telco!";
  184. _tPResponse.Extra = result;
  185. }
  186. else if (respCode == -100)
  187. {
  188. _tPResponse.ResponseCode = "1";
  189. _tPResponse.Msg = "mtid invalid/not found! Response Code: " + respCode.ToString();
  190. _tPResponse.Extra = result;
  191. }
  192. else if (respCode == -200)
  193. {
  194. _tPResponse.ResponseCode = "1";
  195. _tPResponse.Msg = "Message sending fail! Response Code: " + respCode.ToString();
  196. _tPResponse.Extra = result;
  197. }
  198. }
  199. return _tPResponse;
  200. }
  201. }
  202. }