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.

232 lines
10 KiB

  1. using Common.Models.Donga;
  2. using Common.Models.RequestResponse;
  3. using Common.Models.Status;
  4. using Common.Models.TxnModel;
  5. using Common.TPService;
  6. using Common.Utility;
  7. using log4net;
  8. using System;
  9. using System.IO;
  10. using System.Net;
  11. namespace Donga.DongaAPIService
  12. {
  13. public class DongaAPI : ITPApiServices
  14. {
  15. private readonly ILog _log = LogManager.GetLogger(typeof(DongaAPI));
  16. protected readonly string _baseUrl;
  17. protected readonly string _userName;
  18. protected readonly string _password;
  19. public DongaAPI()
  20. {
  21. _baseUrl = GetStatic.ReadWebConfig("donga_base_url", "");
  22. _userName = GetStatic.ReadWebConfig("donga_user_name", "");
  23. _password = GetStatic.ReadWebConfig("donga_password", "");
  24. }
  25. public TPResponse GetTPResponse<T>(T model, string MethodName) where T : class
  26. {
  27. switch (MethodName)
  28. {
  29. case "send":
  30. return SendTransaction(model as SendTransaction);
  31. case "status":
  32. return GetStatusDonga(model as GetStatus);
  33. default:
  34. return new TPResponse() { ResponseCode = "1", Msg = "Method Name Not Found !" };
  35. }
  36. }
  37. private TPResponse SendTransaction(SendTransaction sendTransaction)
  38. {
  39. _log.DebugFormat("SendTransaction Method Is Calling On DongaAPI ,Model :", sendTransaction);
  40. TPResponse _response = new TPResponse();
  41. var _requestData = GetRequestData(sendTransaction);
  42. _log.Debug("Donga Request Data :" + _requestData);
  43. _response = GetAPIKey(sendTransaction);
  44. _log.Debug("Donga API Key Response: " + GetStatic.ConvertToJson(_response));
  45. if (_response.ResponseCode == "0" && _response.Extra.Trim().Length.Equals(32))
  46. {
  47. return SendDongaTransaction(_requestData, _response.Extra);
  48. }
  49. else
  50. {
  51. return new TPResponse() { ResponseCode = "1", Msg = "Error while generating token: "+_response.Extra };
  52. }
  53. }
  54. private TPResponse SendDongaTransaction(string _requestData, string _apiKey)
  55. {
  56. TPResponse _response = new TPResponse();
  57. try
  58. {
  59. HttpWebRequest _httpRequest = (HttpWebRequest)WebRequest.Create(_baseUrl + "api/transaction/detaildata/post/" + _userName + "/" + _password + "/" + _apiKey);
  60. _httpRequest.ContentType = "application/json";
  61. _httpRequest.Method = "POST";
  62. using (var _streamWriter = new StreamWriter(_httpRequest.GetRequestStream()))
  63. {
  64. _streamWriter.Write(_requestData);
  65. _streamWriter.Flush();
  66. _streamWriter.Close();
  67. }
  68. var _httpResponse = (HttpWebResponse)_httpRequest.GetResponse();
  69. using (var _streamReader = new StreamReader(_httpResponse.GetResponseStream()))
  70. {
  71. _response.Extra = _streamReader.ReadToEnd().ToString();
  72. }
  73. _httpResponse.Close();
  74. _response = MapResult(_response.Extra);
  75. _log.DebugFormat("SendDongaTransaction Response At DongaAPI : Response ", _response);
  76. }
  77. catch (Exception ex)
  78. {
  79. _response.ResponseCode = "999";
  80. _response.Msg = ex.Message;
  81. }
  82. return _response;
  83. }
  84. private TPResponse GetStatusDonga(GetStatus getStatus)
  85. {
  86. _log.DebugFormat("GetStatusDonga Method Is Colling On DongaAPI , Model :", getStatus);
  87. TPResponse _response = new TPResponse();
  88. DongaStatusSyncResponse _syncStatusResponse = new DongaStatusSyncResponse();
  89. try
  90. {
  91. HttpWebRequest _httpRequest = (HttpWebRequest)WebRequest.Create(_baseUrl + "api/responsetran/" + _userName + "/" + _password + "/" + getStatus.ControlNo);
  92. _httpRequest.ContentType = "application/json";
  93. _httpRequest.Method = "GET";
  94. var _httpResponse = (HttpWebResponse)_httpRequest.GetResponse();
  95. using (var _streamReader = new StreamReader(_httpResponse.GetResponseStream()))
  96. {
  97. string a = _streamReader.ReadToEnd().Replace("[", "").Replace("]", "").ToString();
  98. _syncStatusResponse = GetStatic.ConvertToObject<DongaStatusSyncResponse>(a);
  99. }
  100. _response.ResponseCode = "0";
  101. _response.Msg = "Success";
  102. _response.Id = _syncStatusResponse.TransactionID;
  103. _response.Extra = _syncStatusResponse.PartnerID;
  104. if (_syncStatusResponse.Status != null)
  105. _response.Extra2 = _syncStatusResponse.Status.ToLower().Trim();
  106. _httpResponse.Close();
  107. _log.DebugFormat("GetStatusDonga Response At DongaAPI , Response :", _response);
  108. }
  109. catch (Exception ex)
  110. {
  111. _response.ResponseCode = "999";
  112. _response.Msg = ex.Message.ToString();
  113. }
  114. return _response;
  115. }
  116. #region other methods
  117. private TPResponse GetAPIKey(SendTransaction sendTransaction)
  118. {
  119. TPResponse _response = new TPResponse();
  120. var _contentData = new
  121. {
  122. SumTransaction = 1,
  123. SumAUD = (sendTransaction.Transaction.PCurr.ToLower().Equals("aud")) ? Convert.ToDecimal(sendTransaction.Transaction.PAmt) : 0,
  124. SumCAD = (sendTransaction.Transaction.PCurr.ToLower().Equals("cad")) ? Convert.ToDecimal(sendTransaction.Transaction.PAmt) : 0,
  125. SumEUR = (sendTransaction.Transaction.PCurr.ToLower().Equals("eur")) ? Convert.ToDecimal(sendTransaction.Transaction.PAmt) : 0,
  126. SumGBP = (sendTransaction.Transaction.PCurr.ToLower().Equals("gbp")) ? Convert.ToDecimal(sendTransaction.Transaction.PAmt) : 0,
  127. SumJPY = (sendTransaction.Transaction.PCurr.ToLower().Equals("jpy")) ? Convert.ToDecimal(sendTransaction.Transaction.PAmt) : 0,
  128. SumUSD = (sendTransaction.Transaction.PCurr.ToLower().Equals("usd")) ? Convert.ToDecimal(sendTransaction.Transaction.PAmt) : 0,
  129. SumVND = (sendTransaction.Transaction.PCurr.ToLower().Equals("vnd")) ? Convert.ToDecimal(sendTransaction.Transaction.PAmt) : 0
  130. };
  131. string _jsonData = GetStatic.ConvertToJson(_contentData);
  132. _log.Debug(_jsonData + "; URL: " + _baseUrl + "api/transaction/masterdata/post/" + _userName + "/" + _password + "/" + sendTransaction.SessionId);
  133. try
  134. {
  135. HttpWebRequest _httpRequest = (HttpWebRequest)WebRequest.Create(_baseUrl + "api/transaction/masterdata/post/" + _userName + "/" + _password + "/" + sendTransaction.SessionId);
  136. _httpRequest.ContentType = "application/json";
  137. _httpRequest.Method = "POST";
  138. using (var _streamWriter = new StreamWriter(_httpRequest.GetRequestStream()))
  139. {
  140. _streamWriter.Write(_jsonData);
  141. _streamWriter.Flush();
  142. _streamWriter.Close();
  143. }
  144. var _httpResponse = (HttpWebResponse)_httpRequest.GetResponse();
  145. using (var _streamReader = new StreamReader(_httpResponse.GetResponseStream()))
  146. {
  147. _response.ResponseCode = "0";
  148. _response.Extra = _streamReader.ReadToEnd().ToString();
  149. }
  150. _httpResponse.Close();
  151. }
  152. catch (Exception e)
  153. {
  154. _response.ResponseCode = "999";
  155. _response.Msg = e.Message.ToString();
  156. }
  157. if (!string.IsNullOrEmpty(_response.Msg) && _response.Msg.Trim().Length.Equals(32))
  158. {
  159. _log.ErrorFormat("Error Occured On SendTransaction At DongaAPI Error :", _response);
  160. _response.SetResponse("1", "Invalid Api Key OR Api Key Generation Error!", null);
  161. }
  162. return _response;
  163. }
  164. private string GetRequestData(SendTransaction _requestData)
  165. {
  166. return "[{\"TransactionID\":\"" + _requestData.Transaction.JMEControlNo + "\",\"Sender\":\"" + _requestData.Sender.SFullName + "\",\"Receiver\":\"" + _requestData.Receiver.RFullName + "\"," +
  167. "\"Address\":\"" + _requestData.Receiver.RAdd1 + "\",\"CityCode\":\"" + _requestData.Receiver.RStateId + "\",\"DistrictCode\":\"" + _requestData.Receiver.RCityCode + "\"," +
  168. "\"Amount\":" + _requestData.Transaction.PAmt + ",\"RCurrency\":\"" + _requestData.Transaction.PCurr + "\",\"SCurrency\":\"" + _requestData.Transaction.PCurr + "\"," +
  169. "\"PaymentMode\":\"" + GetPayoutMode(_requestData.Transaction.PaymentType) + "\",\"Phone\":\"" + _requestData.Receiver.RMobile + "\",\"BankAccount\":\"" + _requestData.Receiver.RAccountNo + "\"," +
  170. "\"BankCode\":\"" + _requestData.Agent.PBankId + "\",\"BranchState\":\"" + _requestData.Agent.PBranchCity + "\",\"Note\":\"" + _requestData.Transaction.PayoutMsg + "\"}]";
  171. }
  172. private TPResponse MapResult(string result)
  173. {
  174. TPResponse _response = new TPResponse();
  175. try
  176. {
  177. _response.ResponseCode = result.Substring(0, 1);
  178. _response.Msg = result.Replace(result.Substring(0, 1), "").Trim();
  179. }
  180. catch (Exception ex)
  181. {
  182. _response.ResponseCode = "999";
  183. _response.Msg = "Error Parsing the msg! Error :" + ex.Message;
  184. }
  185. _response.Data = result;
  186. return _response;
  187. }
  188. private string GetPayoutMode(string paymentType)
  189. {
  190. if (paymentType.ToLower().Equals("cash payment"))
  191. return "CP";
  192. else if (paymentType.ToLower().Equals("home delivery"))
  193. return "HD";
  194. else if (paymentType.ToLower().Equals("bank deposit"))
  195. return "TA";
  196. return "";
  197. }
  198. #endregion other methods
  199. }
  200. }