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.

1029 lines
41 KiB

  1. using BracBank.Model;
  2. using Common.Models;
  3. using Common.Models.Agent;
  4. using Common.Models.Bank;
  5. using Common.Models.Bank_Account;
  6. using Common.Models.DigitalSignature;
  7. using Common.Models.RequestResponse;
  8. using Common.Models.Status;
  9. using Common.Models.TxnModel;
  10. using Common.TPService;
  11. using Common.Utility;
  12. using log4net;
  13. using Newtonsoft.Json;
  14. using Newtonsoft.Json.Linq;
  15. using Repository.DAO.ThirdParty;
  16. using RestSharp;
  17. using System;
  18. using System.Net;
  19. using System.Text;
  20. using System.Linq;
  21. namespace BracBank.BracBankApiService
  22. {
  23. public class BracBankAPI : ITPApiServices
  24. {
  25. private readonly ILog _log = LogManager.GetLogger(typeof(BracBankAPI));
  26. // ServiceComClient _service = new ServiceComClient();
  27. ApiHelper apiHelper { get; set; }
  28. protected string baseUrl { get; set; }
  29. protected string username { get; set; }
  30. protected string password { get; set; }
  31. public BracBankAPI()
  32. {
  33. baseUrl = GetStatic.ReadWebConfig("brac_base_url", "");
  34. username = GetStatic.ReadWebConfig("brac_Username", "");
  35. password = GetStatic.ReadWebConfig("brac_Password", "");
  36. apiHelper = new ApiHelper();
  37. }
  38. private const string GET_TOKEN = "/oauth/Token";
  39. private const string ACCOUNT_VERIFY = "/NonTransaction/getAccountName";
  40. private const string WALLET_VERIFY = "/NonTransaction/getWalletValidation";
  41. private const string POST_TRANSACTION = "/Transaction/postTransaction";
  42. private const string GET_CODES = "/NonTransaction/getCodes";
  43. private const string GET_MAPPING_CODES = "/NonTransaction/getMappingCodes";
  44. private const string GET_ACCOUNTBALANCE = "/NonTransaction/getAccountBalance";
  45. private const string TRANSACTION_CANCEL = "/Transaction/postTransactionCancel";
  46. private const string TRANSACTION_STATUS = "/Transaction/getTransactionStatus";
  47. public TPResponse GetTPResponse<T>(T model, string MethodName) where T : class
  48. {
  49. switch (MethodName)
  50. {
  51. case "send":
  52. return SendTransaction(model as SendTransaction);
  53. case "verify":
  54. return AccountValidation(model as AccountValidate);
  55. case "status":
  56. return GetTxnStatus(model as GetStatus);
  57. case "bankList":
  58. return GetBankList(model as BankRequest);
  59. case "agentList":
  60. return GetAgentList(model as AgentRequest);
  61. case "staticData":
  62. return GetAccountBalance(model as StaticData);
  63. case "cancelSend":
  64. return CancelTxn(model as CancelTxn);
  65. default:
  66. return new TPResponse() { ResponseCode = "1", Msg = "Method Name Not Found !" };
  67. }
  68. }
  69. private TokenResponse GetToken()
  70. {
  71. TokenResponse tokenResponse = new TokenResponse();
  72. try
  73. {
  74. var client = new RestClient(baseUrl);
  75. var authorizeHeader = "Basic " + Base64Encode($"{ username}:{password}");
  76. var request = new RestRequest(GET_TOKEN, Method.POST);
  77. request.AddHeader("Content-Type", "application/json");
  78. if (!string.IsNullOrEmpty(authorizeHeader))
  79. request.AddHeader("Authorization", authorizeHeader);
  80. request.RequestFormat = DataFormat.Json;
  81. tokenResponse = client.Execute<TokenResponse>(request).Data;
  82. }
  83. catch (Exception ex)
  84. {
  85. tokenResponse.Success = false;
  86. tokenResponse.StatusDescription = ex.ToString();
  87. }
  88. return tokenResponse;
  89. }
  90. private TPResponse AccountValidation(AccountValidate accountValidate)
  91. {
  92. TPResponse _response = new TPResponse() { Id = "1" };
  93. try
  94. {
  95. var client = new RestClient(baseUrl);
  96. var requestJson = string.Empty;
  97. var method = string.Empty;
  98. if (accountValidate.PaymentMode == "AC")
  99. {
  100. method = ACCOUNT_VERIFY;
  101. BracValidationRequest accountVerifyRequest = new BracValidationRequest { AccountNumber = accountValidate.AccountNumber };
  102. requestJson = JsonConvert.SerializeObject(accountVerifyRequest);
  103. _log.Info($"{method}|REQUEST : {requestJson}");
  104. _response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = requestJson }, "brac/GetJwtToken", out _response);
  105. }
  106. else
  107. {
  108. method = WALLET_VERIFY;
  109. WalletValidationRequest accountVerifyRequest = new WalletValidationRequest
  110. {
  111. WalletNo = accountValidate.AccountNumber,
  112. WalletName = accountValidate.ReceiverName,
  113. WalletPartner = !string.IsNullOrEmpty(accountValidate.BankCode) ? 1 : Convert.ToInt32(accountValidate.BankCode)
  114. };
  115. requestJson = JsonConvert.SerializeObject(accountVerifyRequest, Formatting.None);
  116. _log.Info($"{method}|REQUEST : {requestJson}");
  117. _response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = requestJson }, "brac/GetJwtToken", out _response);
  118. }
  119. if (_response == null)
  120. {
  121. if (_response == null)
  122. _response = new TPResponse();
  123. _response.Id = "1";
  124. _response.Msg = "brac/GetJwtToken is null";
  125. return _response;
  126. }
  127. else if (!_response.ResponseCode.Equals("0"))
  128. {
  129. return _response;
  130. }
  131. var bearerToken = GetTokenFromDB(accountValidate.UserName);
  132. var result = client.Execute<string>(BuildRequest<string>(method, _response.Id, bearerToken.Token));
  133. _log.Info($"{method}|RESPONSE : {result.Content}");
  134. if (result.StatusCode == HttpStatusCode.OK)
  135. {
  136. var res = result.Content;
  137. _response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = res }, "brac/GetPayLoad", out _response);
  138. _log.Info($"{method}|RESPONSE : {JsonConvert.SerializeObject(_response)}");
  139. if (_response.ResponseCode.Equals("0"))
  140. {
  141. var bracResponse = JObject.Parse(_response.Data.ToString());
  142. _response.Msg = bracResponse["StatusDescription"].ToString();
  143. //_response.Extra = _response.Data.ToString();
  144. _response.Id = bracResponse["StatusCode"].ToString();
  145. if (bracResponse["Success"] != null && (bracResponse["Success"].ToString().ToLower().Equals("true")))
  146. {
  147. _response.ResponseCode = "0";
  148. if (accountValidate.PaymentMode == "AC")
  149. {
  150. var data = JsonConvert.DeserializeObject<AccountValidationReponse>(_response.Data.ToString());
  151. _response.Extra = data.Data.AccountNumber;
  152. _response.Extra2 = data.Data.AccountName;
  153. _response.Data = _response.Data.ToString();
  154. }
  155. else
  156. {
  157. var data = JsonConvert.DeserializeObject<WalletValidationReponse>(_response.Data.ToString());
  158. _response.Extra = data.Data.WalletNo;
  159. _response.Extra2 = data.Data.WalletName;
  160. _response.Data = _response.Data.ToString();
  161. }
  162. }
  163. else
  164. {
  165. _response.ResponseCode = "1";
  166. if (accountValidate.PaymentMode == "AC")
  167. {
  168. var data = JsonConvert.DeserializeObject<AccountValidationReponse>(_response.Data.ToString());
  169. _response.Extra = data.Data.AccountNumber;
  170. _response.Extra2 = data.Data.AccountName;
  171. _response.Msg = data.StatusDescription;
  172. _response.Data = _response.Data;
  173. }
  174. else
  175. {
  176. var data1 = JsonConvert.DeserializeObject<WalletValidationReponse>(_response.Data.ToString());
  177. _response.Extra = data1.Data.WalletNo;
  178. _response.Extra2 = data1.Data.WalletName;
  179. _response.Data = _response.Data;
  180. _response.Msg = data1.StatusDescription;
  181. }
  182. }
  183. }
  184. else
  185. {
  186. if (_response == null)
  187. {
  188. _response = new TPResponse();
  189. }
  190. _response.ResponseCode = "1";
  191. _response.Msg = "brac/GetPayLoad is null";
  192. }
  193. }
  194. else
  195. {
  196. if (result.StatusCode.Equals("403"))
  197. {
  198. var tokenResponse = GetTokenFromDB(username, true);
  199. ThirdPartyRepo thirdPartyRepo = new ThirdPartyRepo();
  200. var result2 = thirdPartyRepo.UpdateToken(accountValidate.UserName, tokenResponse); // update after expiried
  201. }
  202. _response.ResponseCode = "1";
  203. _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage ?? result.StatusDescription : result.Content;
  204. }
  205. }
  206. catch (Exception ex)
  207. {
  208. if (_response == null)
  209. _response = new TPResponse();
  210. _response.ResponseCode = "999";
  211. _response.Msg = ex.ToString();
  212. }
  213. return _response;
  214. }
  215. private TPResponse SendTransaction(SendTransaction sendTransaction)
  216. {
  217. TPResponse _response = new TPResponse() { Id = "1" };
  218. try
  219. {
  220. var client = new RestClient(baseUrl);
  221. var requestJson = string.Empty;
  222. BracPostTransactionRequest requestTxn = SendModelMap(sendTransaction);
  223. requestJson = JsonConvert.SerializeObject(requestTxn, Formatting.None);
  224. _log.Info($"{POST_TRANSACTION}|REQUEST : {requestJson}");
  225. _response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = requestJson }, "brac/GetJwtToken", out _response);
  226. var bearerToken = GetTokenFromDB(sendTransaction.UserName);
  227. var result = client.Execute<string>(BuildRequest<string>(POST_TRANSACTION, _response.Id, bearerToken.Token));
  228. // _log.Info($"{POST_TRANSACTION}|RESPONSE : {result.Content}");
  229. if (result.StatusCode == System.Net.HttpStatusCode.OK)
  230. {
  231. var res = result.Content;
  232. _response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = res }, "brac/GetPayLoad", out _response);
  233. _log.Info($"{POST_TRANSACTION}|RESPONSE : {JsonConvert.SerializeObject(_response, Formatting.Indented)}");
  234. if (_response.ResponseCode.Equals("0"))
  235. {
  236. var bracResponse = JObject.Parse(_response.Data.ToString());
  237. _response.Msg = bracResponse["StatusDescription"].ToString();
  238. _response.Extra = _response.Data.ToString();
  239. _response.Id = bracResponse["StatusCode"].ToString();
  240. var sData = JsonConvert.DeserializeObject<BracPostTransactionResponse>(_response.Data.ToString());
  241. _response.Msg = sData.StatusDescription;
  242. _response.Data = sData;
  243. if (bracResponse["Success"] != null &&
  244. bracResponse["Success"].ToString().Equals("True") && bracResponse["StatusCode"].ToString().Equals("800"))
  245. {
  246. _response.ResponseCode = "0";
  247. _response.Extra = sData.Data.TTReferenceNo;
  248. }
  249. else
  250. {
  251. _response.ResponseCode = "1";
  252. }
  253. }
  254. else
  255. {
  256. if (_response == null)
  257. {
  258. _response = new TPResponse();
  259. }
  260. _response.ResponseCode = "1";
  261. _response.Msg = "brac/GetPayLoad is null";
  262. }
  263. }
  264. else
  265. {
  266. if (result.StatusCode.Equals("403"))
  267. {
  268. var tokenResponse = GetTokenFromDB(username, true);
  269. ThirdPartyRepo thirdPartyRepo = new ThirdPartyRepo();
  270. var result2 = thirdPartyRepo.UpdateToken(sendTransaction.UserName, tokenResponse); // update after expiried
  271. }
  272. _response.ResponseCode = "1";
  273. _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : result.Content;
  274. }
  275. }
  276. catch (Exception)
  277. {
  278. throw;
  279. }
  280. return _response;
  281. }
  282. private BracPostTransactionRequest SendModelMap(SendTransaction model)
  283. {
  284. var r = new BracPostTransactionRequest
  285. {
  286. TTReferenceNo = model.Transaction.JMEControlNo,
  287. BeneficiaryName = model.Receiver.RFullName,
  288. BeneficiaryPhoneNo = model.Receiver.RMobile,
  289. BeneficiaryIdentityType = "",
  290. BeneficiaryIdentityNumber = "",
  291. BeneficiaryAddress = model.Receiver.RAdd1.Trim(),
  292. BeneficiaryAccountNo = model.Receiver.RAccountNo,
  293. DistrictISOCode = model.Receiver.RStateId,
  294. ThanaCode = "",
  295. TTAmount = Convert.ToDouble(model.Transaction.PAmt),
  296. SenderName = model.Sender.SFullName,
  297. SenderCountryCode = model.Sender.SNativeCountry,
  298. ModeOfPayment = model.Transaction.PaymentType,
  299. SenderDocumentNumber = model.Sender.SIdNo,
  300. SenderNationality = model.Sender.SNativeCountry,
  301. SenderDob = model.Sender.SBirthDate,
  302. SenderMsisdn = model.Sender.SMobile,
  303. RoutingNo = model.Receiver.RLocation,
  304. Purpose = model.Transaction.PurposeOfRemittanceName,
  305. BeneficiaryRelation = model.Receiver.RelWithSenderName,
  306. BeneficiaryCountry = model.Receiver.RNativeCountry,
  307. BeneficiaryCurrency = model.Transaction.PCurr,
  308. SenderCurrencyCode = model.Transaction.CollCurr,
  309. WalletPartner = Convert.ToInt32(model.Agent.PBankType),
  310. SenderDocumentType = model.Sender.SIdType,
  311. SenderAddress = model.Sender.SAddress.Trim()
  312. };
  313. if (r.ModeOfPayment.Equals("02") | r.ModeOfPayment.Equals("06"))
  314. {
  315. r.BeneficiaryName = GetStatic.Truncate(r.BeneficiaryName, 22);
  316. }
  317. if (!string.IsNullOrEmpty(model.Receiver.RMobile))
  318. {
  319. r.BeneficiaryPhoneNo = getRecFormattedNumber(model.Receiver.RMobile);
  320. }
  321. if (!string.IsNullOrEmpty(model.Sender.SMobile))
  322. {
  323. r.SenderMsisdn = getSenderFormattedNumber(model.Sender.SMobile);
  324. }
  325. return r;
  326. }
  327. private string getSenderFormattedNumber(string number)
  328. {
  329. string finalNo = number;
  330. if (!number.Contains("+81"))
  331. {
  332. string mobileFirst = number.Substring(0, 1);
  333. if (mobileFirst == "0")
  334. {
  335. if (number.Length == 11)
  336. {
  337. finalNo = "+81" + number.Substring(1, number.Length - 1);
  338. return finalNo;
  339. }
  340. else if (number.Length < 11)
  341. {
  342. finalNo = $"+81{number}";
  343. }
  344. }
  345. else if (number.Substring(0, 1) != "0" && number.Length == 10)
  346. {
  347. finalNo = $"+81{number}";
  348. }
  349. }
  350. else if (number.Contains("+81"))
  351. {
  352. string MobN = number.Substring(4, 1);
  353. if (MobN == "0" && number.Length > 14)
  354. {
  355. finalNo = number.Remove(4, 1);
  356. }
  357. }
  358. if (!finalNo.Substring(0, 1).Contains("+"))
  359. finalNo = $"+{finalNo}";
  360. return finalNo;
  361. }
  362. private string getRecFormattedNumber(string number)
  363. {
  364. string finalNo = number;
  365. if (!number.Contains("+88"))
  366. {
  367. string mobileFirst = number.Substring(0, 1);
  368. if (mobileFirst == "0")
  369. {
  370. if (number.Length == 11)
  371. {
  372. finalNo = "+88" + number.Substring(1, number.Length - 1);
  373. return finalNo;
  374. }
  375. else if (number.Length < 11)
  376. {
  377. finalNo = $"+88{number}";
  378. }
  379. }
  380. else if (number.Substring(0, 1) != "0" && number.Length == 10)
  381. {
  382. finalNo = $"+88{number}";
  383. }
  384. }
  385. else if (number.Contains("+88"))
  386. {
  387. string MobN = number.Substring(4, 1);
  388. if (MobN == "0" && number.Length > 14)
  389. {
  390. finalNo = number.Remove(4, 1);
  391. }
  392. }
  393. if (!finalNo.Substring(0, 1).Contains("+"))
  394. finalNo = $"+{finalNo}";
  395. return finalNo;
  396. }
  397. private TPResponse GetBankList(BankRequest bank)
  398. {
  399. TPResponse _response = new TPResponse() { Id = "1" };
  400. if (bank.IsBranch)
  401. {
  402. return GetBankBranchList(bank);
  403. }
  404. try
  405. {
  406. var client = new RestClient(baseUrl);
  407. var requestJson = string.Empty;
  408. if (!string.IsNullOrEmpty(bank.PaymentMethod) && bank.PaymentMethod.Equals("NBSP"))
  409. requestJson = JsonConvert.SerializeObject(ConvetToNBSPbankRequest(bank), Formatting.None);
  410. else
  411. requestJson = JsonConvert.SerializeObject(ConvetTobracBankRequest(bank), Formatting.None);
  412. _log.Info($"{GET_CODES}|REQUEST : {requestJson}");
  413. _response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = requestJson }, "brac/GetJwtToken", out _response);
  414. if (_response == null)
  415. {
  416. if (_response == null)
  417. _response = new TPResponse();
  418. _response.Id = "1";
  419. _response.Msg = "brac/GetJwtToken is null";
  420. return _response;
  421. }
  422. else if (!_response.ResponseCode.Equals("0"))
  423. {
  424. return _response;
  425. }
  426. var bearerToken = GetTokenFromDB(bank.UserName);
  427. var result = client.Execute<string>(BuildRequest<string>(GET_CODES, _response.Id, bearerToken.Token));
  428. //_log.Info($"{ACCOUNT_VERIFY}|RESPONSE : {result.Content}");
  429. if (result.StatusCode == System.Net.HttpStatusCode.OK)
  430. {
  431. var res = result.Content;
  432. _response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = res }, "brac/GetPayLoad", out _response);
  433. _log.Info($"{ACCOUNT_VERIFY}|RESPONSE : {JsonConvert.SerializeObject(_response, Formatting.Indented)}");
  434. if (_response.ResponseCode.Equals("0"))
  435. {
  436. var bracResponse = JObject.Parse(_response.Data.ToString());
  437. _response.Msg = bracResponse["StatusDescription"].ToString();
  438. //_response.Extra = _response.Data.ToString();
  439. _response.Id = bracResponse["StatusCode"].ToString();
  440. if (bracResponse["Success"] != null && (bracResponse["Success"].ToString().ToLower().Equals("true")))
  441. {
  442. _response.ResponseCode = "0";
  443. _response.Data = JsonConvert.DeserializeObject<GetBankCodesResponse>(_response.Data.ToString()).Data;
  444. }
  445. }
  446. else
  447. {
  448. if (_response == null)
  449. {
  450. _response = new TPResponse();
  451. _response.ResponseCode = "1";
  452. _response.Msg = "brac/GetPayLoad is null";
  453. }
  454. return _response;
  455. }
  456. }
  457. else
  458. {
  459. _response.ResponseCode = "1";
  460. _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage ?? result.StatusDescription : result.Content;
  461. }
  462. }
  463. catch (Exception)
  464. {
  465. throw;
  466. }
  467. return _response;
  468. }
  469. private GetBankCodes ConvetTobracBankRequest(BankRequest bank)
  470. {
  471. return new GetBankCodes()
  472. {
  473. QueryType = bank.QueryType < 0 ? 4 : bank.QueryType
  474. };
  475. }
  476. private GetBranchCodes ConvetTobracBranchRequest(BankRequest bank)
  477. {
  478. return new GetBranchCodes()
  479. {
  480. QueryType = bank.QueryType,
  481. QuerySubType = Convert.ToInt32(bank.BankName)
  482. };
  483. }
  484. private GetBranchCodes ConvetToNBSPbankRequest(BankRequest bank)
  485. {
  486. return new GetBranchCodes()
  487. {
  488. QueryType = bank.QueryType,
  489. QuerySubType = 6
  490. };
  491. }
  492. private GetBranchCodes ConvetTobracBranchOnlyRequest(BankRequest bank)
  493. {
  494. return new GetBranchCodes()
  495. {
  496. QueryType = 1,
  497. QuerySubType = Convert.ToInt32(bank.BankName)
  498. };
  499. }
  500. private TPResponse GetAccountBalance(StaticData staticData)
  501. {
  502. TPResponse _response = new TPResponse() { Id = "1" };
  503. try
  504. {
  505. var client = new RestClient(baseUrl);
  506. var requestJson = string.Empty;
  507. var bearerToken = GetTokenFromDB(staticData.UserName);
  508. var result = client.Execute<string>(BuildRequest<string>(GET_ACCOUNTBALANCE, "", bearerToken.Token));
  509. if (result.StatusCode == HttpStatusCode.OK)
  510. {
  511. var res = result.Content;
  512. _response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = res }, "brac/GetPayLoad", out _response);
  513. _log.Info($"{GET_ACCOUNTBALANCE}|RESPONSE : {JsonConvert.SerializeObject(_response)}");
  514. if (_response.ResponseCode.Equals("0"))
  515. {
  516. var bracResponse = JObject.Parse(_response.Data.ToString());
  517. _response.Msg = bracResponse["StatusDescription"].ToString();
  518. _response.Id = bracResponse["StatusCode"].ToString();
  519. _response.Data = JsonConvert.DeserializeObject<AccountBalanceReponse>(_response.Data.ToString());
  520. }
  521. else
  522. {
  523. if (_response == null)
  524. {
  525. _response = new TPResponse();
  526. }
  527. _response.ResponseCode = "1";
  528. _response.Msg = "brac/GetPayLoad is null";
  529. }
  530. }
  531. else
  532. {
  533. _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage ?? result.StatusDescription : result.Content;
  534. }
  535. }
  536. catch (Exception ex)
  537. {
  538. if (_response == null)
  539. _response = new TPResponse();
  540. _response.ResponseCode = "999";
  541. _response.Msg = ex.ToString();
  542. }
  543. return _response;
  544. }
  545. private TPResponse GetAgentList(AgentRequest agent)
  546. {
  547. return GetBankBranchList(new BankRequest() { UserName = agent.UserName, BankName = agent.ExternalBankId }, true);
  548. }
  549. private TPResponse GetBankBranchList(BankRequest bank, bool onlyBranch = false)
  550. {
  551. TPResponse _response = new TPResponse() { Id = "1" };
  552. try
  553. {
  554. var client = new RestClient(baseUrl);
  555. var requestJson = string.Empty;
  556. if (onlyBranch)
  557. {
  558. requestJson = JsonConvert.SerializeObject(ConvetTobracBranchOnlyRequest(bank), Formatting.None);
  559. }
  560. else
  561. {
  562. requestJson = JsonConvert.SerializeObject(ConvetTobracBranchRequest(bank), Formatting.None);
  563. }
  564. if (onlyBranch)
  565. _log.Info($"{GET_MAPPING_CODES}|REQUEST : {requestJson}");
  566. else
  567. _log.Info($"{ GET_CODES}|REQUEST : {requestJson}");
  568. _response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = requestJson }, "brac/GetJwtToken", out _response);
  569. if (_response == null)
  570. {
  571. if (_response == null)
  572. _response = new TPResponse();
  573. _response.Id = "1";
  574. _response.Msg = "brac/GetJwtToken is null";
  575. return _response;
  576. }
  577. else if (!_response.ResponseCode.Equals("0"))
  578. {
  579. return _response;
  580. }
  581. var bearerToken = GetTokenFromDB(bank.UserName);
  582. var result = client.Execute<string>(BuildRequest<string>(onlyBranch ? GET_MAPPING_CODES : GET_CODES, _response.Id, bearerToken.Token));
  583. _log.Info($"{ACCOUNT_VERIFY}|RESPONSE : {result.Content}");
  584. if (result.StatusCode == System.Net.HttpStatusCode.OK)
  585. {
  586. var res = result.Content;
  587. _response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = res }, "brac/GetPayLoad", out _response);
  588. if (_response.ResponseCode.Equals("0"))
  589. {
  590. var bracResponse = JObject.Parse(_response.Data.ToString());
  591. _response.Msg = bracResponse["StatusDescription"].ToString();
  592. //_response.Extra = _response.Data.ToString();
  593. _response.Id = bracResponse["StatusCode"].ToString();
  594. if (bracResponse["Success"] != null && (bracResponse["Success"].ToString().ToLower().Equals("true")))
  595. {
  596. _response.ResponseCode = "0";
  597. _response.Data = JsonConvert.DeserializeObject<GetBankCodesResponse>(_response.Data.ToString()).Data;
  598. // _response.Data = bracbranch.Select(x => new BankBranchResponse() { BankBranchID = x.CodeId.ToString(), BankBranchName = x.CodeName, BankID = x.ParentCodeId.ToString() }).ToList();
  599. }
  600. }
  601. else
  602. {
  603. if (_response == null)
  604. {
  605. _response = new TPResponse();
  606. _response.ResponseCode = "1";
  607. _response.Msg = "brac/GetPayLoad is null";
  608. }
  609. return _response;
  610. }
  611. }
  612. else
  613. {
  614. _response.ResponseCode = "1";
  615. _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage ?? result.StatusDescription : result.Content;
  616. }
  617. }
  618. catch (Exception ex)
  619. {
  620. throw ex;
  621. }
  622. return _response;
  623. }
  624. private TPResponse GetTxnStatus(GetStatus getStatus)
  625. {
  626. TPResponse _response = new TPResponse();
  627. try
  628. {
  629. var client = new RestClient(baseUrl);
  630. var requestJson = string.Empty;
  631. var statusRequest = ConvertToStatusRequest(getStatus);
  632. requestJson = JsonConvert.SerializeObject(statusRequest, Formatting.None);
  633. _log.Info($"{TRANSACTION_STATUS}|REQUEST : {requestJson}");
  634. _response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = requestJson }, "brac/GetJwtToken", out _response);
  635. if (_response == null)
  636. {
  637. if (_response == null)
  638. _response = new TPResponse();
  639. _response.Id = "1";
  640. _response.Msg = "brac/GetJwtToken is null";
  641. return _response;
  642. }
  643. else if (!_response.ResponseCode.Equals("0"))
  644. {
  645. return _response;
  646. }
  647. var bearerToken = GetTokenFromDB(getStatus.UserName);
  648. var result = client.Execute<string>(BuildRequest<string>(TRANSACTION_STATUS, _response.Id, bearerToken.Token));
  649. // _log.Info($"{TRANSACTION_STATUS}|RESPONSE : {result.Content}");
  650. if (result.StatusCode == System.Net.HttpStatusCode.OK)
  651. {
  652. var res = result.Content;
  653. _response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = res }, "brac/GetPayLoad", out _response);
  654. _log.Info($"{TRANSACTION_STATUS}|RESPONSE : {JsonConvert.SerializeObject(_response, Formatting.Indented)}");
  655. if (_response.ResponseCode.Equals("0"))
  656. {
  657. var bracResponse = JObject.Parse(_response.Data.ToString());
  658. _response.Msg = bracResponse["StatusDescription"].ToString();
  659. _response.Id = bracResponse["StatusCode"].ToString();
  660. var bracstatusResponses = JsonConvert.DeserializeObject<BracTranStatusResponse>(_response.Data.ToString());
  661. _response.Data = bracstatusResponses;
  662. if (bracResponse["Success"] != null && (bracResponse["Success"].ToString().ToLower().Equals("true")))
  663. {
  664. _response.ResponseCode = "0";
  665. var datam = bracstatusResponses.Data.SingleOrDefault(x => x.TTReferenceNo.Equals(getStatus.ControlNo));
  666. string paidStatus = "UNPAID";
  667. if (datam != null)
  668. {
  669. _response.Msg = datam.TTStatusDescription;
  670. _response.Extra2 = datam.TTStatusCode;
  671. if (datam.TTStatusCode == "000")
  672. paidStatus = "PAID";
  673. else if (datam.TTStatusCode == "407" & datam.TTStatusDescription.Contains("Cancellation"))
  674. paidStatus = "CANCELLED";
  675. }
  676. _response.ResponseCode = paidStatus == "PAID" ? "0" : "1";
  677. _response.Extra = paidStatus;
  678. //if (!_response.ResponseCode.Equals("0"))
  679. //{
  680. // _response.ResponseCode = "1";
  681. //}
  682. }
  683. }
  684. else
  685. {
  686. if (_response == null)
  687. {
  688. _response = new TPResponse();
  689. _response.ResponseCode = "1";
  690. _response.Msg = "brac/GetPayLoad is null";
  691. }
  692. return _response;
  693. }
  694. }
  695. }
  696. catch (Exception ex)
  697. {
  698. if (_response == null)
  699. _response = new TPResponse();
  700. _response.ResponseCode = "999";
  701. _response.Msg = ex.ToString();
  702. }
  703. return _response;
  704. }
  705. private BracTranStatus ConvertToStatusRequest(GetStatus getStatus)
  706. {
  707. return new BracTranStatus()
  708. {
  709. TTReferenceNo = getStatus.ControlNo,
  710. PostedDateFrom = getStatus.PostedDateFrom,
  711. PostedDateTo = getStatus.PostedDateTo
  712. };
  713. }
  714. private TPResponse CancelTxn(CancelTxn cancel)
  715. {
  716. TPResponse _response = new TPResponse();
  717. try
  718. {
  719. var client = new RestClient(baseUrl);
  720. var requestJson = string.Empty;
  721. var request = new BracTranCancel() { TTReferenceNo = cancel.PartnerPinNo, Reason = cancel.CancelReason };
  722. requestJson = JsonConvert.SerializeObject(request, Formatting.None);
  723. _log.Info($"{TRANSACTION_CANCEL}|REQUEST : {requestJson}");
  724. _response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = requestJson }, "brac/GetJwtToken", out _response);
  725. if (_response == null)
  726. {
  727. if (_response == null)
  728. _response = new TPResponse();
  729. _response.Id = "1";
  730. _response.Msg = "brac/GetJwtToken is null";
  731. return _response;
  732. }
  733. else if (!_response.ResponseCode.Equals("0"))
  734. {
  735. return _response;
  736. }
  737. var bearerToken = GetTokenFromDB(cancel.UserName);
  738. var result = client.Execute<string>(BuildRequest<string>(TRANSACTION_CANCEL, _response.Id, bearerToken.Token));
  739. // _log.Info($"{TRANSACTION_STATUS}|RESPONSE : {result.Content}");
  740. if (result.StatusCode == System.Net.HttpStatusCode.OK)
  741. {
  742. var res = result.Content;
  743. _response = apiHelper.ThirdPartyApi<JWTRequest, TPResponse>(new JWTRequest() { RequestString = res }, "brac/GetPayLoad", out _response);
  744. _log.Info($"{TRANSACTION_CANCEL}|RESPONSE : {JsonConvert.SerializeObject(_response, Formatting.Indented)}");
  745. if (_response.ResponseCode.Equals("0"))
  746. {
  747. var bracResponse = JObject.Parse(_response.Data.ToString());
  748. _response.Msg = bracResponse["StatusDescription"].ToString();
  749. _response.Id = bracResponse["StatusCode"].ToString();
  750. var bracCancelResponses = JsonConvert.DeserializeObject<BracTranCancelResponse>(_response.Data.ToString());
  751. _response.Data = bracCancelResponses;
  752. if (bracResponse["Success"] != null && (bracResponse["Success"].ToString().ToLower().Equals("true")))
  753. {
  754. _response.ResponseCode = "0";
  755. }
  756. else
  757. _response.ResponseCode = "1";
  758. }
  759. else
  760. {
  761. if (_response == null)
  762. {
  763. _response = new TPResponse();
  764. _response.ResponseCode = "1";
  765. _response.Msg = "brac/GetPayLoad is null";
  766. }
  767. return _response;
  768. }
  769. }
  770. }
  771. catch (Exception ex)
  772. {
  773. if (_response == null)
  774. _response = new TPResponse();
  775. _response.ResponseCode = "999";
  776. _response.Msg = ex.ToString();
  777. }
  778. return _response;
  779. }
  780. #region Helper
  781. private TokenData GetTokenFromDB(string user, bool is401 = false)
  782. {
  783. TokenResponse tokenResponse = new TokenResponse();
  784. TokenData res = new TokenData();
  785. ThirdPartyRepo thirdPartyRepo = new ThirdPartyRepo();
  786. if (is401)//if the token is expired, the response will be 401 unauthorized; get a new token.
  787. {
  788. tokenResponse = GetToken();
  789. var is401R = thirdPartyRepo.GetBracToken(user, tokenResponse.Data); // direct Request after 401
  790. if (is401R.ResponseCode == "0")
  791. {
  792. res.Token = is401R.Id;
  793. }
  794. }
  795. else
  796. {
  797. var result = thirdPartyRepo.GetBracToken(user, res);
  798. if (result.ResponseCode == "001") //First time
  799. {
  800. tokenResponse = GetToken();
  801. var result1 = thirdPartyRepo.GetBracToken(user, tokenResponse.Data);
  802. if (result1.ResponseCode == "0") //Save First Request
  803. {
  804. res.Token = result1.Id;
  805. }
  806. else if (result1.ResponseCode == "999") //expired
  807. {
  808. tokenResponse = GetToken();
  809. var result2 = thirdPartyRepo.UpdateToken(user, tokenResponse.Data); // update after expiried
  810. if (result2.ResponseCode == "0")
  811. {
  812. res.Token = result2.Id;
  813. }
  814. }
  815. }
  816. else if (result.ResponseCode == "0") //Save First Request
  817. {
  818. res.Token = result.Id;
  819. }
  820. else if (result.ResponseCode == "999") //expired
  821. {
  822. tokenResponse = GetToken();
  823. if (tokenResponse.Success && tokenResponse.StatusCode.Equals("801"))
  824. {
  825. var result2 = thirdPartyRepo.UpdateToken(user, tokenResponse.Data); // update after expiried
  826. if (result2.ResponseCode == "0")
  827. {
  828. res.Token = result2.Id;
  829. }
  830. }
  831. }
  832. }
  833. return res;
  834. }
  835. private RestRequest BuildRequest<T>(string action, string requestJWT, string bearerToken = "", Method method = Method.POST) where T : class
  836. {
  837. var request = new RestRequest(action, method);
  838. request.AddHeader("Content-Type", "text/plain");
  839. if (!string.IsNullOrEmpty(bearerToken))
  840. request.AddHeader("Authorization", string.Format("Bearer {0}", bearerToken));
  841. request.RequestFormat = DataFormat.None;
  842. request.AddParameter("text/plain", requestJWT, ParameterType.RequestBody);
  843. return request;
  844. }
  845. private static string Base64Encode(string plainText)
  846. {
  847. var plainTextBytes = Encoding.UTF8.GetBytes(plainText);
  848. return Convert.ToBase64String(plainTextBytes);
  849. }
  850. #endregion
  851. }
  852. }