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.

978 lines
44 KiB

  1. using Common.Models;
  2. using Common.Models.Address;
  3. using Common.Models.Bank;
  4. using Common.Models.ExchangeRate;
  5. using Common.Models.Payer;
  6. using Common.Models.RequestResponse;
  7. using Common.Models.Sender;
  8. using Common.Models.Status;
  9. using Common.Models.TxnAmendModel;
  10. using Common.Models.TxnModel;
  11. using Common.TPService;
  12. using Common.Utility;
  13. using log4net;
  14. using Newtonsoft.Json;
  15. using System;
  16. using System.Collections.Generic;
  17. using System.Linq;
  18. using System.Net.Http;
  19. using System.Net.Http.Headers;
  20. using System.Reflection;
  21. using System.Security.Cryptography;
  22. using System.Text;
  23. using Transfast.Model.Address.City;
  24. using Transfast.Model.Address.State;
  25. using Transfast.Model.Address.Town;
  26. using Transfast.Model.Bank;
  27. using Transfast.Model.BankBranch;
  28. using Transfast.Model.Compliance;
  29. using Transfast.Model.ExRate;
  30. using Transfast.Model.Payers;
  31. using Transfast.Model.PaymenType;
  32. using Transfast.Model.Receiver;
  33. using Transfast.Model.Sender;
  34. using Transfast.Model.SendTxn;
  35. using Transfast.Model.SendTxn.TxnCancel;
  36. using Transfast.Model.TransactionInfo;
  37. namespace Transfast.ApiServices
  38. {
  39. public class TFAPI : ITPApiServices
  40. {
  41. private readonly ILog _log = LogManager.GetLogger(typeof(TFAPI));
  42. private readonly string userName;
  43. private readonly string password;
  44. private readonly string branchId;
  45. private readonly string publicKey;
  46. private readonly string ft_base_url;
  47. private readonly string systemId;
  48. //private readonly string branchIdBank;
  49. //private readonly string partnerId;
  50. //private readonly string userNameBank;
  51. //private readonly string passwordBank;
  52. public TFAPI()
  53. {
  54. userName = GetStatic.ReadWebConfig("transfast_userName", "");
  55. password = GetStatic.ReadWebConfig("transfast_password", "");
  56. branchId = GetStatic.ReadWebConfig("transfast_branchId", "");
  57. publicKey = GetStatic.ReadWebConfig("transfast_publicKey", "");
  58. ft_base_url = GetStatic.ReadWebConfig("transfast_baseUrl", "");
  59. systemId = GetStatic.ReadWebConfig("transfast_systemId", "");
  60. //partnerId = GetStatic.ReadWebConfig("transfast_branchMapCode", "");
  61. //branchIdBank = GetStatic.ReadWebConfig("transfast_branchId_bank", "");
  62. //userNameBank = GetStatic.ReadWebConfig("transfast_userName_bank", "");
  63. //passwordBank = GetStatic.ReadWebConfig("transfast_password_bank", "");
  64. }
  65. public TPResponse GetTPResponse<T>(T model, string MethodName) where T : class
  66. {
  67. switch (MethodName)
  68. {
  69. case "send":
  70. return SendTransaction(model as SendTransaction);
  71. case "release":
  72. return ReleseTrasaction(model as TFReleaseTxnRequest);
  73. case "status":
  74. return GetTransactionByPIN(model as GetStatus);
  75. case "exRate":
  76. return GetExRate(model as ExchangeRate);
  77. case "address":
  78. return GetAddress(model as AddressRequest);
  79. case "bankList":
  80. return GetBankList(model as BankRequest);
  81. case "cancelSend":
  82. return CancelTransaction(model as CancelTxn);
  83. case "senderinfo":
  84. return TFSenderInformation(model as SenderRequest);
  85. case "staticData":
  86. return GetStaticData(model as StaticData);
  87. case "payer":
  88. return PayersInformation(model as PayerRequest);
  89. case "amendment":
  90. return AmendTransaction(model as AmendTransaction);
  91. default:
  92. return new TPResponse() { ResponseCode = "1", Msg = "Method Name Not Found !" };
  93. }
  94. }
  95. public TPResponse GetStaticData(StaticData data)
  96. {
  97. string url = "";
  98. string method = "";
  99. if (data.Type == "POR")
  100. {
  101. url = "api/catalogs/remittancepurposes?countryisocode=" + data.CountryIsoCode;
  102. method = "get";
  103. }
  104. TPResponse response = GetRestApiUrl<string, _tpPOR, _tpPOR>(null, url, method, "RemittancePurposes");
  105. return response;
  106. }
  107. private TPResponse TFSenderInformation(SenderRequest sender)
  108. {
  109. TFSenderRequest tfSender = ConvertSenderToTFSender(sender);
  110. TPResponse _response = new CustomModelValidaton().IsModelValid(tfSender);
  111. if (_response == null)
  112. {
  113. _response = new TPResponse();
  114. if (sender.MethodType.ToLower() == "create")
  115. _response = GetRestApiUrl<TFSenderRequest, TFSenderResponse, TFSenderResponse>(tfSender, "api/transaction/sender");
  116. else if (sender.MethodType.ToLower() == "update")
  117. _response = GetRestApiUrl<TFSenderRequest, TFSenderResponse, TFSenderResponse>(tfSender, "api/transaction/senderinfo", "put");
  118. else if (sender.MethodType == "getdetails")
  119. _response = GetRestApiUrl<string, TFSenderResponse, TFSenderResponse>(null, "api/transaction/senderbyid?SenderId=" + tfSender.SenderId, "get");
  120. if (_response.ResponseCode != "0")
  121. _log.ErrorFormat("Error occured on TFSenderInformation at transfast api ! Response : ", _response);
  122. else
  123. {
  124. _log.ErrorFormat("TFSenderInformation success at transfast api ! Response : ", _response);
  125. }
  126. }
  127. return _response;
  128. }
  129. private TPResponse GetExRate(ExchangeRate eR)
  130. {
  131. TFExRateRequest tfExRate = ConvertExchangeRateModelToTFExRateRequest(eR);
  132. TPResponse _response = new CustomModelValidaton().IsModelValid(tfExRate);
  133. if (!string.IsNullOrEmpty(eR.ProcessFor))
  134. {
  135. if (eR.ProcessFor.ToLower() == "all")
  136. return ExRateForAllPayers(tfExRate, eR.PCurrency);
  137. }
  138. if (_response == null)
  139. {
  140. _response = new TPResponse();
  141. string _url = "api/rates/countryrates?receivecountryisocode=" + tfExRate.ReceiveCountryIsoCode + "&sourcecurrencyisocode=" + tfExRate.SourceCurrencyIsoCode;
  142. _response = GetRestApiUrl<string, _ExRateResponse, _ExRateResponse>(null, _url, "get", "Rates");
  143. var Respp = JsonConvert.SerializeObject(_response);
  144. if (!string.IsNullOrEmpty(eR.RequestedBy))
  145. {
  146. _log.Info("RequestedBy" + "| " + eR.RequestedBy);
  147. if (eR.RequestedBy == "scheduler" && string.IsNullOrEmpty(eR.PaymentType))
  148. {
  149. return GetExRateForScheduler(_response, eR.PCurrency);
  150. }
  151. if (eR.RequestedBy == "online" && eR.UserName == "onlinedefault" && eR.PCountryName.ToLower() == "india"
  152. && eR.PaymentType.ToUpper() == "CASH PAYMENT")
  153. {
  154. eR.payerName = "TRANSFAST CASH PICKUP|ID02";
  155. }
  156. if (eR.RequestedBy == "online" && eR.UserName == "onlinedefault" && eR.PCountryName.ToLower() == "bangladesh"
  157. && eR.PaymentType.ToUpper() == "CASH PAYMENT")
  158. {
  159. eR.payerName = "TRANSFAST CASH PICKUP ANYWHERE|BA99";
  160. }
  161. if (eR.RequestedBy == "online" && eR.UserName == "onlinedefault" && eR.PCountryName.ToLower() == "bangladesh"
  162. && eR.PaymentType.ToUpper() == "BANK DEPOSIT")
  163. {
  164. eR.payerName = "TRANSFAST BANK DEPOSIT|BA98";
  165. }
  166. }
  167. if (eR.PCountryName.ToLower() == "bangladesh" && eR.PaymentType.ToUpper() == "CASH PAYMENT")
  168. {
  169. eR.payerName = "TRANSFAST CASH PICKUP ANYWHERE|BA99";
  170. }
  171. if (eR.PCountryName.ToLower() == "bangladesh" && eR.PaymentType.ToUpper() == "BANK DEPOSIT")
  172. {
  173. eR.payerName = "TRANSFAST BANK DEPOSIT|BA98";
  174. }
  175. _log.Info("payerName" + "| " + eR.payerName);
  176. if (_response.ResponseCode != "0")
  177. _log.ErrorFormat("Error occured on GETEXRATE at transfast api ! Response : ", _response);
  178. else
  179. {
  180. List<TFExRateResponse> data = (List<TFExRateResponse>)_response.Data;
  181. data = data.Where(whr => whr.ReceiveCurrencyIsoCode == eR.PCurrency).ToList();
  182. string payer = string.IsNullOrEmpty(eR.payerName) ? "" : eR.payerName.Split('|')[1].ToString().TrimStart().TrimEnd().ToUpper();
  183. _log.Info("payer" + "| " + payer);
  184. TFExRateResponse AgentFilterData = data.FirstOrDefault(x => x.ReceiveCurrencyIsoCode == eR.PCurrency && x.PayerId.ToUpper() == payer);
  185. _log.Info("AgentFilterData" + "| " + JsonConvert.SerializeObject(AgentFilterData));
  186. if (AgentFilterData != null)
  187. {
  188. ExRateResponse exRate = new ExRateResponse()
  189. {
  190. bankName = AgentFilterData.PayerName,
  191. exRate = AgentFilterData.StartRate.ToString(),
  192. tpExRate = AgentFilterData.EndRate.ToString(),
  193. AgentRefId = AgentFilterData.PayerId,
  194. tpPCurr = AgentFilterData.ReceiveCurrencyIsoCode
  195. };
  196. _response.Data = exRate;
  197. }
  198. else
  199. {
  200. TFExRateResponse firstData = new TFExRateResponse();
  201. if (string.IsNullOrEmpty(eR.PaymentType))
  202. {
  203. firstData = data.FirstOrDefault(x => x.ReceiveCurrencyIsoCode == eR.PCurrency);
  204. if (firstData != null)
  205. {
  206. ExRateResponse exRate = new ExRateResponse()
  207. {
  208. bankName = firstData.PayerName,
  209. exRate = firstData.StartRate.ToString(),
  210. tpExRate = firstData.EndRate.ToString(),
  211. AgentRefId = firstData.PayerId,
  212. tpPCurr = firstData.ReceiveCurrencyIsoCode
  213. };
  214. _response.Data = exRate;
  215. }
  216. }
  217. else
  218. {
  219. if (eR.PaymentType.ToUpper() == "CASH PAYMENT")
  220. firstData = data.FirstOrDefault(x => x.ReceiveCurrencyIsoCode == eR.PCurrency && (x.ModeOfPaymentName == eR.PaymentType || x.ModeOfPaymentName.ToUpper() == "CASH PICK UP"));
  221. else
  222. firstData = data.FirstOrDefault(x => x.ReceiveCurrencyIsoCode == eR.PCurrency && x.ModeOfPaymentName == eR.PaymentType);
  223. if (firstData != null)
  224. {
  225. ExRateResponse exRate = new ExRateResponse()
  226. {
  227. bankName = firstData.PayerName,
  228. exRate = firstData.StartRate.ToString(),
  229. tpExRate = firstData.EndRate.ToString(),
  230. AgentRefId = firstData.PayerId,
  231. tpPCurr = firstData.ReceiveCurrencyIsoCode
  232. };
  233. _response.Data = exRate;
  234. }
  235. else
  236. {
  237. TFExRateResponse firstData1 = data.FirstOrDefault(x => x.ReceiveCurrencyIsoCode == eR.PCurrency);
  238. if (firstData1 != null)
  239. {
  240. ExRateResponse exRate = new ExRateResponse()
  241. {
  242. bankName = firstData1.PayerName,
  243. exRate = firstData1.StartRate.ToString(),
  244. tpExRate = firstData1.EndRate.ToString(),
  245. AgentRefId = firstData1.PayerId,
  246. tpPCurr = firstData1.ReceiveCurrencyIsoCode
  247. };
  248. _response.Data = exRate;
  249. }
  250. }
  251. }
  252. }
  253. }
  254. }
  255. return _response;
  256. }
  257. private TPResponse ExRateForAllPayers(TFExRateRequest tfExRate, string pCurrency)
  258. {
  259. TPResponse _response = new CustomModelValidaton().IsModelValid(tfExRate);
  260. if (_response == null)
  261. {
  262. _response = new TPResponse();
  263. string _url = "api/rates/countryrates?receivecountryisocode=" + tfExRate.ReceiveCountryIsoCode + "&sourcecurrencyisocode=" + tfExRate.SourceCurrencyIsoCode;
  264. _response = GetRestApiUrl<string, _ExRateResponse, _ExRateResponse>(null, _url, "get", "Rates");
  265. if (_response.ResponseCode != "0")
  266. _log.ErrorFormat("Error occured on GETEXRATE at transfast api ! Response : ", _response);
  267. else
  268. {
  269. List<TFExRateResponse> data = (List<TFExRateResponse>)_response.Data;
  270. List<ExRateResponse> _exRateResponse = new List<ExRateResponse>();
  271. List<TFExRateResponse> result = new List<TFExRateResponse>();
  272. if (pCurrency == "BDT")
  273. {
  274. List<string> BDTpayers = new List<string>() { "BA99", "BA98" };
  275. result = data.Where(whr => whr.ReceiveCurrencyIsoCode == pCurrency && BDTpayers.Contains(whr.PayerId)).ToList();
  276. }
  277. foreach (var item in result)
  278. {
  279. ExRateResponse exRate = new ExRateResponse()
  280. {
  281. bankName = item.PayerName,
  282. exRate = item.StartRate.ToString(),
  283. tpExRate = item.EndRate.ToString(),
  284. AgentRefId = item.PayerId,
  285. tpPCurr = item.ReceiveCurrencyIsoCode,
  286. ModeOfPaymentName = item.ModeOfPaymentName
  287. };
  288. _exRateResponse.Add(exRate);
  289. }
  290. _response.Data = _exRateResponse;
  291. }
  292. }
  293. return _response;
  294. }
  295. private TPResponse GetExRateForScheduler(TPResponse response, string PCurrency)
  296. {
  297. TPResponse _response = new TPResponse();
  298. List<TFExRateResponse> data = (List<TFExRateResponse>)response.Data;
  299. TFExRateResponse firstData1 = data.FirstOrDefault(x => x.ReceiveCurrencyIsoCode == PCurrency);
  300. if (firstData1 != null)
  301. {
  302. ExRateResponse exRate = new ExRateResponse()
  303. {
  304. bankName = firstData1.PayerName,
  305. exRate = firstData1.StartRate.ToString(),
  306. tpExRate = firstData1.EndRate.ToString(),
  307. AgentRefId = firstData1.PayerId,
  308. tpPCurr = firstData1.ReceiveCurrencyIsoCode
  309. };
  310. _response.Data = exRate;
  311. }
  312. return _response;
  313. }
  314. private TPResponse GetState(string countryIso)
  315. {
  316. TPResponse _response = new TPResponse();
  317. _response = GetRestApiUrl<string, _States, _States>(null, "api/catalogs/states?countryisocode=" + countryIso, "get", "States");
  318. if (_response.ResponseCode != "0")
  319. _log.ErrorFormat("Error occured on GetState at transfast api ! Response : ", _response);
  320. else
  321. {
  322. _log.ErrorFormat("GetState success at transfast api ! Response : ", _response);
  323. }
  324. return _response;
  325. }
  326. private TPResponse GetAddress(AddressRequest tF)
  327. {
  328. switch (tF.MethodType)
  329. {
  330. case "city":
  331. return GetCities(tF);
  332. case "state":
  333. return GetState(tF.CountryIsoCode);
  334. case "town":
  335. return GetTown(tF);
  336. case "paymentType":
  337. return GetPaymentMode(tF);
  338. default:
  339. return new TPResponse() { ResponseCode = "1", Msg = "Address Type Not Found !" };
  340. }
  341. }
  342. private TPResponse GetCities(AddressRequest tF)
  343. {
  344. TPResponse _response = new TPResponse();
  345. _response = GetRestApiUrl<string, _Cities, _Cities>(null, "api/catalogs/cities?countryisocode=" + tF.CountryIsoCode + "&stateid=" + tF.StateId, "get", "Cities");
  346. if (_response.ResponseCode != "0")
  347. _log.ErrorFormat("Error occured on GETCITIES at transfast api ! Response : ", _response);
  348. else
  349. _log.ErrorFormat("GETCITIES success at transfast api ! Response : ", _response);
  350. return _response;
  351. }
  352. private TPResponse GetTown(AddressRequest tF)
  353. {
  354. TPResponse _response = new TPResponse();
  355. _response = GetRestApiUrl<string, _Towns, _Towns>(null, "api/catalogs/towns?countryisocode=" + tF.CountryIsoCode + "&stateid=" + tF.StateId + "&cityId=" + tF.CityId, "get", "Towns");
  356. if (_response.ResponseCode != "0")
  357. _log.ErrorFormat("Error occured on GETTOWN at transfast api ! Response : ", _response);
  358. else
  359. _log.ErrorFormat("GETTOWN success at transfast api ! Response : ", _response);
  360. return _response;
  361. }
  362. private TPResponse GetPaymentMode(AddressRequest tF)
  363. {
  364. TPResponse _response = new TPResponse();
  365. _response = GetRestApiUrl<string, _PaymentType, _PaymentType>(null, "api/catalogs/paymentmodes?countryisocode=" + tF.CountryIsoCode + "&cityId=" + tF.CityId, "get", "PaymentModes");
  366. if (_response.ResponseCode != "0")
  367. _log.ErrorFormat("Error occured on GETPAYMENTMODE at transfast api ! Response : ", _response);
  368. else
  369. _log.ErrorFormat("GETPAYMENTMODE success at transfast api ! Response : ", _response);
  370. return _response;
  371. }
  372. private TPResponse GetTransactionByPIN(GetStatus getStatus)
  373. {
  374. string getTranUrl = "ByReferenceNo?ReferenceNumber=" + getStatus.ControlNo;
  375. if (!string.IsNullOrEmpty(getStatus.PartnerPinNo) && !string.IsNullOrWhiteSpace(getStatus.PartnerPinNo))
  376. getTranUrl = "bytfpin?TfPin=" + getStatus.PartnerPinNo;
  377. TPResponse _rsponse = GetRestApiUrl<string, TFSendTxnResponse, TFSendTxnResponse>(null, "api/transaction/" + getTranUrl, "get");
  378. if (_rsponse.ResponseCode != "0")
  379. _log.ErrorFormat("Error occured on GETTRANSACTIONBYPIN at transfast api ! Response : ", _rsponse);
  380. else
  381. _log.ErrorFormat("GETTRANSACTIONBYPIN success at transfast api ! Response : ", _rsponse);
  382. return _rsponse;
  383. }
  384. private TPResponse SendTransaction(SendTransaction sT)
  385. {
  386. var tfSendModel = ConvertSendTransactionModelToTFSendTxtnRequest(sT);
  387. TPResponse _response = new CustomModelValidaton().IsModelValid(tfSendModel);
  388. _log.DebugFormat(GetStatic.ConvertToJson(tfSendModel));
  389. if (_response == null)
  390. {
  391. _response = GetRestApiUrl<TFSendTxtnRequest, TFSendTxnResponse, TFSendTxnFailedResponse>(tfSendModel, "api/transaction/invoice");
  392. if (_response.ResponseCode == "0")
  393. {
  394. PropertyInfo tfPin = _response.Data.GetType().GetProperty("TfPin");
  395. string tfPinValue = (string)tfPin.GetValue(_response.Data, null);
  396. PropertyInfo TransactionInfo = _response.Data.GetType().GetProperty("TransactionInfo");
  397. object trasactionData = TransactionInfo.GetValue(_response.Data, null);
  398. PropertyInfo refNo = trasactionData.GetType().GetProperty("ReferenceNumber");
  399. _response.Extra = tfPinValue;
  400. _response.Id = (string)refNo.GetValue(trasactionData, null);
  401. _response.Msg = "Transaction Send Successfully For Transfast With Control No = " + sT.Transaction.JMEControlNo + " And Response Control No = " + tfPinValue;
  402. }
  403. }
  404. return _response;
  405. }
  406. private TPResponse ReleseTrasaction(TFReleaseTxnRequest tfPINNo)
  407. {
  408. return GetRestApiUrl<TFReleaseTxnRequest, string, TFSendTxnFailedResponse>(tfPINNo, "api/transaction/release", "put");
  409. }
  410. private TPResponse CancelTransaction(CancelTxn txn)
  411. {
  412. TFTxnCancelRequest tfSendModel = ConvertToTFTxnCancelRequest(txn);
  413. TPResponse _response = new CustomModelValidaton().IsModelValid(tfSendModel);
  414. if (_response == null)
  415. {
  416. _response = new TPResponse();
  417. _response = GetRestApiUrl<TFTxnCancelRequest, string, TFSendTxnFailedResponse>(tfSendModel, "api/transaction/cancel", "put");
  418. if (_response.ResponseCode != "0")
  419. _log.ErrorFormat("Error occured on CancelTransaction at transfast api ! Response : ", _response);
  420. else
  421. _log.ErrorFormat("CancelTransaction process success at transfast api ! Response : ", _response);
  422. }
  423. return _response;
  424. }
  425. private TPResponse AmendTransaction(AmendTransaction aTxn)
  426. {
  427. var tfAmendModel = ConvertAmendTransactionModelToTFAmendTxtnRequest(aTxn);
  428. TPResponse _response = new CustomModelValidaton().IsModelValid(tfAmendModel);
  429. _log.DebugFormat(GetStatic.ConvertToJson(tfAmendModel));
  430. if (_response == null)
  431. {
  432. _response = GetRestApiUrl<TFAmendTxnRequest, string, TFSendTxnFailedResponse>(tfAmendModel, "api/transaction/invoice", "put");
  433. if (_response.ResponseCode != "0")
  434. {
  435. if (_response.Msg.Split(':')[1].ToString().ToLower() != "notfound")
  436. {
  437. PropertyInfo businessError = _response.Data.GetType().GetProperty("BusinessErrors");
  438. List<BusinessError> businessErrorData = (List<BusinessError>)businessError.GetValue(_response.Data, null);
  439. string msg = "";
  440. if (businessErrorData.Count > 0)
  441. {
  442. foreach (BusinessError item in businessErrorData)
  443. {
  444. msg += item.Message + " ";
  445. }
  446. }
  447. PropertyInfo validationError = _response.Data.GetType().GetProperty("DataValidationErrors");
  448. List<DataValidationError> validationErrorData = (List<DataValidationError>)validationError.GetValue(_response.Data, null);
  449. if (validationErrorData.Count > 0)
  450. {
  451. foreach (DataValidationError item in validationErrorData)
  452. {
  453. msg += item.Message + " ";
  454. }
  455. }
  456. _response.Msg += msg;
  457. }
  458. _log.ErrorFormat("Error occured on AMENDTRANSACTION at transfast api ! Response : ", _response);
  459. }
  460. else
  461. {
  462. _response.Extra = aTxn.TfPinno;
  463. _response.Id = aTxn.TfPinno;
  464. _response.Msg = "Transaction Amended Successfully For Transfast With Control No = " + aTxn.TfPinno;
  465. //_response = GetRestApiUrl<TFReleseTxnRequest, string>(new TFReleseTxnRequest() { TfPin = (string)tfPin.GetValue(_response.Data, null) }, "api/transaction/release", "put");
  466. _log.ErrorFormat("AMENDTRANSACTION process success at transfast api ! Response : ", _response);
  467. }
  468. }
  469. return _response;
  470. }
  471. private TPResponse GetBankList(BankRequest bank)
  472. {
  473. if (bank.IsBranch)
  474. {
  475. return GetBankBranchList(bank);
  476. }
  477. var tfBank = ConvetToTFBankRequest(bank);
  478. TPResponse _response = new CustomModelValidaton().IsModelValid(tfBank);
  479. if (_response == null)
  480. {
  481. _response = new TPResponse();
  482. _response = GetRestApiUrl<string, _TFBank, _TFBank>(null, "api/catalogs/banks?countryisocode=" + tfBank.CountryIsoCode, "get", "Banks");
  483. if (_response.ResponseCode != "0")
  484. _log.ErrorFormat("Error occured on GetBankList at transfast api ! Response : ", _response);
  485. else
  486. _log.ErrorFormat("GetBankList process success at transfast api ! Response : ", _response);
  487. }
  488. return _response;
  489. }
  490. private TPResponse GetBankBranchList(BankRequest bank)
  491. {
  492. TFBankBranchRequest tfBank = ConvetToTFBankBranchRequest(bank);
  493. TPResponse _response = new CustomModelValidaton().IsModelValid(tfBank);
  494. if (_response == null)
  495. {
  496. _response = new TPResponse();
  497. _response = GetRestApiUrl<string, List<TFBankBranchResponse>, string>(null, "api/catalogs/BankBranch?BankId=" + tfBank.BankId + "&CityID=" + tfBank.CityId, "get");
  498. if (_response.ResponseCode != "0")
  499. _log.ErrorFormat("Error occured on GetBankBranchList at transfast api ! Response : ", _response);
  500. else
  501. _log.ErrorFormat("GetBankBranchList process success at transfast api ! Response : ", _response);
  502. }
  503. return _response;
  504. }
  505. private TPResponse PayersInformation(PayerRequest pR)
  506. {
  507. TFPayersRequest tf = ConvertToTFPayersRequest(pR);
  508. TPResponse _response = new CustomModelValidaton().IsModelValid(tf);
  509. if (_response == null)
  510. {
  511. _response = new TPResponse();
  512. var url = "api/catalogs/payers?countryisocode=" + tf.CountryIsoCode + "&cityid=" + tf.CityId +
  513. "&paymentmodeid=" + tf.PaymentModeId + "&sourcecurrencyisocode=" + tf.SourceCurrencyIsoCode + "&receivecurrencyisocode=" +
  514. tf.ReceiveCurrencyIsoCode + "&BankID=" + tf.BankId;
  515. _response = GetRestApiUrl<string, _MasterResults, _MasterResults>(null, url, "get", "MasterPayerResults");
  516. if (_response.ResponseCode != "0")
  517. _log.ErrorFormat("Error occured on PayersInformation at transfast api ! Response : ", _response);
  518. else
  519. _log.ErrorFormat("PayersInformation process success at transfast api ! Response : ", _response);
  520. }
  521. return _response;
  522. }
  523. private TPResponse GetRestApiUrl<RequestModel, ResponseModelForSucess, ResponseModelForFailed>(RequestModel model, string api_url, string MethodType = "post", string getObjectOnly = null)
  524. {
  525. TPResponse _tPResponse = new TPResponse() { ResponseCode = "0" };
  526. using (HttpClient httpClient = new HttpClient())
  527. {
  528. try
  529. {
  530. _log.Info($"{api_url}|REQUEST : {JsonConvert.SerializeObject(model).ToString()}");
  531. httpClient.BaseAddress = new Uri(ft_base_url);
  532. string tokenNo = GetAuthToken();
  533. httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
  534. short timeOut = Convert.ToInt16(GetStatic.ReadWebConfig("transfast_apiTimeOutInSecond", "100"));
  535. httpClient.Timeout = new TimeSpan(0, 0, timeOut);
  536. httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", tokenNo);
  537. HttpResponseMessage resp = new HttpResponseMessage();
  538. if (MethodType.ToLower().Equals("get"))
  539. {
  540. resp = httpClient.GetAsync(api_url).Result;
  541. }
  542. if (MethodType.ToLower().Equals("put"))
  543. {
  544. StringContent jbdContent = new StringContent(JsonConvert.SerializeObject(model).ToString(), Encoding.UTF8, "application/json");
  545. resp = httpClient.PutAsync(api_url, jbdContent).Result;
  546. }
  547. if (MethodType.ToLower().Equals("post"))
  548. {
  549. string jsonData = JsonConvert.SerializeObject(model).ToString();
  550. StringContent jbdContent = new StringContent(jsonData, Encoding.UTF8, "application/json");
  551. resp = httpClient.PostAsync(api_url, jbdContent).Result;
  552. }
  553. string result = resp.Content.ReadAsStringAsync().Result;
  554. _log.Info($"{api_url}|RESPONSE : {result}");
  555. if (resp.IsSuccessStatusCode)
  556. {
  557. _tPResponse.ResponseCode = "0";
  558. _tPResponse.Data = JsonConvert.DeserializeObject<ResponseModelForSucess>(result);
  559. if (getObjectOnly != null)
  560. _tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly);
  561. return _tPResponse;
  562. }
  563. else
  564. {
  565. _tPResponse.ResponseCode = "1";
  566. _tPResponse.Data = JsonConvert.DeserializeObject<ResponseModelForFailed>(result);
  567. if (resp.StatusCode.ToString().ToLower() != "notfound")
  568. {
  569. _tPResponse.Msg = "Status Code: " + resp.StatusCode.ToString().Replace("<br/>", "").Replace(Environment.NewLine, "") + " " + GetResponseMessage(_tPResponse.Data as TFSendTxnFailedResponse);
  570. }
  571. else
  572. {
  573. _tPResponse.Msg = "Status Code:" + resp.StatusCode.ToString();
  574. }
  575. if (getObjectOnly != null)
  576. _tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly);
  577. return _tPResponse;
  578. }
  579. }
  580. catch (HttpRequestException ex)
  581. {
  582. _tPResponse.ResponseCode = "999";
  583. _tPResponse.Msg = ex.Message;
  584. _tPResponse.Data = ex.Data;
  585. }
  586. };
  587. return _tPResponse;
  588. }
  589. private string GetResponseMessage(TFSendTxnFailedResponse data)
  590. {
  591. string msg = "";
  592. if (data.BusinessErrors != null)
  593. {
  594. if (data.BusinessErrors.Count > 0)
  595. msg += "Business Error: ";
  596. foreach (BusinessError item in data.BusinessErrors)
  597. {
  598. msg += item.ErrorCode + " ; " + item.Message + Environment.NewLine;
  599. }
  600. }
  601. if (data.DataValidationErrors != null)
  602. {
  603. if (data.BusinessErrors.Count > 0)
  604. msg += "Validation Error: ";
  605. foreach (DataValidationError item in data.DataValidationErrors)
  606. {
  607. msg += item.ErrorCode + " ; " + item.Message + Environment.NewLine;
  608. }
  609. }
  610. if (!string.IsNullOrEmpty(data.Message))
  611. msg += "Error Msg: " + data.ErrorCode + data.Message;
  612. return msg;
  613. }
  614. #region Model Convert
  615. private TFSenderRequest ConvertSenderToTFSender(SenderRequest sR)
  616. {
  617. return new TFSenderRequest()
  618. {
  619. Address = sR.Address,
  620. AddressOtherLanguage = sR.AddressOtherLanguage,
  621. CityId = sR.RCityCode,
  622. CountryIsoCode = sR.CountryIsoCode,
  623. DateOfBirth = sR.DateOfBirth,
  624. Email = sR.Email,
  625. IdExpiryDate = sR.IdExpiryDate,
  626. IdNumber = sR.IdNumber,
  627. IsIndividual = sR.IsIndividual,
  628. //LoyaltyCardNumber = sR.LoyaltyCardNumber,
  629. Name = sR.Name,
  630. NameOtherLanguage = sR.NameOtherLanguage,
  631. NationalityIsoCode = sR.NationalityIsoCode,
  632. PhoneHome = sR.PhoneHome,
  633. PhoneMobile = sR.PhoneMobile,
  634. PhoneWork = sR.PhoneWork,
  635. SenderId = sR.SenderId,
  636. StateId = sR.StateId,
  637. TypeOfId = sR.TypeOfId,
  638. ZipCode = sR.ZipCode
  639. };
  640. }
  641. private TFSendTxtnRequest ConvertSendTransactionModelToTFSendTxtnRequest(SendTransaction sT)
  642. {
  643. return new TFSendTxtnRequest()
  644. {
  645. //TfPin = sT.Transaction.JMEControlNo,
  646. Sender = new TFSenderRequest()
  647. {
  648. SenderId = 0,
  649. LoyaltyCardNumber = "",
  650. Name = sT.Sender.SFullName,
  651. NameOtherLanguage = sT.Sender.SFullName,
  652. Address = sT.Sender.SAddress,
  653. AddressOtherLanguage = sT.Sender.SAddress,
  654. PhoneMobile = sT.Sender.SMobile,
  655. PhoneHome = sT.Sender.STel,
  656. PhoneWork = "",
  657. ZipCode = sT.Sender.SZipCode,
  658. CityId = sT.Sender.SCityId,
  659. StateId = sT.Sender.SState,
  660. CountryIsoCode = sT.Sender.SCountryName,
  661. TypeOfId = sT.Sender.SIdType,
  662. IdNumber = sT.Sender.SIdNo,
  663. IdExpiryDate = sT.Sender.SIdExpiryDate,
  664. NationalityIsoCode = sT.Sender.SNativeCountry,
  665. DateOfBirth = sT.Sender.SBirthDate,
  666. Email = sT.Sender.SEmail,
  667. IsIndividual = sT.Sender.IsIndividual
  668. },
  669. Receiver = new ReceiverRequest()
  670. {
  671. FirstName = sT.Receiver.RFirstName,
  672. FirstNameOtherLanguage = sT.Receiver.RFirstName,
  673. SecondName = sT.Receiver.RMiddleName,
  674. SecondNameOtherLanguage = sT.Receiver.RMiddleName,
  675. LastName = sT.Receiver.RLastName,
  676. LastNameOtherLanguage = sT.Receiver.RLastName,
  677. SecondLastName = "",
  678. SecondLastNameOtherLanguage = "",
  679. FullNameOtherLanguage = sT.Receiver.RFullName,
  680. FullName = sT.Receiver.RFullName,
  681. CompleteAddress = sT.Receiver.RAdd1,
  682. CompleteAddressOtherLanguage = sT.Receiver.RAdd1,
  683. StateId = sT.Receiver.RStateId,
  684. CityId = sT.Receiver.RCity,
  685. TownId = sT.Receiver.RLocation,
  686. CountryIsoCode = sT.Receiver.RCountry,
  687. MobilePhone = sT.Receiver.RMobile,
  688. HomePhone = sT.Receiver.RTel,
  689. WorkPhone = "",
  690. ZipCode = "",
  691. DateOfBirth = sT.Receiver.RDob,
  692. NationalityIsoCode = sT.Receiver.RNativeCountry,
  693. IsIndividual = true,
  694. Email = sT.Receiver.REmail,
  695. Cpf = "",
  696. ReceiverTypeOfId = sT.Receiver.RIdType,
  697. ReceiverIdNumber = sT.Receiver.RIdNo,
  698. Notes = "",
  699. NotesOtherLanguage = ""
  700. },
  701. TransactionInfo = new TransactionInfoRequest()
  702. {
  703. PaymentModeId = sT.Transaction.PaymentType,
  704. ReceiveCurrencyIsoCode = sT.Transaction.PCurr,
  705. BankId = sT.Agent.PBankId,
  706. Account = sT.Receiver.RAccountNo,
  707. AccountTypeId = "",
  708. BankBranchId = sT.Agent.PBankBranchId,
  709. PayingBranchId = sT.Agent.PBranchId,
  710. PayerId = sT.Receiver.RLocationName,
  711. PurposeOfRemittanceId = sT.Transaction.PurposeOfRemittanceName,
  712. SourceCurrencyIsoCode = sT.Transaction.CollCurr,
  713. Rate = sT.Transaction.Rate,
  714. TotalSentAmount = sT.Transaction.TAmt,
  715. SentAmount = 0,
  716. ServiceFee = sT.Transaction.ServiceCharge,
  717. USDServiceFee = sT.Transaction.SettlementDollarRate,
  718. ReceiveAmount = sT.Transaction.PAmt,
  719. CashAmount = sT.Transaction.CAmt,
  720. Payout = 0,
  721. FormOfPaymentId = sT.Sender.FormOfPaymentId,
  722. ReferenceNumber = sT.Transaction.JMEControlNo,
  723. SourceOfFundsID = Convert.ToInt32(sT.Sender.SourceOfFund),
  724. FeeProduct = ""
  725. },
  726. Compliance = new ComplianceRequest()
  727. {
  728. CountryIssueIsoCode = sT.Receiver.RCountry,
  729. ReceiverDateOfBirth = sT.Sender.SBirthDate,
  730. ReceiverFullName = sT.Receiver.RFullName,
  731. ReceiverRelationship = sT.Receiver.RelWithSenderName,
  732. SenderEmployerAddress = sT.Sender.SAddress,
  733. SenderEmployerName = sT.Sender.SFullName,
  734. SenderEmployerPhone = sT.Sender.SMobile,
  735. SenderOccupation = sT.Sender.SOccuptionName,
  736. SourceOfFunds = sT.Sender.SourceOfFund,
  737. Ssn = sT.Transaction.TpRefNo,
  738. StateIssueId = sT.Sender.SState
  739. },
  740. };
  741. }
  742. private TFAmendTxnRequest ConvertAmendTransactionModelToTFAmendTxtnRequest(AmendTransaction aT)
  743. {
  744. return new TFAmendTxnRequest()
  745. {
  746. TfPin = aT.TfPinno,
  747. AmendedSender = new TFAmendSenderRequest()
  748. {
  749. Address = aT.AmendSender.SAddress,
  750. PhoneMobile = aT.AmendSender.SMobile,
  751. PhoneHome = aT.AmendSender.STel,
  752. PhoneWork = "",
  753. CityId = aT.AmendSender.SCityId,
  754. StateId = aT.AmendSender.SState,
  755. CountryIsoCode = aT.AmendSender.SCountryName,
  756. ZipCode = aT.AmendSender.SZipCode,
  757. IsIndividual = aT.AmendSender.IsIndividual,
  758. Email = aT.AmendSender.SEmail,
  759. TypeOfId = aT.AmendSender.SIdType,
  760. IdNumber = aT.AmendSender.SIdNo,
  761. IdExpiryDate = aT.AmendSender.SIdExpiryDate,
  762. NationalityIsoCode = aT.AmendSender.SNativeCountry,
  763. SenderOccupations = aT.AmendSender.SOccuptionId,
  764. DateOfBirth = aT.AmendSender.SBirthDate,
  765. },
  766. AmendedReceiver = new ReceiverAmendRequest()
  767. {
  768. CompleteAddress = aT.AmendReceiver.RAdd1,
  769. CompleteAddressOtherLanguage = aT.AmendReceiver.RAdd1,
  770. MobilePhone = aT.AmendReceiver.RMobile,
  771. WorkPhone = "",
  772. HomePhone = aT.AmendReceiver.RTel,
  773. Email = aT.AmendReceiver.REmail,
  774. ReceiverTypeOfId = aT.AmendReceiver.RIdType,
  775. ReceiverIdNumber = aT.AmendReceiver.RIdNo,
  776. FirstName = aT.AmendReceiver.RFirstName,
  777. LastName = aT.AmendReceiver.RLastName,
  778. SecondLastName = "",
  779. Notes = "",
  780. NotesOtherLanguage = ""
  781. },
  782. AmendedTransactionInfo = new TransactionInfoAmendRequest()
  783. {
  784. Account = aT.AmendReceiver.RAccountNo,
  785. BankBranchId = aT.AmendAgent.PBankBranchId,
  786. BankRoutingNumber = aT.AmendAgent.PBankId
  787. },
  788. };
  789. }
  790. private TFExRateRequest ConvertExchangeRateModelToTFExRateRequest(ExchangeRate sT)
  791. {
  792. return new TFExRateRequest()
  793. {
  794. FeeProduct = "",
  795. ReceiveCountryIsoCode = sT.pCountryCode,
  796. SourceCurrencyIsoCode = sT.SCurrency
  797. };
  798. }
  799. private TFBankRequest ConvetToTFBankRequest(BankRequest bank)
  800. {
  801. return new TFBankRequest()
  802. {
  803. BankName = bank.BankName,
  804. CountryIsoCode = bank.CountryCode,
  805. PageSize = bank.PageSize,
  806. RoutingNumber = bank.RoutingNumber,
  807. StartIndex = bank.StartIndex,
  808. Swiftcode = bank.Swiftcode
  809. };
  810. }
  811. private TFBankBranchRequest ConvetToTFBankBranchRequest(BankRequest bank)
  812. {
  813. return new TFBankBranchRequest()
  814. {
  815. BankId = bank.BankName,
  816. CityId = bank.CityId,
  817. StateId = bank.StateId
  818. };
  819. }
  820. private TFTxnCancelRequest ConvertToTFTxnCancelRequest(CancelTxn txn)
  821. {
  822. return new TFTxnCancelRequest()
  823. {
  824. TfPin = txn.PartnerPinNo,
  825. ReasonId = txn.CancelReason
  826. };
  827. }
  828. private TFPayersRequest ConvertToTFPayersRequest(PayerRequest tF)
  829. {
  830. return new TFPayersRequest()
  831. {
  832. BankId = tF.BankId,
  833. CityId = tF.CityId,
  834. CountryIsoCode = tF.CountryIsoCode,
  835. FeeProduct = tF.FeeProduct,
  836. PaymentModeId = tF.PaymentModeId,
  837. ReceiveCurrencyIsoCode = tF.ReceiveCurrencyIsoCode,
  838. SourceCurrencyIsoCode = tF.SourceCurrencyIsoCode,
  839. };
  840. }
  841. #endregion Model Convert
  842. private string GetAuthToken()
  843. {
  844. string authHeader = "<Authentication> <Id>" + systemId + "</Id> <UserName>" + Encrypt(userName) + "</UserName> <Password>" + Encrypt(password) + "</Password> <BranchId>" + Encrypt(branchId) + "</BranchId> </Authentication>";
  845. string _authToken = Base64Encode(authHeader);
  846. return _authToken;
  847. }
  848. //private string GetAuthTokenBank()
  849. //{
  850. // string authHeader = "<Authentication> <Id>" + systemId + "</Id> <UserName>" + Encrypt(userNameBank) + "</UserName> <Password>" + Encrypt(passwordBank) + "</Password> <BranchId>" + Encrypt(branchIdBank) + "</BranchId> </Authentication>";
  851. // string _authToken = Base64Encode(authHeader);
  852. // return _authToken;
  853. //}
  854. private static string Base64Encode(string plainText)
  855. {
  856. byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
  857. return Convert.ToBase64String(plainTextBytes);
  858. }
  859. private string Encrypt(string data)
  860. {
  861. using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
  862. {
  863. RSA.FromXmlString(publicKey);
  864. byte[] dataToEncrypt = Encoding.UTF8.GetBytes(data);
  865. byte[] encryptedByteArray = RSA.Encrypt(dataToEncrypt, false).ToArray();
  866. return Convert.ToBase64String(encryptedByteArray);
  867. }
  868. }
  869. private TPResponse GetOnlyRequiredData(TPResponse response, string objectName)
  870. {
  871. if (response.Data != null)
  872. {
  873. PropertyInfo fieldName = response.Data.GetType().GetProperty(objectName);
  874. object values = fieldName.GetValue(response.Data, null);
  875. response.Data = values;
  876. }
  877. return response;
  878. }
  879. }
  880. }