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.

1102 lines
47 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Net.Http;
  7. using System.Net.Http.Headers;
  8. using System.Reflection;
  9. using System.Security.Cryptography;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using Common.Models.RequestResponse;
  13. using Common.Models.TxnModel;
  14. using Common.TPService;
  15. using Common.Utility;
  16. using log4net;
  17. using Newtonsoft.Json;
  18. using Wing.Model;
  19. using Newtonsoft.Json.Linq;
  20. using RestSharp;
  21. using Common.Models.Status;
  22. using java.security;
  23. using javax.crypto;
  24. using javax.crypto.spec;
  25. using Common.Models.Bank_Account;
  26. namespace Wing.ApiServices
  27. {
  28. public class WingApi : ITPApiServices
  29. {
  30. private readonly ILog _log = LogManager.GetLogger(typeof(WingApi));
  31. private readonly string userName;
  32. private readonly string password;
  33. private readonly string client_id;
  34. private readonly string client_secret;
  35. private readonly string grant_type;
  36. private readonly string wing_base_url;
  37. private const string Cash_Pickup_Validate = "/api/v2/remittance/noaccount/validate";
  38. private const string Cash_Pickup_Commit = "/api/v2/remittance/noaccount/commit";
  39. private const string Account_Validate = "/api/v2/remittance/validate";
  40. private const string Account_Commit = "/api/v2/remittance/commit";
  41. private const string CrossBank_Validate = "/api/v1/crossbank/validate";
  42. private const string CrossBank_Commit = "/api/v1/crossbank/commit";
  43. private const string Status_Inquiry_Cash = "/api/v1/remittance/txn_inquiry";
  44. private const string Status_Inquiry_Account = "/api/v1/remittance/txn_inquiry";
  45. private const string Status_Inquiry_CrossBank = "/api/v1/crossbank/txn_inquiry";
  46. private const string Validate_Customer_AccountNumber = "/api/v1/user/currency/";
  47. private const string Validate_CrossBank_AccountNumber = "/api/v1/crossbank/currency";
  48. private const string Auth_Token = "/oauth/token";
  49. private readonly string AES_KEY;
  50. private List<string> purpose = new List<string>() { "TRF_RELATVIE", "TRF_SETTLEMENT", "TRF_SAVING", "TRF_OTHERS" };
  51. private string access_token = string.Empty;
  52. public WingApi()
  53. {
  54. userName = GetStatic.ReadWebConfig("wing_userName", "");
  55. password = GetStatic.ReadWebConfig("wing_password", "");
  56. client_id = GetStatic.ReadWebConfig("wing_clientId", "");
  57. client_secret = GetStatic.ReadWebConfig("wing_clientSecret", "");
  58. grant_type = GetStatic.ReadWebConfig("wing_grantType", "");
  59. wing_base_url = GetStatic.ReadWebConfig("wing_baseURL", "");
  60. AES_KEY = GetStatic.ReadWebConfig("wing_AES_KEY", "HG58YZ3CR9");
  61. }
  62. public TPResponse GetTPResponse<T>(T model, string MethodName) where T : class
  63. {
  64. switch (MethodName)
  65. {
  66. case "send":
  67. return SendTransaction(model as SendTransaction);
  68. case "status":
  69. return GetStatus(model as GetStatus);
  70. case "verify":
  71. return VerifyAccount(model as AccountValidate, MethodName);
  72. default:
  73. throw new NotImplementedException();
  74. }
  75. }
  76. private TPResponse VerifyAccount(AccountValidate av, string methodname)
  77. {
  78. TPResponse _response = new TPResponse();
  79. try
  80. {
  81. var client = new RestClient(wing_base_url);
  82. var accountNumber = av.AccountNumber;
  83. access_token = GetAuthToken().AccessCode;
  84. //WingAccountVerifyRequest verifyAccountRequest = new WingAccountVerifyRequest();
  85. //var requestJson = JsonConvert.SerializeObject(verifyAccountRequest, Formatting.None);
  86. LogicalThreadContext.Properties["MethodName"] = "VerifyAccount";
  87. if (av.PaymentMode.ToLower()=="mobile wallet")
  88. {
  89. _log.Info($"{Validate_Customer_AccountNumber}|REQUEST : {av.AccountNumber}");
  90. var result = client.Execute<WingAccountVerifyResponse>(BuildRequest<WingAccountVerifyRequest>(Validate_Customer_AccountNumber + accountNumber, null, Method.GET, access_token));
  91. _log.Info($"{Validate_Customer_AccountNumber}|RESPONSE : {result.Content}");
  92. if (result.StatusCode == System.Net.HttpStatusCode.OK)
  93. {
  94. var res = result.Data;
  95. _response.Data = result.Data;
  96. _response.ResponseCode = "0";
  97. _response.Msg = "Success";
  98. _response.Id = res.wing_account;
  99. _response.Extra = res.wallet_currency;
  100. _response.Extra2 = res.account_name;
  101. }
  102. else
  103. {
  104. var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
  105. _response.ResponseCode = "1";
  106. _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}";
  107. }
  108. }
  109. else
  110. {
  111. CrossVerifyRequest crossVerifyRequest = new CrossVerifyRequest() { bank_account_number = av.AccountNumber, bank_name = av.BankCode };
  112. var jsonData = JsonConvert.SerializeObject(crossVerifyRequest);
  113. _log.Info($"{Validate_CrossBank_AccountNumber}|REQUEST : {jsonData}");
  114. var result = client.Execute<CrossVerifyResponse>(BuildRequest<CrossVerifyRequest>(Validate_CrossBank_AccountNumber, jsonData, Method.POST, access_token));
  115. _log.Info($"{Validate_CrossBank_AccountNumber}|RESPONSE : {result.Content}");
  116. if (result.StatusCode == System.Net.HttpStatusCode.OK)
  117. {
  118. var res = result.Data;
  119. _response.Data = result.Data;
  120. _response.ResponseCode = "0";
  121. _response.Msg = "Success";
  122. _response.Id = res.bank_code;
  123. _response.Extra = res.wallet_currency;
  124. _response.Extra2 = res.account_name;
  125. }
  126. else
  127. {
  128. var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
  129. _response.ResponseCode = "1";
  130. _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}";
  131. }
  132. }
  133. }
  134. catch (Exception ex)
  135. {
  136. _response.ResponseCode = "999";
  137. _response.Msg = ex.Message;
  138. }
  139. return _response;
  140. }
  141. private TPResponse GetStatus(GetStatus gs)
  142. {
  143. TPResponse _response = new TPResponse();
  144. string type = "";
  145. type = gs.PaymentMethod;
  146. if (type.ToLower() == "cash payment")
  147. {
  148. access_token = GetAuthToken().AccessCode;
  149. _response = GetCashStatus(gs);
  150. return _response;
  151. }
  152. if (type.ToLower() == "mobile wallet")
  153. {
  154. access_token = GetAuthToken().AccessCode;
  155. _response = GetAccountStatus(gs);
  156. return _response;
  157. }
  158. if (type.ToLower() == "bank deposit")
  159. {
  160. access_token = GetAuthToken().AccessCode;
  161. _response = GetCrossBankStatus(gs);
  162. return _response;
  163. }
  164. return _response;
  165. }
  166. private TPResponse SendTransaction(SendTransaction sT)
  167. {
  168. TPResponse _response = new TPResponse();
  169. string type = "";
  170. type = sT.Transaction.PaymentType;
  171. if (type.ToLower() == "cash payment")
  172. {
  173. access_token = GetAuthToken().AccessCode;
  174. var processvalidateResult = GetCashValidate(sT);
  175. if (processvalidateResult.ResponseCode.Equals("0"))
  176. {
  177. _response = GetCashCommit(access_token);
  178. }
  179. else
  180. _response = processvalidateResult;
  181. return _response;
  182. }
  183. else if (type.ToLower() == "mobile wallet")
  184. {
  185. access_token = GetAuthToken().AccessCode;
  186. var status = GetAccountStatus(new GetStatus() { ControlNo = sT.Transaction.JMEControlNo, IsFromPartnerPinNo = false });
  187. if (status.ResponseCode == "2") //"Transaction not found!"
  188. {
  189. var processvalidateResult = GetWingsAccountValidate(sT);
  190. if (processvalidateResult.ResponseCode.Equals("0"))
  191. {
  192. _response = GetWingsAccountCommit(access_token);
  193. }
  194. else
  195. _response = processvalidateResult;
  196. }
  197. else
  198. {
  199. _response.Data = status.Data;
  200. _response.ResponseCode = "1";
  201. _response.Extra = status.Extra;
  202. }
  203. return _response;
  204. }
  205. else if (type.ToLower() == "bank deposit")
  206. {
  207. access_token = GetAuthToken().AccessCode;
  208. var processvalidateResult = GetWingsCrossBankValidate(sT);
  209. if (processvalidateResult.ResponseCode.Equals("0"))
  210. {
  211. _response = GetWingsCrossBankCommit(access_token);
  212. }
  213. else
  214. _response = processvalidateResult;
  215. return _response;
  216. }
  217. else
  218. {
  219. _response.ResponseCode = "1";
  220. _response.Msg = $"Invalid Payment: {sT.Transaction.PaymentType}";
  221. }
  222. return _response;
  223. }
  224. private TPResponse GetRestApiUrl<RequestModel, ResponseModelForSucess, ResponseModelForFailed>(RequestModel model, string api_url, string type, string requestType, string MethodType = "post", string getObjectOnly = null)
  225. {
  226. TPResponse _tPResponse = new TPResponse() { ResponseCode = "0" };
  227. string commit_url = "";
  228. // WTokenResponse tokenResponse = new WTokenResponse();
  229. WTokenData tokenResponse = new WTokenData();
  230. using (HttpClient httpClient = new HttpClient())
  231. {
  232. try
  233. {
  234. _log.Info($"{api_url}|REQUEST : {JsonConvert.SerializeObject(model).ToString()}");
  235. httpClient.BaseAddress = new Uri(wing_base_url);
  236. // string tokenNo = GetAuthToken();
  237. tokenResponse = GetAuthToken();
  238. httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
  239. short timeOut = Convert.ToInt16(GetStatic.ReadWebConfig("transfast_apiTimeOutInSecond", "100"));
  240. httpClient.Timeout = new TimeSpan(0, 0, timeOut);
  241. //var result1 = client.Execute<string>(BuildRequest<string>(api_url, "", tokenNo));
  242. //if (result1.StatusCode == System.Net.HttpStatusCode.OK)
  243. //{
  244. // var res = result1.Content;
  245. //}
  246. //httpClient.PostAsync(api_url, result).Result;
  247. //var finalResult = result.Content.ReadAsStringAsync().Result;
  248. //if (result.StatusCode == System.Net.HttpStatusCode.OK)
  249. //{
  250. // _tPResponse.ResponseCode = "0";
  251. // // _tPResponse.Data = JsonConvert.DeserializeObject<ResponseModelForSucess>(result);
  252. // if (getObjectOnly != null)
  253. // _tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly);
  254. // return _tPResponse;
  255. //}
  256. // httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", tokenNo);
  257. // httpClient.DefaultRequestHeaders.Add("Authorization", tokenNo);
  258. httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenResponse.AccessCode);
  259. HttpResponseMessage resp = new HttpResponseMessage();
  260. string jsonData = JsonConvert.SerializeObject(model).ToString();
  261. StringContent jbdContent = new StringContent(jsonData, Encoding.UTF8, "application/json");
  262. if (MethodType.ToLower().Equals("get"))
  263. {
  264. resp = httpClient.GetAsync(api_url).Result;
  265. }
  266. if (MethodType.ToLower().Equals("put"))
  267. {
  268. resp = httpClient.PutAsync(api_url, jbdContent).Result;
  269. }
  270. if (MethodType.ToLower().Equals("post"))
  271. {
  272. resp = httpClient.PostAsync(api_url, jbdContent).Result;
  273. }
  274. // resp = httpClient.PostAsync(api_url, jbdContent).Result;
  275. string result = resp.Content.ReadAsStringAsync().Result;
  276. _log.Info($"{api_url}|RESPONSE : {result}");
  277. if (requestType == "send")
  278. {
  279. if (resp.IsSuccessStatusCode)
  280. {
  281. _tPResponse.ResponseCode = "0";
  282. if (type == "Cash")
  283. {
  284. commit_url = $"{wing_base_url}{Cash_Pickup_Commit}";
  285. }
  286. if (type == "Account")
  287. {
  288. commit_url = $"{wing_base_url}{Account_Commit}";
  289. }
  290. if (type == "CrossBank")
  291. {
  292. commit_url = $"{wing_base_url}{CrossBank_Commit}";
  293. }
  294. jsonData = $"{{}}";
  295. StringContent jbdContent1 = new StringContent(jsonData, Encoding.UTF8, "application/json");
  296. resp = httpClient.PostAsync(commit_url, jbdContent1).Result;
  297. // Task<HttpResponseMessage> task = httpClient.PostAsync(commit_url, new{}).Result;
  298. result = resp.Content.ReadAsStringAsync().Result;
  299. _log.Info($"{api_url}|RESPONSE : {result}");
  300. _tPResponse.Data = JsonConvert.DeserializeObject<ResponseModelForSucess>(result);
  301. if (getObjectOnly != null)
  302. _tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly);
  303. return _tPResponse;
  304. }
  305. else
  306. {
  307. _tPResponse.ResponseCode = "1";
  308. _tPResponse.Data = JsonConvert.DeserializeObject<ResponseModelForFailed>(result);
  309. if (resp.StatusCode.ToString().ToLower() != "notfound")
  310. {
  311. _tPResponse.Msg = "Status Code: " + resp.StatusCode.ToString().Replace("<br/>", "").Replace(Environment.NewLine, "") + " " + GetResponseMessage(_tPResponse.Data as WingSendTxnFailedResponse);
  312. }
  313. else
  314. {
  315. _tPResponse.Msg = "Status Code:" + resp.StatusCode.ToString();
  316. }
  317. if (getObjectOnly != null)
  318. _tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly);
  319. return _tPResponse;
  320. }
  321. }
  322. else
  323. {
  324. if (resp.IsSuccessStatusCode)
  325. {
  326. _tPResponse.ResponseCode = "0";
  327. _tPResponse.Data = JsonConvert.DeserializeObject<ResponseModelForSucess>(result);
  328. if (getObjectOnly != null)
  329. _tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly);
  330. return _tPResponse;
  331. }
  332. else
  333. {
  334. _tPResponse.Msg = "Status Code:" + resp.StatusCode.ToString();
  335. }
  336. if (getObjectOnly != null)
  337. _tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly);
  338. return _tPResponse;
  339. }
  340. }
  341. catch (HttpRequestException ex)
  342. {
  343. _tPResponse.ResponseCode = "999";
  344. _tPResponse.Msg = ex.Message;
  345. _tPResponse.Data = ex.Data;
  346. }
  347. };
  348. return _tPResponse;
  349. }
  350. private string GetResponseMessage(WingSendTxnFailedResponse txnFail)
  351. {
  352. throw new NotImplementedException();
  353. }
  354. private TPResponse GetOnlyRequiredData(TPResponse response, string objectName)
  355. {
  356. if (response.Data != null)
  357. {
  358. PropertyInfo fieldName = response.Data.GetType().GetProperty(objectName);
  359. object values = fieldName.GetValue(response.Data, null);
  360. response.Data = values;
  361. }
  362. return response;
  363. }
  364. // public static async Task<TResult> PostFormUrlEncoded<TResult>(string url, IEnumerable<KeyValuePair<string, string>> postData)
  365. private WTokenData GetAuthToken()
  366. {
  367. //WTokenResponse tokenResponse = new WTokenResponse();
  368. WTokenData tokenResponse = new WTokenData();
  369. string token_url = $"{wing_base_url}{Auth_Token}";
  370. try
  371. {
  372. using (HttpClient httpClient = new HttpClient())
  373. {
  374. var data = new Dictionary<string, string>
  375. {
  376. { "username", userName },
  377. { "password", password},
  378. { "client_id", client_id},
  379. { "client_secret", client_secret },
  380. { "grant_type", grant_type }
  381. };
  382. var content = new FormUrlEncodedContent(data);
  383. content.Headers.Clear();
  384. content.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
  385. var response = httpClient.PostAsync(token_url, content).Result;
  386. string resultData = response.Content.ReadAsStringAsync().Result;
  387. if (response.IsSuccessStatusCode)
  388. {
  389. var resp = JObject.Parse(resultData.ToString());
  390. tokenResponse.AccessCode = access_token = resp["access_token"].ToString();
  391. }
  392. }
  393. }
  394. catch (Exception ex)
  395. {
  396. tokenResponse.AccessCode = "0";
  397. tokenResponse.Scope = ex.ToString();
  398. }
  399. return tokenResponse;
  400. }
  401. #region Map Model
  402. private WingSendTxnRequestCash MapSendTransactionDataCash(SendTransaction sT)
  403. {
  404. WingSendTxnRequestCash r = new WingSendTxnRequestCash()
  405. {
  406. first_name = $"{sT.Sender.SFirstName}{ (!string.IsNullOrEmpty(sT.Sender.SMiddleName) ? " " + sT.Sender.SMiddleName : "")}",
  407. last_name = sT.Sender.SLastName1,
  408. gender = sT.Sender.SGender,
  409. id_number = sT.Sender.SIdNo,
  410. id_type = sT.Sender.SIdType,
  411. nationality = sT.Sender.SCountryName,
  412. date_of_birth = sT.Sender.SBirthDate,
  413. country_of_birth = sT.Sender.SNativeCountry,
  414. occupation = sT.Sender.SOccuptionName,
  415. sender_account = sT.Sender.FormOfPaymentId,
  416. country_code = "JPN",
  417. receiver_phone = sT.Receiver.RMobile,
  418. receiver_name = sT.Receiver.RFullName,
  419. amount = sT.Transaction.PAmt,
  420. currency = sT.Transaction.PCurr,
  421. purpose = purpose.Contains(sT.Transaction.PurposeOfRemittanceName) ? sT.Transaction.PurposeOfRemittanceName : "TRF_OTHERS",
  422. // other = sT.Transaction.PayoutMsg,
  423. ext_transaction_id = sT.TranId.ToString(),
  424. ext_transaction_date = sT.Transaction.TxnDate
  425. };
  426. return r;
  427. }
  428. private WingSendTxnRequestAcc MapSendTransactionDataAcc(SendTransaction sT)
  429. {
  430. return new WingSendTxnRequestAcc()
  431. {
  432. first_name = $"{sT.Sender.SFirstName}{ (!string.IsNullOrEmpty(sT.Sender.SMiddleName) ? " " + sT.Sender.SMiddleName : "")}",
  433. last_name = sT.Sender.SLastName1,
  434. gender = sT.Sender.SGender,
  435. id_number = sT.Sender.SIdNo,
  436. id_type = sT.Sender.SIdType,
  437. nationality = sT.Sender.SCountryName,
  438. date_of_birth = sT.Sender.SBirthDate,
  439. country_of_birth = sT.Sender.SNativeCountry,
  440. occupation = sT.Sender.SOccuptionName,
  441. sender_account = sT.Sender.FormOfPaymentId,
  442. country_code = "JPN",
  443. receiver_account = sT.Receiver.RAccountNo,
  444. receiver_name = sT.Receiver.RFullName,
  445. amount = sT.Transaction.PAmt,
  446. currency = sT.Transaction.PCurr,
  447. purpose = purpose.Contains(sT.Transaction.PurposeOfRemittanceName) ? sT.Transaction.PurposeOfRemittanceName : "TRF_OTHERS",
  448. // other = sT.Transaction.PayoutMsg,
  449. ext_transaction_id = sT.Transaction.JMEControlNo.ToString(),
  450. ext_transaction_date = sT.Transaction.TxnDate
  451. };
  452. }
  453. private WingSendTxnRequestCrossBank MapSendTransactionDataCrossBank(SendTransaction sT)
  454. {
  455. return new WingSendTxnRequestCrossBank()
  456. {
  457. amount = sT.Transaction.PAmt,
  458. currency = sT.Transaction.PCurr,
  459. first_name = sT.Sender.SFirstName,
  460. last_name = sT.Sender.SLastName1,
  461. gender = sT.Sender.SGender,
  462. date_of_birth = sT.Sender.SBirthDate,
  463. occupation = sT.Sender.SOccuptionName,
  464. id_type = sT.Sender.SIdType,
  465. id_number = sT.Sender.SIdNo,
  466. nationality = sT.Sender.SCountryName,
  467. country_of_birth = sT.Sender.SNativeCountry,
  468. purpose = sT.Transaction.PurposeOfRemittanceName,
  469. country_code = "JPN",
  470. sender_passport = sT.Sender.SIdNo,
  471. bank_name = sT.Agent.PBankId,
  472. bank_account_number = sT.Receiver.RAccountNo,
  473. receiver_currency = sT.Transaction.PCurr,
  474. receiver_name = sT.Receiver.RFullName,
  475. receiver_phone = sT.Receiver.RMobile,
  476. receiver_id_number = sT.Receiver.ReceiverId,
  477. receiver_date_of_birth = sT.Receiver.RDob?? DateTime.Now.AddYears(-20).ToString("ddMMyyyy"),
  478. receiver_passport = sT.Receiver.RIdNo,
  479. receiver_nationality = sT.Receiver.RCountry.Replace("CAMBODIA", "Cambodian"),
  480. receiver_address = sT.Receiver.RAdd1,
  481. ext_transaction_id = sT.Transaction.JMEControlNo,
  482. ext_transaction_date = sT.Transaction.TxnDate
  483. };
  484. }
  485. private WingGetStatus MapGetStatus(GetStatus gs)
  486. {
  487. return new WingGetStatus()
  488. {
  489. transaction_id = gs.ControlNo,
  490. use_wing_id = gs.IsFromPartnerPinNo
  491. };
  492. }
  493. #endregion Map Model
  494. private RestRequest BuildRequest<T>(string action, string requestJWT, Method method, string bearerToken = "") where T : class
  495. {
  496. var request = new RestRequest(action, method);
  497. if (!string.IsNullOrEmpty(bearerToken))
  498. request.AddHeader("Authorization", string.Format("Bearer {0}", bearerToken));
  499. request.AddHeader("Content-Type", "application/json"); // add HTTP Headers
  500. request.RequestFormat = DataFormat.Json;
  501. request.AddParameter("application/json", requestJWT, ParameterType.RequestBody);
  502. return request;
  503. }
  504. public TPResponse GetCashValidate(SendTransaction _txnDTO)
  505. {
  506. TPResponse _response = new TPResponse();
  507. try
  508. {
  509. var client = new RestClient(wing_base_url);
  510. var wSendModel = MapSendTransactionDataCash(_txnDTO);
  511. var requestJson = JsonConvert.SerializeObject(wSendModel, Formatting.None);
  512. LogicalThreadContext.Properties["MethodName"] = "Cash_Pickup_Validate";
  513. _log.Info($"{Cash_Pickup_Validate}|REQUEST : {requestJson}");
  514. var result = client.Execute<WingSendTxnResponseCash>(BuildRequest<WingSendTxnRequestCash>(Cash_Pickup_Validate, requestJson, Method.POST, access_token));
  515. _log.Info($"{Cash_Pickup_Validate}|RESPONSE : {result.Content}");
  516. if (result.StatusCode == System.Net.HttpStatusCode.OK)
  517. {
  518. var res = result.Data;
  519. _response.Data = result.Data;
  520. _response.ResponseCode = "0";
  521. _response.Msg = "Success";
  522. }
  523. else
  524. {
  525. var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
  526. _response.ResponseCode = "1";
  527. _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}";
  528. }
  529. }
  530. catch (Exception ex)
  531. {
  532. _response.ResponseCode = "999";
  533. _response.Msg = ex.Message;
  534. }
  535. return _response;
  536. }
  537. public TPResponse GetCashCommit(string access_token)
  538. {
  539. TPResponse _response = new TPResponse();
  540. try
  541. {
  542. var client = new RestClient(wing_base_url);
  543. CashCommitRequest cashCommitRequest = new CashCommitRequest();
  544. var requestJson = JsonConvert.SerializeObject(cashCommitRequest, Formatting.None);
  545. LogicalThreadContext.Properties["MethodName"] = "Cash_Pickup_Commit";
  546. _log.Info($"{Cash_Pickup_Commit}|REQUEST : {access_token}");
  547. var result = client.Execute<WingSendTxnResponseCash>(BuildRequest<CashCommitRequest>(Cash_Pickup_Commit, requestJson, Method.POST, access_token));
  548. _log.Info($"{Cash_Pickup_Commit}|RESPONSE : {result.Content}");
  549. if (result.StatusCode == System.Net.HttpStatusCode.OK)
  550. {
  551. var res = result.Data;
  552. _response.Data = result.Data;
  553. _response.ResponseCode = "0";
  554. _response.Msg = "Success";
  555. _response.Id = res.transaction_id;// partnerid;
  556. // _response.Extra = res.passcode;
  557. _response.Extra = decrypt(res.passcode);
  558. }
  559. else
  560. {
  561. var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
  562. _response.ResponseCode = "1";
  563. _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.error_description}";
  564. }
  565. }
  566. catch (Exception ex)
  567. {
  568. _response.ResponseCode = "999";
  569. _response.Msg = ex.Message;
  570. }
  571. return _response;
  572. }
  573. public TPResponse GetWingsAccountValidate(SendTransaction _txnDTO)
  574. {
  575. TPResponse _response = new TPResponse();
  576. try
  577. {
  578. var client = new RestClient(wing_base_url);
  579. var wSendModel = MapSendTransactionDataAcc(_txnDTO);
  580. var requestJson = JsonConvert.SerializeObject(wSendModel, Formatting.None);
  581. LogicalThreadContext.Properties["MethodName"] = "Account_Validate";
  582. _log.Info($"{Account_Validate}|REQUEST : {requestJson}");
  583. var result = client.Execute<WingSendTxnResponseAcc>(BuildRequest<WingSendTxnRequestAcc>(Account_Validate, requestJson, Method.POST, access_token));
  584. _log.Info($"{Account_Validate}|RESPONSE : {result.Content}");
  585. if (result.StatusCode == HttpStatusCode.OK)
  586. {
  587. var res = result.Data;
  588. _response.Data = result.Data;
  589. _response.ResponseCode = "0";
  590. _response.Msg = "Success";
  591. }
  592. else
  593. {
  594. var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
  595. _response.ResponseCode = "1";
  596. _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}";
  597. }
  598. }
  599. catch (Exception ex)
  600. {
  601. _response.ResponseCode = "999";
  602. _response.Msg = ex.Message;
  603. }
  604. return _response;
  605. }
  606. public TPResponse GetWingsAccountCommit(string access_token)
  607. {
  608. TPResponse _response = new TPResponse();
  609. try
  610. {
  611. var client = new RestClient(wing_base_url);
  612. CashCommitRequest cashCommitRequest = new CashCommitRequest();
  613. var requestJson = JsonConvert.SerializeObject(cashCommitRequest, Formatting.None);
  614. LogicalThreadContext.Properties["MethodName"] = "Account_Commit";
  615. _log.Info($"{Account_Commit}|REQUEST : {access_token}");
  616. var result = client.Execute<WingSendTxnResponseAcc>(BuildRequest<CashCommitRequest>(Account_Commit, requestJson, Method.POST, access_token));
  617. _log.Info($"{Cash_Pickup_Commit}|RESPONSE : {result.Content}");
  618. if (result.StatusCode == System.Net.HttpStatusCode.OK)
  619. {
  620. var res = result.Data;
  621. _response.Data = result.Data;
  622. _response.ResponseCode = "0";
  623. _response.Msg = "Success";
  624. _response.Id = res.transaction_id;// partnerid;
  625. }
  626. else
  627. {
  628. var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
  629. _response.ResponseCode = "1";
  630. _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.error_description}";
  631. }
  632. }
  633. catch (Exception ex)
  634. {
  635. _response.ResponseCode = "999";
  636. _response.Msg = ex.Message;
  637. }
  638. return _response;
  639. }
  640. public TPResponse GetWingsCrossBankValidate(SendTransaction _txnDTO)
  641. {
  642. TPResponse _response = new TPResponse();
  643. try
  644. {
  645. var client = new RestClient(wing_base_url);
  646. var wSendModel = MapSendTransactionDataCrossBank(_txnDTO);
  647. var requestJson = JsonConvert.SerializeObject(wSendModel, Formatting.None);
  648. LogicalThreadContext.Properties["MethodName"] = "CrossBank_Validate";
  649. _log.Info($"{CrossBank_Validate}|REQUEST : {requestJson}");
  650. var result = client.Execute<WingSendTxnResponseCrossBank>(BuildRequest<WingSendTxnRequestCrossBank>(CrossBank_Validate, requestJson, Method.POST, access_token));
  651. _log.Info($"{CrossBank_Validate}|RESPONSE : {result.Content}");
  652. if (result.StatusCode == HttpStatusCode.OK)
  653. {
  654. var res = result.Data;
  655. _response.Data = result.Data;
  656. _response.ResponseCode = "0";
  657. _response.Msg = "Success";
  658. }
  659. else
  660. {
  661. var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
  662. _response.ResponseCode = "1";
  663. _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}";
  664. }
  665. }
  666. catch (Exception ex)
  667. {
  668. _response.ResponseCode = "999";
  669. _response.Msg = ex.Message;
  670. }
  671. return _response;
  672. }
  673. public TPResponse GetWingsCrossBankCommit(string access_token)
  674. {
  675. TPResponse _response = new TPResponse();
  676. try
  677. {
  678. var client = new RestClient(wing_base_url);
  679. CashCommitRequest cashCommitRequest = new CashCommitRequest();
  680. var requestJson = JsonConvert.SerializeObject(cashCommitRequest, Formatting.None);
  681. LogicalThreadContext.Properties["MethodName"] = "CrossBank_Commit";
  682. _log.Info($"{CrossBank_Commit}|REQUEST : {access_token}");
  683. var result = client.Execute<WingSendTxnResponseAcc>(BuildRequest<CashCommitRequest>(CrossBank_Commit, requestJson, Method.POST, access_token));
  684. _log.Info($"{CrossBank_Commit}|RESPONSE : {result.Content}");
  685. if (result.StatusCode == System.Net.HttpStatusCode.OK)
  686. {
  687. var res = result.Data;
  688. _response.Data = result.Data;
  689. _response.ResponseCode = "0";
  690. _response.Msg = "Success";
  691. _response.Id = res.transaction_id;// partnerid;
  692. }
  693. else
  694. {
  695. var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
  696. _response.ResponseCode = "1";
  697. _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.error_description}";
  698. }
  699. }
  700. catch (Exception ex)
  701. {
  702. _response.ResponseCode = "999";
  703. _response.Msg = ex.Message;
  704. }
  705. return _response;
  706. }
  707. public TPResponse GetCashStatus(GetStatus gs)
  708. {
  709. TPResponse _response = new TPResponse();
  710. try
  711. {
  712. access_token = GetAuthToken().AccessCode;
  713. var client = new RestClient(wing_base_url);
  714. var model = MapGetStatus(gs);
  715. var requestJson = JsonConvert.SerializeObject(model, Formatting.None);
  716. LogicalThreadContext.Properties["MethodName"] = "Status_Inquiry_Cash";
  717. _log.Info($"{Status_Inquiry_Cash}|REQUEST : {requestJson}");
  718. var result = client.Execute<WingGetStatusResponseCash>(BuildRequest<WingGetStatus>(Status_Inquiry_Cash, requestJson, Method.POST, access_token));
  719. _log.Info($"{Status_Inquiry_Cash}|RESPONSE : {result.Content}");
  720. if (result.StatusCode == System.Net.HttpStatusCode.OK)
  721. {
  722. var res = result.Data;
  723. _response.Data = result.Data;
  724. _response.Extra = "UN-PAID";
  725. _response.ResponseCode = "0";
  726. _response.Msg = "Success";
  727. if (!string.IsNullOrEmpty(res.cashout_status) && res.cashout_status.Equals("Complete"))
  728. {
  729. _response.Extra = "PAID";
  730. }
  731. }
  732. else if (result.StatusCode == System.Net.HttpStatusCode.Accepted)
  733. {
  734. var res = result.Data;
  735. _response.Data = res;
  736. if (!string.IsNullOrEmpty(res.error_code) && res.error_code.Equals("006035"))
  737. {
  738. _response.ResponseCode = "2";
  739. _response.Extra = "NOTFOUND";
  740. }
  741. _response.Msg = res.message;
  742. }
  743. else
  744. {
  745. var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
  746. _response.ResponseCode = "1";
  747. _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}";
  748. }
  749. }
  750. catch (Exception ex)
  751. {
  752. _response.ResponseCode = "999";
  753. _response.Msg = ex.Message;
  754. }
  755. return _response;
  756. }
  757. public TPResponse GetAccountStatus(GetStatus gs)
  758. {
  759. TPResponse _response = new TPResponse();
  760. try
  761. {
  762. access_token = GetAuthToken().AccessCode;
  763. var client = new RestClient(wing_base_url);
  764. var model = MapGetStatus(gs);
  765. var requestJson = JsonConvert.SerializeObject(model, Formatting.None);
  766. LogicalThreadContext.Properties["MethodName"] = "Status_Inquiry_Account";
  767. _log.Info($"{Status_Inquiry_Account}|REQUEST : {requestJson}");
  768. var result = client.Execute<WingGetStatusResponseAccount>(BuildRequest<WingGetStatus>(Status_Inquiry_Account, requestJson, Method.POST, access_token));
  769. _log.Info($"{Status_Inquiry_Account}|RESPONSE : {result.Content}");
  770. if (result.StatusCode == System.Net.HttpStatusCode.OK)
  771. {
  772. var res = result.Data;
  773. _response.Data = res;
  774. if (!string.IsNullOrEmpty(res.transaction_status) && res.transaction_status.Equals("200"))
  775. {
  776. _response.Extra = "PAID";
  777. }
  778. _response.ResponseCode = "0";
  779. _response.Msg = "Success";
  780. }
  781. else if (result.StatusCode == System.Net.HttpStatusCode.Accepted)
  782. {
  783. var res = result.Data;
  784. _response.Data = res;
  785. _response.Extra2 = !string.IsNullOrEmpty(res.error_code) ? res.error_code : "";
  786. if (!string.IsNullOrEmpty(res.error_code) && res.error_code.Equals("006035"))
  787. {
  788. _response.ResponseCode = "2";
  789. _response.Extra = "NOTFOUND";
  790. }
  791. _response.Msg = res.message;
  792. }
  793. else
  794. {
  795. var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
  796. _response.ResponseCode = "1";
  797. _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}";
  798. _response.Extra = "UNPAID";
  799. }
  800. }
  801. catch (Exception ex)
  802. {
  803. _response.ResponseCode = "999";
  804. _response.Msg = ex.Message;
  805. }
  806. return _response;
  807. }
  808. public TPResponse GetCrossBankStatus(GetStatus gs)
  809. {
  810. TPResponse _response = new TPResponse();
  811. try
  812. {
  813. access_token = GetAuthToken().AccessCode;
  814. var client = new RestClient(wing_base_url);
  815. var model = MapGetStatus(gs);
  816. var requestJson = JsonConvert.SerializeObject(model, Formatting.None);
  817. LogicalThreadContext.Properties["MethodName"] = "Status_Inquiry_CrossBank";
  818. _log.Info($"{Status_Inquiry_CrossBank}|REQUEST : {requestJson}");
  819. var result = client.Execute<WingGetStatusResponseCrossBank>(BuildRequest<WingGetStatus>(Status_Inquiry_CrossBank, requestJson, Method.POST, access_token));
  820. _log.Info($"{Status_Inquiry_CrossBank}|RESPONSE : {result.Content}");
  821. if (result.StatusCode == System.Net.HttpStatusCode.OK)
  822. {
  823. var res = result.Data;
  824. _response.Data = result.Data;
  825. if (!string.IsNullOrEmpty(res.transaction_status) && res.transaction_status.Equals("Success"))
  826. {
  827. _response.Extra = "PAID";
  828. }
  829. _response.ResponseCode = "0";
  830. _response.Msg = "Success";
  831. }
  832. else if (result.StatusCode == System.Net.HttpStatusCode.Accepted)
  833. {
  834. var res = result.Data;
  835. _response.Data = res;
  836. _response.Extra2 = !string.IsNullOrEmpty(res.error_code) ? res.error_code : "";
  837. if (!string.IsNullOrEmpty(res.error_code) && res.error_code.Equals("006035"))
  838. {
  839. _response.ResponseCode = "2";
  840. _response.Extra = "NOTFOUND";
  841. }
  842. _response.Msg = res.message;
  843. }
  844. else
  845. {
  846. var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
  847. _response.ResponseCode = "1";
  848. _response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}";
  849. }
  850. }
  851. catch (Exception ex)
  852. {
  853. _response.ResponseCode = "999";
  854. _response.Msg = ex.Message;
  855. }
  856. return _response;
  857. }
  858. #region
  859. private string encrypt(string orignalText)
  860. {
  861. string encodedText = null;
  862. try
  863. {
  864. //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
  865. //ORIGINAL LINE: final java.security.MessageDigest md = java.security.MessageDigest.getInstance("SHA-256");
  866. MessageDigest md = MessageDigest.getInstance("SHA-256");
  867. //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
  868. //ORIGINAL LINE: final byte[] digestOfPassword = md.digest(AES_KEY.getBytes("utf-8"));
  869. byte[] bytes = Encoding.UTF8.GetBytes("HG58YZ3CR9");
  870. byte[] digestOfPassword = md.digest(bytes);
  871. //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
  872. //ORIGINAL LINE: final javax.crypto.SecretKey key = new javax.crypto.spec.SecretKeySpec(digestOfPassword, "AES");
  873. SecretKey key = new SecretKeySpec(digestOfPassword, "AES");
  874. //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
  875. //ORIGINAL LINE: final javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("AES/CBC/PKCS5Padding");
  876. Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
  877. //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
  878. //ORIGINAL LINE: final javax.crypto.spec.IvParameterSpec iv = new javax.crypto.spec.IvParameterSpec(new byte[16]);
  879. IvParameterSpec iv = new IvParameterSpec(new byte[16]);
  880. cipher.init(Cipher.ENCRYPT_MODE, key, iv);
  881. //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
  882. //ORIGINAL LINE: final byte[] plainTextBytes = orignalText.getBytes("utf-8");
  883. byte[] plainTextBytes = Encoding.UTF8.GetBytes(orignalText);
  884. // byte[] plainTextBytes = orignalText.GetBytes(Encoding.UTF8);
  885. //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
  886. //ORIGINAL LINE: final byte[] encodeTextBytes = cipher.doFinal(plainTextBytes);
  887. byte[] encodeTextBytes = cipher.doFinal(plainTextBytes);
  888. encodedText = (Convert.ToBase64String(encodeTextBytes));
  889. }
  890. catch (Exception e)
  891. {
  892. throw new ApplicationException("", e);
  893. }
  894. return encodedText;
  895. }
  896. public static string NewString(byte[] bytes)
  897. {
  898. return NewString(bytes, 0, bytes.Length);
  899. }
  900. public static string NewString(byte[] bytes, int index, int count)
  901. {
  902. return System.Text.Encoding.UTF8.GetString((byte[])(object)bytes, index, count);
  903. }
  904. public static string NewString(byte[] bytes, string encoding)
  905. {
  906. return NewString(bytes, 0, bytes.Length, encoding);
  907. }
  908. public static string NewString(byte[] bytes, int index, int count, string encoding)
  909. {
  910. return System.Text.Encoding.GetEncoding(encoding).GetString((byte[])(object)bytes, index, count);
  911. }
  912. public string decrypt(string orignalText)
  913. {
  914. //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
  915. //ORIGINAL LINE: final java.security.MessageDigest md = java.security.MessageDigest.getInstance("SHA-256");
  916. MessageDigest md = MessageDigest.getInstance("SHA-256");
  917. //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
  918. //ORIGINAL LINE: final byte[] digestOfPassword = md.digest(AES_KEY.getBytes("utf-8"));
  919. byte[] bytes = Encoding.UTF8.GetBytes(AES_KEY);
  920. byte[] digestOfPassword = md.digest(bytes);
  921. //sbyte[] digestOfPassword = md.digest(AES_KEY.GetBytes(Encoding.UTF8));
  922. //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
  923. //ORIGINAL LINE: final javax.crypto.SecretKey key = new javax.crypto.spec.SecretKeySpec(digestOfPassword, "AES");
  924. SecretKey key = new SecretKeySpec(digestOfPassword, "AES");
  925. //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
  926. //ORIGINAL LINE: final javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("AES/CBC/PKCS5Padding");
  927. Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
  928. cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(new byte[16]));
  929. //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
  930. //ORIGINAL LINE: final byte[] plainTextBytes = org.apache.commons.codec.binary.Base64.decodeBase64(orignalText);
  931. byte[] plainTextBytes = Convert.FromBase64String(orignalText);
  932. //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
  933. //ORIGINAL LINE: final byte[] encodeTextBytes = cipher.doFinal(plainTextBytes);
  934. byte[] encodeTextBytes = cipher.doFinal(plainTextBytes);
  935. return NewString(encodeTextBytes);
  936. }
  937. #endregion
  938. }
  939. }