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.

338 lines
15 KiB

  1. using Common.Models.Agent;
  2. using Common.Models.Bank;
  3. using Common.Models.RequestResponse;
  4. using Common.Models.Status;
  5. using Common.Models.TxnModel;
  6. using Common.TPService;
  7. using Common.Utility;
  8. using JMENepal.com.jmenepal;
  9. using JMENepal.Model;
  10. using log4net;
  11. using Newtonsoft.Json;
  12. using System;
  13. namespace JMENepal.JMENepalAPIService
  14. {
  15. public class JMENepalAPI : ITPApiServices
  16. {
  17. private readonly ILog _log = LogManager.GetLogger(typeof(JMENepalAPI));
  18. protected readonly iRemitService _jmeService = new iRemitService();
  19. public TPResponse GetTPResponse<T>(T model, string MethodName) where T : class
  20. {
  21. switch (MethodName)
  22. {
  23. case "send":
  24. return SendTransaction(model as SendTransaction);
  25. case "bankList":
  26. return GetBankList(model as BankRequest);
  27. case "agentList":
  28. return GetAgentList(model as AgentRequest);
  29. case "status":
  30. return GetTxnStatus(model as GetStatus);
  31. case "cancelSend":
  32. return CancelTransaction(model as CancelTxn);
  33. case "amendmentRequest":
  34. return AmendmentRequest(model as TxnAmendment);
  35. default:
  36. return new TPResponse() { ResponseCode = "1", Msg = "Method Name Not Found !" };
  37. }
  38. }
  39. private TPResponse SendTransaction(SendTransaction sendTransaction)
  40. {
  41. JMESendTxn cTI = SendTransactionValidation(sendTransaction);
  42. TPResponse _response = new CustomModelValidaton().IsModelValid(cTI);
  43. if (_response == null)
  44. {
  45. _response = new TPResponse();
  46. string signature = GetSignatureIdForSendTxn(cTI);
  47. cTI.SIGNATURE = signature;
  48. _log.Info("SendTransaction | REQUEST :" + JsonConvert.SerializeObject(cTI));
  49. Return_CreateTXN _jmeResponse = _jmeService.SendTransaction
  50. (
  51. cTI.AGENT_CODE, cTI.USER_ID, cTI.AGENT_SESSION_ID, cTI.AGENT_TXNID, cTI.LOCATION_ID, cTI.SENDER_NAME, cTI.SENDER_ADDRESS
  52. , cTI.SENDER_MOBILE, cTI.SENDER_CITY, cTI.SENDER_COUNTRY, cTI.SENDER_ID_TYPE, cTI.SENDER_ID_NUMBER, cTI.SENDER_ID_ISSUE_DATE
  53. , cTI.SENDER_ID_EXPIRE_DATE, cTI.SENDER_DATE_OF_BIRTH, cTI.RECEIVER_NAME, cTI.RECEIVER_ADDRESS, cTI.RECEIVER_CONTACT_NUMBER
  54. , cTI.RECEIVER_CITY, cTI.RECEIVER_COUNTRY, cTI.TRANSFERAMOUNT, cTI.PAYMENTMODE, cTI.BANKID, cTI.BANK_NAME, cTI.BANK_BRANCH_NAME
  55. , cTI.BANK_ACCOUNT_NUMBER, cTI.CAL_BY, cTI.AUTHORIZED_REQUIRED, cTI.OURSERVICECHARGE, cTI.TRANSACTION_EXCHANGERATE
  56. , cTI.SETTLEMENT_DOLLARRATE, cTI.REPRESENTIVE_NAME, cTI.SOURCE_OF_FUND, cTI.PURPOSE_OF_REMITTANCE, cTI.SENDER_OCCUPATION
  57. , cTI.SENDER_NATIONALITY, cTI.RELATIONSHIP_TO_BENEFICIARY, cTI.PARTNER_USERID, "", signature
  58. );
  59. _log.Info("SendTransaction | RESPONSE :" + JsonConvert.SerializeObject(_jmeResponse).ToString());
  60. _response.ResponseCode = _jmeResponse.CODE;
  61. if (!_jmeResponse.CODE.Equals("0"))
  62. {
  63. _response.ResponseCode = "1";
  64. }
  65. _response.Msg = _jmeResponse.MESSAGE;
  66. _response.Id = _jmeResponse.PINNO;
  67. _response.Data = _jmeResponse;
  68. }
  69. else
  70. {
  71. _log.Info("SendTransaction | MODEL VALIDATION FAILED :" + JsonConvert.SerializeObject(cTI).ToString());
  72. }
  73. return _response;
  74. }
  75. private TPResponse GetAgentList(AgentRequest aR)
  76. {
  77. JMEAgent jMEAgent = JMEAgentModelConvert(aR);
  78. TPResponse _response = new CustomModelValidaton().IsModelValid(jMEAgent);
  79. if (_response == null)
  80. {
  81. _response = new TPResponse();
  82. string signature = GetStatic.ComputeSha256Hash(jMEAgent.AGENT_CODE + jMEAgent.USER_ID + jMEAgent.AGENT_SESSION_ID + jMEAgent.PAYMENTTYPE + jMEAgent.PAYOUT_COUNTRY + jMEAgent.Ext_Bank_ID + jMEAgent.Password);
  83. Return_AGENTLIST[] _agentList = _jmeService.GetAgentList(jMEAgent.AGENT_CODE, jMEAgent.USER_ID, jMEAgent.AGENT_SESSION_ID, jMEAgent.PAYMENTTYPE, jMEAgent.PAYOUT_COUNTRY, jMEAgent.Ext_Bank_ID, signature);
  84. _response.ResponseCode = "0";
  85. _response.Data = _agentList;
  86. }
  87. else
  88. {
  89. _log.Info("GetAgentList | MODEL VALIDATION FAILED :" + JsonConvert.SerializeObject(jMEAgent).ToString());
  90. }
  91. return _response;
  92. }
  93. private TPResponse GetBankList(BankRequest bR)
  94. {
  95. JMEBank jmeStatus = JMEBankModelConvert(bR);
  96. TPResponse _response = new CustomModelValidaton().IsModelValid(jmeStatus);
  97. if (_response == null)
  98. {
  99. _response = new TPResponse();
  100. string signature = GetStatic.ComputeSha256Hash(jmeStatus.AGENT_CODE + jmeStatus.USER_ID + jmeStatus.AGENT_SESSION_ID + jmeStatus.Password);
  101. Return_AGENTLIST[] _agentList = _jmeService.GetBankList(jmeStatus.AGENT_CODE, jmeStatus.USER_ID, jmeStatus.AGENT_SESSION_ID, signature);
  102. _response.ResponseCode = "0";
  103. _response.Data = _agentList;
  104. }
  105. else
  106. {
  107. _log.Info("GetBankList | MODEL VALIDATION FAILED :" + JsonConvert.SerializeObject(jmeStatus).ToString());
  108. }
  109. return _response;
  110. }
  111. private TPResponse GetTxnStatus(GetStatus gS)
  112. {
  113. JMETxStatus jmeStatus = JMETxStatusModelConvert(gS);
  114. TPResponse _response = new CustomModelValidaton().IsModelValid(jmeStatus);
  115. if (_response == null)
  116. {
  117. _response = new TPResponse();
  118. string signature = GetStatic.ComputeSha256Hash(jmeStatus.AGENT_CODE + jmeStatus.USER_ID + jmeStatus.PINNO + jmeStatus.AGENT_SESSION_ID + jmeStatus.AGENT_TXNID + jmeStatus.Password);
  119. _log.Info("GetTxnStatus | REQUEST :" + JsonConvert.SerializeObject(jmeStatus).ToString());
  120. Return_TXNStatus _statusResponse = _jmeService.QueryTXNStatus(jmeStatus.AGENT_CODE, jmeStatus.USER_ID, jmeStatus.PINNO, jmeStatus.AGENT_SESSION_ID, jmeStatus.AGENT_TXNID, signature);
  121. _log.Info("GetTxnStatus | RESPONSE :" + JsonConvert.SerializeObject(_statusResponse).ToString());
  122. _response.ResponseCode = _statusResponse.CODE;
  123. if (!_statusResponse.CODE.Equals("0"))
  124. {
  125. _response.ResponseCode = "1";
  126. }
  127. _response.Msg = _statusResponse.MESSAGE;
  128. _response.Id = _statusResponse.AGENT_TXNID;
  129. _response.Extra = _statusResponse.PINNO;
  130. if (_statusResponse.STATUS != null)
  131. {
  132. _response.Extra2 = _statusResponse.STATUS;
  133. }
  134. _response.Data = _statusResponse;
  135. }
  136. else
  137. {
  138. _log.Info("GetTxnStatus | MODEL VALIDATION FAILED :" + JsonConvert.SerializeObject(jmeStatus).ToString());
  139. }
  140. return _response;
  141. }
  142. private TPResponse CancelTransaction(CancelTxn cT)
  143. {
  144. JMECancelTransaction jC = JMECancelTransactionModelConvert(cT);
  145. TPResponse _response = new CustomModelValidaton().IsModelValid(jC);
  146. if (_response == null)
  147. {
  148. _response = new TPResponse();
  149. string signature = GetStatic.ComputeSha256Hash(jC.AGENT_CODE + jC.USER_ID + jC.PINNO + jC.AGENT_SESSION_ID + jC.CANCEL_REASON + jC.Password);
  150. _log.Info("CancelTransaction | REQUEST :" + JsonConvert.SerializeObject(jC).ToString());
  151. Return_TXNCancel _cancelTxnResponse = _jmeService.CancelTransaction(jC.AGENT_CODE, jC.USER_ID, jC.PINNO, jC.AGENT_SESSION_ID, jC.CANCEL_REASON, signature);
  152. _log.Info("CancelTransaction | RESPONSE :" + JsonConvert.SerializeObject(_cancelTxnResponse).ToString());
  153. _response.ResponseCode = _cancelTxnResponse.CODE;
  154. if (!_cancelTxnResponse.CODE.Equals("0"))
  155. {
  156. _response.ResponseCode = "1";
  157. }
  158. _response.Msg = _cancelTxnResponse.MESSAGE;
  159. _response.Id = _cancelTxnResponse.PINNO;
  160. _response.Extra = _cancelTxnResponse.PINNO;
  161. _response.Data = _cancelTxnResponse;
  162. }
  163. else
  164. {
  165. _log.Info("CancelTransaction | MODEL VALIDATION FAILED :" + JsonConvert.SerializeObject(jC).ToString());
  166. }
  167. return _response;
  168. }
  169. private TPResponse AmendmentRequest(TxnAmendment tA)
  170. {
  171. JMEAmendment jA = JMEAmendmentModelConvert(tA);
  172. TPResponse _response = new CustomModelValidaton().IsModelValid(jA);
  173. if (_response == null)
  174. {
  175. _response = new TPResponse();
  176. string signature = GetStatic.ComputeSha256Hash(jA.AGENT_CODE + jA.USER_ID + jA.AGENT_SESSION_ID + jA.PINNO
  177. + jA.AMENDMENT_FIELD + jA.AMENDMENT_VALUE + jA.Password);
  178. _log.Info("AmendmentRequest | REQUEST :" + JsonConvert.SerializeObject(jA).ToString());
  179. Return_TXNAMEND _txnAmendmentResponse = _jmeService.AmendmentRequest(jA.AGENT_CODE, jA.USER_ID, jA.AGENT_SESSION_ID, jA.PINNO
  180. , jA.AMENDMENT_FIELD, jA.AMENDMENT_VALUE, signature);
  181. _log.Info("SendTransaction | RESPONSE :" + JsonConvert.SerializeObject(_txnAmendmentResponse).ToString());
  182. _response.ResponseCode = _txnAmendmentResponse.CODE;
  183. if (!_txnAmendmentResponse.CODE.Equals("0"))
  184. {
  185. _response.ResponseCode = "1";
  186. }
  187. _response.Msg = _txnAmendmentResponse.MESSAGE;
  188. _response.Id = _txnAmendmentResponse.PINNO;
  189. _response.Extra = _txnAmendmentResponse.PINNO;
  190. _response.Data = _txnAmendmentResponse;
  191. }
  192. else
  193. {
  194. _log.Info("AmendmentRequest | MODEL VALIDATION FAILED :" + JsonConvert.SerializeObject(jA).ToString());
  195. }
  196. return _response;
  197. }
  198. private string GetSignatureIdForSendTxn(JMESendTxn cTI)
  199. {
  200. string decryptedString = cTI.AGENT_CODE + cTI.USER_ID + cTI.AGENT_SESSION_ID + cTI.AGENT_TXNID + cTI.LOCATION_ID + cTI.SENDER_NAME + cTI.SENDER_ADDRESS
  201. + cTI.SENDER_MOBILE + cTI.SENDER_CITY + cTI.SENDER_COUNTRY + cTI.SENDER_ID_TYPE + cTI.SENDER_ID_NUMBER + cTI.SENDER_ID_ISSUE_DATE
  202. + cTI.SENDER_ID_EXPIRE_DATE + cTI.SENDER_DATE_OF_BIRTH + cTI.RECEIVER_NAME + cTI.RECEIVER_ADDRESS + cTI.RECEIVER_CONTACT_NUMBER
  203. + cTI.RECEIVER_CITY + cTI.RECEIVER_COUNTRY + cTI.TRANSFERAMOUNT + cTI.PAYMENTMODE + cTI.BANKID + cTI.BANK_NAME + cTI.BANK_BRANCH_NAME
  204. + cTI.BANK_ACCOUNT_NUMBER + cTI.CAL_BY + cTI.AUTHORIZED_REQUIRED + cTI.OURSERVICECHARGE + cTI.TRANSACTION_EXCHANGERATE
  205. + cTI.SETTLEMENT_DOLLARRATE + cTI.REPRESENTIVE_NAME + cTI.SOURCE_OF_FUND + cTI.PURPOSE_OF_REMITTANCE + cTI.SENDER_OCCUPATION
  206. + cTI.SENDER_NATIONALITY + cTI.RELATIONSHIP_TO_BENEFICIARY + cTI.PARTNER_USERID + cTI.Password;
  207. return GetStatic.ComputeSha256Hash(decryptedString);
  208. }
  209. private JMESendTxn SendTransactionValidation(SendTransaction st)
  210. {
  211. JMESendTxn jMESendTxn = new JMESendTxn()
  212. {
  213. AGENT_SESSION_ID = st.SessionId,
  214. AGENT_TXNID = st.Transaction.JMEControlNo,
  215. LOCATION_ID = st.Receiver.RLocation,
  216. SENDER_NAME = st.Sender.SFullName,
  217. SENDER_ADDRESS = st.Sender.SAddress,
  218. SENDER_MOBILE = st.Sender.SMobile,
  219. SENDER_CITY = st.Sender.SCityId,
  220. SENDER_COUNTRY = st.Sender.SCountryName,
  221. SENDER_ID_TYPE = st.Sender.SIdType,
  222. SENDER_ID_NUMBER = st.Sender.SIdNo,
  223. SENDER_ID_ISSUE_DATE = st.Sender.SIdIssueDate,
  224. SENDER_ID_EXPIRE_DATE = st.Sender.SIdExpiryDate,
  225. SENDER_DATE_OF_BIRTH = st.Sender.SBirthDate,
  226. RECEIVER_NAME = st.Receiver.RFullName,
  227. RECEIVER_ADDRESS = st.Receiver.RAdd1,
  228. RECEIVER_CONTACT_NUMBER = st.Receiver.RMobile,
  229. RECEIVER_CITY = st.Receiver.RCity,
  230. RECEIVER_COUNTRY = st.Receiver.RCountry,
  231. TRANSFERAMOUNT = Convert.ToString(st.Transaction.PAmt),
  232. PAYMENTMODE = st.Transaction.PaymentType,
  233. BANKID = Convert.ToString(st.Agent.PBankId),
  234. BANK_NAME = st.Agent.PBankName,
  235. BANK_BRANCH_NAME = st.Agent.PBankBranchName,
  236. BANK_ACCOUNT_NUMBER = st.Receiver.RAccountNo,
  237. OURSERVICECHARGE = Convert.ToString(st.Transaction.ServiceCharge),
  238. TRANSACTION_EXCHANGERATE = Convert.ToString(st.Transaction.ExRate),
  239. SETTLEMENT_DOLLARRATE = Convert.ToString(st.Transaction.SettlementDollarRate),
  240. SOURCE_OF_FUND = st.Sender.SourceOfFund,
  241. PURPOSE_OF_REMITTANCE = st.Transaction.PurposeOfRemittanceName,
  242. SENDER_OCCUPATION = Convert.ToString(st.Sender.SOccuptionName),
  243. PARTNER_USERID = st.UserName,
  244. RELATIONSHIP_TO_BENEFICIARY = st.Receiver.RelWithSenderName,
  245. REPRESENTIVE_NAME = "",
  246. SENDER_NATIONALITY = st.Sender.SNativeCountry,
  247. CAL_BY = "P",
  248. AUTHORIZED_REQUIRED = "N"
  249. };
  250. return jMESendTxn;
  251. }
  252. private JMEAgent JMEAgentModelConvert(AgentRequest aR)
  253. {
  254. JMEAgent jMEAgent = new JMEAgent()
  255. {
  256. AGENT_SESSION_ID = aR.SessionId,
  257. Ext_Bank_ID = aR.ExternalBankId,
  258. PAYMENTTYPE = aR.PaymentType,
  259. PAYOUT_COUNTRY = aR.PayoutCountry,
  260. };
  261. return jMEAgent;
  262. }
  263. private JMETxStatus JMETxStatusModelConvert(GetStatus gS)
  264. {
  265. return new JMETxStatus()
  266. {
  267. AGENT_SESSION_ID = gS.SessionId,
  268. AGENT_TXNID = gS.ControlNo,
  269. PINNO = "",
  270. };
  271. }
  272. private JMECancelTransaction JMECancelTransactionModelConvert(CancelTxn txn)
  273. {
  274. return new JMECancelTransaction()
  275. {
  276. AGENT_SESSION_ID = txn.SessionId,
  277. CANCEL_REASON = txn.CancelReason,
  278. PINNO = txn.PartnerPinNo,
  279. };
  280. }
  281. private JMEAmendment JMEAmendmentModelConvert(TxnAmendment am)
  282. {
  283. return new JMEAmendment()
  284. {
  285. AGENT_SESSION_ID = am.SessionId,
  286. PINNO = am.PartnerPinNo,
  287. AMENDMENT_FIELD = am.AmendmentField,
  288. AMENDMENT_VALUE = am.AmendmentValue,
  289. };
  290. }
  291. private JMEBank JMEBankModelConvert(BankRequest bR)
  292. {
  293. return new JMEBank()
  294. {
  295. AGENT_SESSION_ID = bR.SessionId,
  296. };
  297. }
  298. }
  299. }