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
1102 lines
47 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Net.Http;
|
|
using System.Net.Http.Headers;
|
|
using System.Reflection;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Common.Models.RequestResponse;
|
|
using Common.Models.TxnModel;
|
|
using Common.TPService;
|
|
using Common.Utility;
|
|
using log4net;
|
|
using Newtonsoft.Json;
|
|
using Wing.Model;
|
|
using Newtonsoft.Json.Linq;
|
|
using RestSharp;
|
|
using Common.Models.Status;
|
|
using java.security;
|
|
using javax.crypto;
|
|
using javax.crypto.spec;
|
|
using Common.Models.Bank_Account;
|
|
|
|
namespace Wing.ApiServices
|
|
{
|
|
public class WingApi : ITPApiServices
|
|
{
|
|
private readonly ILog _log = LogManager.GetLogger(typeof(WingApi));
|
|
private readonly string userName;
|
|
private readonly string password;
|
|
private readonly string client_id;
|
|
private readonly string client_secret;
|
|
private readonly string grant_type;
|
|
private readonly string wing_base_url;
|
|
|
|
private const string Cash_Pickup_Validate = "/api/v2/remittance/noaccount/validate";
|
|
private const string Cash_Pickup_Commit = "/api/v2/remittance/noaccount/commit";
|
|
private const string Account_Validate = "/api/v2/remittance/validate";
|
|
private const string Account_Commit = "/api/v2/remittance/commit";
|
|
private const string CrossBank_Validate = "/api/v1/crossbank/validate";
|
|
private const string CrossBank_Commit = "/api/v1/crossbank/commit";
|
|
private const string Status_Inquiry_Cash = "/api/v1/remittance/txn_inquiry";
|
|
private const string Status_Inquiry_Account = "/api/v1/remittance/txn_inquiry";
|
|
private const string Status_Inquiry_CrossBank = "/api/v1/crossbank/txn_inquiry";
|
|
private const string Validate_Customer_AccountNumber = "/api/v1/user/currency/";
|
|
private const string Validate_CrossBank_AccountNumber = "/api/v1/crossbank/currency";
|
|
private const string Auth_Token = "/oauth/token";
|
|
|
|
private readonly string AES_KEY;
|
|
private List<string> purpose = new List<string>() { "TRF_RELATVIE", "TRF_SETTLEMENT", "TRF_SAVING", "TRF_OTHERS" };
|
|
private string access_token = string.Empty;
|
|
|
|
public WingApi()
|
|
{
|
|
userName = GetStatic.ReadWebConfig("wing_userName", "");
|
|
password = GetStatic.ReadWebConfig("wing_password", "");
|
|
client_id = GetStatic.ReadWebConfig("wing_clientId", "");
|
|
client_secret = GetStatic.ReadWebConfig("wing_clientSecret", "");
|
|
grant_type = GetStatic.ReadWebConfig("wing_grantType", "");
|
|
wing_base_url = GetStatic.ReadWebConfig("wing_baseURL", "");
|
|
AES_KEY = GetStatic.ReadWebConfig("wing_AES_KEY", "HG58YZ3CR9");
|
|
|
|
}
|
|
|
|
public TPResponse GetTPResponse<T>(T model, string MethodName) where T : class
|
|
{
|
|
switch (MethodName)
|
|
{
|
|
case "send":
|
|
return SendTransaction(model as SendTransaction);
|
|
case "status":
|
|
return GetStatus(model as GetStatus);
|
|
case "verify":
|
|
return VerifyAccount(model as AccountValidate, MethodName);
|
|
default:
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
|
|
private TPResponse VerifyAccount(AccountValidate av, string methodname)
|
|
{
|
|
TPResponse _response = new TPResponse();
|
|
try
|
|
{
|
|
var client = new RestClient(wing_base_url);
|
|
var accountNumber = av.AccountNumber;
|
|
access_token = GetAuthToken().AccessCode;
|
|
|
|
//WingAccountVerifyRequest verifyAccountRequest = new WingAccountVerifyRequest();
|
|
//var requestJson = JsonConvert.SerializeObject(verifyAccountRequest, Formatting.None);
|
|
|
|
LogicalThreadContext.Properties["MethodName"] = "VerifyAccount";
|
|
|
|
if (av.PaymentMode.ToLower()=="mobile wallet")
|
|
{
|
|
_log.Info($"{Validate_Customer_AccountNumber}|REQUEST : {av.AccountNumber}");
|
|
var result = client.Execute<WingAccountVerifyResponse>(BuildRequest<WingAccountVerifyRequest>(Validate_Customer_AccountNumber + accountNumber, null, Method.GET, access_token));
|
|
_log.Info($"{Validate_Customer_AccountNumber}|RESPONSE : {result.Content}");
|
|
|
|
if (result.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
|
|
var res = result.Data;
|
|
_response.Data = result.Data;
|
|
_response.ResponseCode = "0";
|
|
_response.Msg = "Success";
|
|
_response.Id = res.wing_account;
|
|
_response.Extra = res.wallet_currency;
|
|
_response.Extra2 = res.account_name;
|
|
}
|
|
else
|
|
{
|
|
var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
|
|
_response.ResponseCode = "1";
|
|
_response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
CrossVerifyRequest crossVerifyRequest = new CrossVerifyRequest() { bank_account_number = av.AccountNumber, bank_name = av.BankCode };
|
|
var jsonData = JsonConvert.SerializeObject(crossVerifyRequest);
|
|
|
|
_log.Info($"{Validate_CrossBank_AccountNumber}|REQUEST : {jsonData}");
|
|
var result = client.Execute<CrossVerifyResponse>(BuildRequest<CrossVerifyRequest>(Validate_CrossBank_AccountNumber, jsonData, Method.POST, access_token));
|
|
_log.Info($"{Validate_CrossBank_AccountNumber}|RESPONSE : {result.Content}");
|
|
|
|
if (result.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
|
|
var res = result.Data;
|
|
_response.Data = result.Data;
|
|
_response.ResponseCode = "0";
|
|
_response.Msg = "Success";
|
|
_response.Id = res.bank_code;
|
|
_response.Extra = res.wallet_currency;
|
|
_response.Extra2 = res.account_name;
|
|
}
|
|
else
|
|
{
|
|
var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
|
|
_response.ResponseCode = "1";
|
|
_response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}";
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_response.ResponseCode = "999";
|
|
_response.Msg = ex.Message;
|
|
}
|
|
return _response;
|
|
}
|
|
|
|
private TPResponse GetStatus(GetStatus gs)
|
|
{
|
|
TPResponse _response = new TPResponse();
|
|
string type = "";
|
|
type = gs.PaymentMethod;
|
|
if (type.ToLower() == "cash payment")
|
|
{
|
|
access_token = GetAuthToken().AccessCode;
|
|
_response = GetCashStatus(gs);
|
|
return _response;
|
|
}
|
|
if (type.ToLower() == "mobile wallet")
|
|
{
|
|
access_token = GetAuthToken().AccessCode;
|
|
_response = GetAccountStatus(gs);
|
|
return _response;
|
|
}
|
|
if (type.ToLower() == "bank deposit")
|
|
{
|
|
access_token = GetAuthToken().AccessCode;
|
|
_response = GetCrossBankStatus(gs);
|
|
return _response;
|
|
}
|
|
return _response;
|
|
}
|
|
|
|
|
|
private TPResponse SendTransaction(SendTransaction sT)
|
|
{
|
|
TPResponse _response = new TPResponse();
|
|
string type = "";
|
|
type = sT.Transaction.PaymentType;
|
|
if (type.ToLower() == "cash payment")
|
|
{
|
|
access_token = GetAuthToken().AccessCode;
|
|
var processvalidateResult = GetCashValidate(sT);
|
|
|
|
if (processvalidateResult.ResponseCode.Equals("0"))
|
|
{
|
|
_response = GetCashCommit(access_token);
|
|
}
|
|
else
|
|
_response = processvalidateResult;
|
|
|
|
return _response;
|
|
}
|
|
else if (type.ToLower() == "mobile wallet")
|
|
{
|
|
access_token = GetAuthToken().AccessCode;
|
|
|
|
var status = GetAccountStatus(new GetStatus() { ControlNo = sT.Transaction.JMEControlNo, IsFromPartnerPinNo = false });
|
|
if (status.ResponseCode == "2") //"Transaction not found!"
|
|
{
|
|
var processvalidateResult = GetWingsAccountValidate(sT);
|
|
|
|
if (processvalidateResult.ResponseCode.Equals("0"))
|
|
{
|
|
_response = GetWingsAccountCommit(access_token);
|
|
}
|
|
else
|
|
_response = processvalidateResult;
|
|
}
|
|
else
|
|
{
|
|
_response.Data = status.Data;
|
|
_response.ResponseCode = "1";
|
|
_response.Extra = status.Extra;
|
|
|
|
}
|
|
|
|
return _response;
|
|
}
|
|
else if (type.ToLower() == "bank deposit")
|
|
{
|
|
access_token = GetAuthToken().AccessCode;
|
|
var processvalidateResult = GetWingsCrossBankValidate(sT);
|
|
|
|
if (processvalidateResult.ResponseCode.Equals("0"))
|
|
{
|
|
_response = GetWingsCrossBankCommit(access_token);
|
|
}
|
|
else
|
|
_response = processvalidateResult;
|
|
|
|
return _response;
|
|
}
|
|
else
|
|
{
|
|
_response.ResponseCode = "1";
|
|
_response.Msg = $"Invalid Payment: {sT.Transaction.PaymentType}";
|
|
}
|
|
return _response;
|
|
}
|
|
|
|
private TPResponse GetRestApiUrl<RequestModel, ResponseModelForSucess, ResponseModelForFailed>(RequestModel model, string api_url, string type, string requestType, string MethodType = "post", string getObjectOnly = null)
|
|
{
|
|
TPResponse _tPResponse = new TPResponse() { ResponseCode = "0" };
|
|
string commit_url = "";
|
|
// WTokenResponse tokenResponse = new WTokenResponse();
|
|
WTokenData tokenResponse = new WTokenData();
|
|
using (HttpClient httpClient = new HttpClient())
|
|
{
|
|
try
|
|
{
|
|
_log.Info($"{api_url}|REQUEST : {JsonConvert.SerializeObject(model).ToString()}");
|
|
|
|
httpClient.BaseAddress = new Uri(wing_base_url);
|
|
// string tokenNo = GetAuthToken();
|
|
tokenResponse = GetAuthToken();
|
|
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
|
|
short timeOut = Convert.ToInt16(GetStatic.ReadWebConfig("transfast_apiTimeOutInSecond", "100"));
|
|
httpClient.Timeout = new TimeSpan(0, 0, timeOut);
|
|
|
|
//var result1 = client.Execute<string>(BuildRequest<string>(api_url, "", tokenNo));
|
|
//if (result1.StatusCode == System.Net.HttpStatusCode.OK)
|
|
//{
|
|
// var res = result1.Content;
|
|
|
|
//}
|
|
|
|
//httpClient.PostAsync(api_url, result).Result;
|
|
//var finalResult = result.Content.ReadAsStringAsync().Result;
|
|
|
|
//if (result.StatusCode == System.Net.HttpStatusCode.OK)
|
|
//{
|
|
// _tPResponse.ResponseCode = "0";
|
|
// // _tPResponse.Data = JsonConvert.DeserializeObject<ResponseModelForSucess>(result);
|
|
// if (getObjectOnly != null)
|
|
// _tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly);
|
|
// return _tPResponse;
|
|
//}
|
|
|
|
|
|
// httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", tokenNo);
|
|
// httpClient.DefaultRequestHeaders.Add("Authorization", tokenNo);
|
|
|
|
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenResponse.AccessCode);
|
|
HttpResponseMessage resp = new HttpResponseMessage();
|
|
|
|
string jsonData = JsonConvert.SerializeObject(model).ToString();
|
|
StringContent jbdContent = new StringContent(jsonData, Encoding.UTF8, "application/json");
|
|
|
|
if (MethodType.ToLower().Equals("get"))
|
|
{
|
|
resp = httpClient.GetAsync(api_url).Result;
|
|
}
|
|
if (MethodType.ToLower().Equals("put"))
|
|
{
|
|
resp = httpClient.PutAsync(api_url, jbdContent).Result;
|
|
}
|
|
if (MethodType.ToLower().Equals("post"))
|
|
{
|
|
resp = httpClient.PostAsync(api_url, jbdContent).Result;
|
|
}
|
|
|
|
// resp = httpClient.PostAsync(api_url, jbdContent).Result;
|
|
|
|
string result = resp.Content.ReadAsStringAsync().Result;
|
|
|
|
_log.Info($"{api_url}|RESPONSE : {result}");
|
|
|
|
if (requestType == "send")
|
|
{
|
|
if (resp.IsSuccessStatusCode)
|
|
{
|
|
_tPResponse.ResponseCode = "0";
|
|
|
|
if (type == "Cash")
|
|
{
|
|
commit_url = $"{wing_base_url}{Cash_Pickup_Commit}";
|
|
}
|
|
if (type == "Account")
|
|
{
|
|
commit_url = $"{wing_base_url}{Account_Commit}";
|
|
}
|
|
if (type == "CrossBank")
|
|
{
|
|
commit_url = $"{wing_base_url}{CrossBank_Commit}";
|
|
}
|
|
jsonData = $"{{}}";
|
|
StringContent jbdContent1 = new StringContent(jsonData, Encoding.UTF8, "application/json");
|
|
resp = httpClient.PostAsync(commit_url, jbdContent1).Result;
|
|
|
|
// Task<HttpResponseMessage> task = httpClient.PostAsync(commit_url, new{}).Result;
|
|
result = resp.Content.ReadAsStringAsync().Result;
|
|
|
|
_log.Info($"{api_url}|RESPONSE : {result}");
|
|
|
|
|
|
_tPResponse.Data = JsonConvert.DeserializeObject<ResponseModelForSucess>(result);
|
|
if (getObjectOnly != null)
|
|
_tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly);
|
|
return _tPResponse;
|
|
}
|
|
else
|
|
{
|
|
_tPResponse.ResponseCode = "1";
|
|
_tPResponse.Data = JsonConvert.DeserializeObject<ResponseModelForFailed>(result);
|
|
if (resp.StatusCode.ToString().ToLower() != "notfound")
|
|
{
|
|
_tPResponse.Msg = "Status Code: " + resp.StatusCode.ToString().Replace("<br/>", "").Replace(Environment.NewLine, "") + " " + GetResponseMessage(_tPResponse.Data as WingSendTxnFailedResponse);
|
|
}
|
|
else
|
|
{
|
|
_tPResponse.Msg = "Status Code:" + resp.StatusCode.ToString();
|
|
}
|
|
if (getObjectOnly != null)
|
|
_tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly);
|
|
return _tPResponse;
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
if (resp.IsSuccessStatusCode)
|
|
{
|
|
_tPResponse.ResponseCode = "0";
|
|
|
|
_tPResponse.Data = JsonConvert.DeserializeObject<ResponseModelForSucess>(result);
|
|
if (getObjectOnly != null)
|
|
_tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly);
|
|
return _tPResponse;
|
|
}
|
|
else
|
|
{
|
|
_tPResponse.Msg = "Status Code:" + resp.StatusCode.ToString();
|
|
}
|
|
if (getObjectOnly != null)
|
|
_tPResponse = GetOnlyRequiredData(_tPResponse, getObjectOnly);
|
|
return _tPResponse;
|
|
|
|
}
|
|
}
|
|
catch (HttpRequestException ex)
|
|
{
|
|
_tPResponse.ResponseCode = "999";
|
|
_tPResponse.Msg = ex.Message;
|
|
_tPResponse.Data = ex.Data;
|
|
}
|
|
};
|
|
|
|
return _tPResponse;
|
|
}
|
|
|
|
private string GetResponseMessage(WingSendTxnFailedResponse txnFail)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
|
|
private TPResponse GetOnlyRequiredData(TPResponse response, string objectName)
|
|
{
|
|
if (response.Data != null)
|
|
{
|
|
PropertyInfo fieldName = response.Data.GetType().GetProperty(objectName);
|
|
object values = fieldName.GetValue(response.Data, null);
|
|
response.Data = values;
|
|
}
|
|
return response;
|
|
}
|
|
|
|
// public static async Task<TResult> PostFormUrlEncoded<TResult>(string url, IEnumerable<KeyValuePair<string, string>> postData)
|
|
private WTokenData GetAuthToken()
|
|
{
|
|
//WTokenResponse tokenResponse = new WTokenResponse();
|
|
WTokenData tokenResponse = new WTokenData();
|
|
|
|
string token_url = $"{wing_base_url}{Auth_Token}";
|
|
try
|
|
{
|
|
using (HttpClient httpClient = new HttpClient())
|
|
{
|
|
var data = new Dictionary<string, string>
|
|
{
|
|
{ "username", userName },
|
|
{ "password", password},
|
|
{ "client_id", client_id},
|
|
{ "client_secret", client_secret },
|
|
{ "grant_type", grant_type }
|
|
};
|
|
var content = new FormUrlEncodedContent(data);
|
|
|
|
content.Headers.Clear();
|
|
content.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
|
|
|
|
var response = httpClient.PostAsync(token_url, content).Result;
|
|
string resultData = response.Content.ReadAsStringAsync().Result;
|
|
|
|
if (response.IsSuccessStatusCode)
|
|
{
|
|
var resp = JObject.Parse(resultData.ToString());
|
|
tokenResponse.AccessCode = access_token = resp["access_token"].ToString();
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
tokenResponse.AccessCode = "0";
|
|
tokenResponse.Scope = ex.ToString();
|
|
}
|
|
return tokenResponse;
|
|
}
|
|
|
|
#region Map Model
|
|
private WingSendTxnRequestCash MapSendTransactionDataCash(SendTransaction sT)
|
|
{
|
|
WingSendTxnRequestCash r = new WingSendTxnRequestCash()
|
|
{
|
|
first_name = $"{sT.Sender.SFirstName}{ (!string.IsNullOrEmpty(sT.Sender.SMiddleName) ? " " + sT.Sender.SMiddleName : "")}",
|
|
last_name = sT.Sender.SLastName1,
|
|
gender = sT.Sender.SGender,
|
|
id_number = sT.Sender.SIdNo,
|
|
id_type = sT.Sender.SIdType,
|
|
nationality = sT.Sender.SCountryName,
|
|
date_of_birth = sT.Sender.SBirthDate,
|
|
country_of_birth = sT.Sender.SNativeCountry,
|
|
occupation = sT.Sender.SOccuptionName,
|
|
sender_account = sT.Sender.FormOfPaymentId,
|
|
country_code = "JPN",
|
|
receiver_phone = sT.Receiver.RMobile,
|
|
receiver_name = sT.Receiver.RFullName,
|
|
amount = sT.Transaction.PAmt,
|
|
currency = sT.Transaction.PCurr,
|
|
purpose = purpose.Contains(sT.Transaction.PurposeOfRemittanceName) ? sT.Transaction.PurposeOfRemittanceName : "TRF_OTHERS",
|
|
// other = sT.Transaction.PayoutMsg,
|
|
ext_transaction_id = sT.TranId.ToString(),
|
|
ext_transaction_date = sT.Transaction.TxnDate
|
|
};
|
|
|
|
return r;
|
|
}
|
|
|
|
private WingSendTxnRequestAcc MapSendTransactionDataAcc(SendTransaction sT)
|
|
{
|
|
return new WingSendTxnRequestAcc()
|
|
{
|
|
first_name = $"{sT.Sender.SFirstName}{ (!string.IsNullOrEmpty(sT.Sender.SMiddleName) ? " " + sT.Sender.SMiddleName : "")}",
|
|
last_name = sT.Sender.SLastName1,
|
|
gender = sT.Sender.SGender,
|
|
id_number = sT.Sender.SIdNo,
|
|
id_type = sT.Sender.SIdType,
|
|
nationality = sT.Sender.SCountryName,
|
|
date_of_birth = sT.Sender.SBirthDate,
|
|
country_of_birth = sT.Sender.SNativeCountry,
|
|
occupation = sT.Sender.SOccuptionName,
|
|
sender_account = sT.Sender.FormOfPaymentId,
|
|
country_code = "JPN",
|
|
receiver_account = sT.Receiver.RAccountNo,
|
|
receiver_name = sT.Receiver.RFullName,
|
|
amount = sT.Transaction.PAmt,
|
|
currency = sT.Transaction.PCurr,
|
|
purpose = purpose.Contains(sT.Transaction.PurposeOfRemittanceName) ? sT.Transaction.PurposeOfRemittanceName : "TRF_OTHERS",
|
|
// other = sT.Transaction.PayoutMsg,
|
|
ext_transaction_id = sT.Transaction.JMEControlNo.ToString(),
|
|
ext_transaction_date = sT.Transaction.TxnDate
|
|
};
|
|
}
|
|
|
|
private WingSendTxnRequestCrossBank MapSendTransactionDataCrossBank(SendTransaction sT)
|
|
{
|
|
return new WingSendTxnRequestCrossBank()
|
|
{
|
|
amount = sT.Transaction.PAmt,
|
|
currency = sT.Transaction.PCurr,
|
|
first_name = sT.Sender.SFirstName,
|
|
last_name = sT.Sender.SLastName1,
|
|
gender = sT.Sender.SGender,
|
|
date_of_birth = sT.Sender.SBirthDate,
|
|
occupation = sT.Sender.SOccuptionName,
|
|
id_type = sT.Sender.SIdType,
|
|
id_number = sT.Sender.SIdNo,
|
|
nationality = sT.Sender.SCountryName,
|
|
country_of_birth = sT.Sender.SNativeCountry,
|
|
purpose = sT.Transaction.PurposeOfRemittanceName,
|
|
country_code = "JPN",
|
|
sender_passport = sT.Sender.SIdNo,
|
|
bank_name = sT.Agent.PBankId,
|
|
bank_account_number = sT.Receiver.RAccountNo,
|
|
receiver_currency = sT.Transaction.PCurr,
|
|
receiver_name = sT.Receiver.RFullName,
|
|
receiver_phone = sT.Receiver.RMobile,
|
|
receiver_id_number = sT.Receiver.ReceiverId,
|
|
receiver_date_of_birth = sT.Receiver.RDob?? DateTime.Now.AddYears(-20).ToString("ddMMyyyy"),
|
|
receiver_passport = sT.Receiver.RIdNo,
|
|
receiver_nationality = sT.Receiver.RCountry.Replace("CAMBODIA", "Cambodian"),
|
|
receiver_address = sT.Receiver.RAdd1,
|
|
ext_transaction_id = sT.Transaction.JMEControlNo,
|
|
ext_transaction_date = sT.Transaction.TxnDate
|
|
};
|
|
}
|
|
|
|
private WingGetStatus MapGetStatus(GetStatus gs)
|
|
{
|
|
return new WingGetStatus()
|
|
{
|
|
transaction_id = gs.ControlNo,
|
|
use_wing_id = gs.IsFromPartnerPinNo
|
|
};
|
|
}
|
|
|
|
#endregion Map Model
|
|
|
|
private RestRequest BuildRequest<T>(string action, string requestJWT, Method method, string bearerToken = "") where T : class
|
|
{
|
|
var request = new RestRequest(action, method);
|
|
|
|
if (!string.IsNullOrEmpty(bearerToken))
|
|
request.AddHeader("Authorization", string.Format("Bearer {0}", bearerToken));
|
|
|
|
request.AddHeader("Content-Type", "application/json"); // add HTTP Headers
|
|
|
|
request.RequestFormat = DataFormat.Json;
|
|
|
|
request.AddParameter("application/json", requestJWT, ParameterType.RequestBody);
|
|
|
|
return request;
|
|
}
|
|
|
|
public TPResponse GetCashValidate(SendTransaction _txnDTO)
|
|
{
|
|
TPResponse _response = new TPResponse();
|
|
try
|
|
{
|
|
var client = new RestClient(wing_base_url);
|
|
var wSendModel = MapSendTransactionDataCash(_txnDTO);
|
|
|
|
var requestJson = JsonConvert.SerializeObject(wSendModel, Formatting.None);
|
|
|
|
LogicalThreadContext.Properties["MethodName"] = "Cash_Pickup_Validate";
|
|
|
|
_log.Info($"{Cash_Pickup_Validate}|REQUEST : {requestJson}");
|
|
var result = client.Execute<WingSendTxnResponseCash>(BuildRequest<WingSendTxnRequestCash>(Cash_Pickup_Validate, requestJson, Method.POST, access_token));
|
|
_log.Info($"{Cash_Pickup_Validate}|RESPONSE : {result.Content}");
|
|
|
|
if (result.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
var res = result.Data;
|
|
_response.Data = result.Data;
|
|
_response.ResponseCode = "0";
|
|
_response.Msg = "Success";
|
|
}
|
|
else
|
|
{
|
|
var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
|
|
_response.ResponseCode = "1";
|
|
_response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}";
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_response.ResponseCode = "999";
|
|
_response.Msg = ex.Message;
|
|
}
|
|
return _response;
|
|
|
|
}
|
|
|
|
public TPResponse GetCashCommit(string access_token)
|
|
{
|
|
TPResponse _response = new TPResponse();
|
|
try
|
|
{
|
|
var client = new RestClient(wing_base_url);
|
|
|
|
CashCommitRequest cashCommitRequest = new CashCommitRequest();
|
|
var requestJson = JsonConvert.SerializeObject(cashCommitRequest, Formatting.None);
|
|
|
|
LogicalThreadContext.Properties["MethodName"] = "Cash_Pickup_Commit";
|
|
_log.Info($"{Cash_Pickup_Commit}|REQUEST : {access_token}");
|
|
var result = client.Execute<WingSendTxnResponseCash>(BuildRequest<CashCommitRequest>(Cash_Pickup_Commit, requestJson, Method.POST, access_token));
|
|
_log.Info($"{Cash_Pickup_Commit}|RESPONSE : {result.Content}");
|
|
|
|
if (result.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
var res = result.Data;
|
|
_response.Data = result.Data;
|
|
_response.ResponseCode = "0";
|
|
_response.Msg = "Success";
|
|
_response.Id = res.transaction_id;// partnerid;
|
|
// _response.Extra = res.passcode;
|
|
_response.Extra = decrypt(res.passcode);
|
|
|
|
}
|
|
else
|
|
{
|
|
var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
|
|
_response.ResponseCode = "1";
|
|
_response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.error_description}";
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_response.ResponseCode = "999";
|
|
_response.Msg = ex.Message;
|
|
}
|
|
return _response;
|
|
|
|
}
|
|
|
|
public TPResponse GetWingsAccountValidate(SendTransaction _txnDTO)
|
|
{
|
|
TPResponse _response = new TPResponse();
|
|
try
|
|
{
|
|
var client = new RestClient(wing_base_url);
|
|
var wSendModel = MapSendTransactionDataAcc(_txnDTO);
|
|
|
|
var requestJson = JsonConvert.SerializeObject(wSendModel, Formatting.None);
|
|
|
|
LogicalThreadContext.Properties["MethodName"] = "Account_Validate";
|
|
|
|
_log.Info($"{Account_Validate}|REQUEST : {requestJson}");
|
|
var result = client.Execute<WingSendTxnResponseAcc>(BuildRequest<WingSendTxnRequestAcc>(Account_Validate, requestJson, Method.POST, access_token));
|
|
_log.Info($"{Account_Validate}|RESPONSE : {result.Content}");
|
|
|
|
if (result.StatusCode == HttpStatusCode.OK)
|
|
{
|
|
var res = result.Data;
|
|
_response.Data = result.Data;
|
|
_response.ResponseCode = "0";
|
|
_response.Msg = "Success";
|
|
}
|
|
else
|
|
{
|
|
var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
|
|
_response.ResponseCode = "1";
|
|
_response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}";
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_response.ResponseCode = "999";
|
|
_response.Msg = ex.Message;
|
|
}
|
|
return _response;
|
|
|
|
}
|
|
|
|
public TPResponse GetWingsAccountCommit(string access_token)
|
|
{
|
|
TPResponse _response = new TPResponse();
|
|
try
|
|
{
|
|
var client = new RestClient(wing_base_url);
|
|
|
|
CashCommitRequest cashCommitRequest = new CashCommitRequest();
|
|
var requestJson = JsonConvert.SerializeObject(cashCommitRequest, Formatting.None);
|
|
|
|
LogicalThreadContext.Properties["MethodName"] = "Account_Commit";
|
|
_log.Info($"{Account_Commit}|REQUEST : {access_token}");
|
|
var result = client.Execute<WingSendTxnResponseAcc>(BuildRequest<CashCommitRequest>(Account_Commit, requestJson, Method.POST, access_token));
|
|
_log.Info($"{Cash_Pickup_Commit}|RESPONSE : {result.Content}");
|
|
|
|
if (result.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
var res = result.Data;
|
|
_response.Data = result.Data;
|
|
_response.ResponseCode = "0";
|
|
_response.Msg = "Success";
|
|
_response.Id = res.transaction_id;// partnerid;
|
|
|
|
}
|
|
else
|
|
{
|
|
var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
|
|
_response.ResponseCode = "1";
|
|
_response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.error_description}";
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_response.ResponseCode = "999";
|
|
_response.Msg = ex.Message;
|
|
}
|
|
return _response;
|
|
|
|
}
|
|
|
|
public TPResponse GetWingsCrossBankValidate(SendTransaction _txnDTO)
|
|
{
|
|
TPResponse _response = new TPResponse();
|
|
try
|
|
{
|
|
var client = new RestClient(wing_base_url);
|
|
|
|
var wSendModel = MapSendTransactionDataCrossBank(_txnDTO);
|
|
|
|
var requestJson = JsonConvert.SerializeObject(wSendModel, Formatting.None);
|
|
|
|
LogicalThreadContext.Properties["MethodName"] = "CrossBank_Validate";
|
|
|
|
_log.Info($"{CrossBank_Validate}|REQUEST : {requestJson}");
|
|
var result = client.Execute<WingSendTxnResponseCrossBank>(BuildRequest<WingSendTxnRequestCrossBank>(CrossBank_Validate, requestJson, Method.POST, access_token));
|
|
_log.Info($"{CrossBank_Validate}|RESPONSE : {result.Content}");
|
|
|
|
if (result.StatusCode == HttpStatusCode.OK)
|
|
{
|
|
var res = result.Data;
|
|
_response.Data = result.Data;
|
|
_response.ResponseCode = "0";
|
|
_response.Msg = "Success";
|
|
}
|
|
else
|
|
{
|
|
var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
|
|
_response.ResponseCode = "1";
|
|
_response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}";
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_response.ResponseCode = "999";
|
|
_response.Msg = ex.Message;
|
|
}
|
|
return _response;
|
|
|
|
}
|
|
|
|
public TPResponse GetWingsCrossBankCommit(string access_token)
|
|
{
|
|
TPResponse _response = new TPResponse();
|
|
try
|
|
{
|
|
var client = new RestClient(wing_base_url);
|
|
|
|
CashCommitRequest cashCommitRequest = new CashCommitRequest();
|
|
var requestJson = JsonConvert.SerializeObject(cashCommitRequest, Formatting.None);
|
|
|
|
LogicalThreadContext.Properties["MethodName"] = "CrossBank_Commit";
|
|
_log.Info($"{CrossBank_Commit}|REQUEST : {access_token}");
|
|
var result = client.Execute<WingSendTxnResponseAcc>(BuildRequest<CashCommitRequest>(CrossBank_Commit, requestJson, Method.POST, access_token));
|
|
_log.Info($"{CrossBank_Commit}|RESPONSE : {result.Content}");
|
|
|
|
if (result.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
var res = result.Data;
|
|
_response.Data = result.Data;
|
|
_response.ResponseCode = "0";
|
|
_response.Msg = "Success";
|
|
_response.Id = res.transaction_id;// partnerid;
|
|
|
|
}
|
|
else
|
|
{
|
|
var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
|
|
_response.ResponseCode = "1";
|
|
_response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.error_description}";
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_response.ResponseCode = "999";
|
|
_response.Msg = ex.Message;
|
|
}
|
|
return _response;
|
|
|
|
}
|
|
|
|
public TPResponse GetCashStatus(GetStatus gs)
|
|
{
|
|
TPResponse _response = new TPResponse();
|
|
try
|
|
{
|
|
access_token = GetAuthToken().AccessCode;
|
|
var client = new RestClient(wing_base_url);
|
|
var model = MapGetStatus(gs);
|
|
|
|
var requestJson = JsonConvert.SerializeObject(model, Formatting.None);
|
|
|
|
LogicalThreadContext.Properties["MethodName"] = "Status_Inquiry_Cash";
|
|
|
|
_log.Info($"{Status_Inquiry_Cash}|REQUEST : {requestJson}");
|
|
var result = client.Execute<WingGetStatusResponseCash>(BuildRequest<WingGetStatus>(Status_Inquiry_Cash, requestJson, Method.POST, access_token));
|
|
_log.Info($"{Status_Inquiry_Cash}|RESPONSE : {result.Content}");
|
|
|
|
if (result.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
var res = result.Data;
|
|
_response.Data = result.Data;
|
|
_response.Extra = "UN-PAID";
|
|
_response.ResponseCode = "0";
|
|
_response.Msg = "Success";
|
|
|
|
if (!string.IsNullOrEmpty(res.cashout_status) && res.cashout_status.Equals("Complete"))
|
|
{
|
|
_response.Extra = "PAID";
|
|
}
|
|
|
|
}
|
|
else if (result.StatusCode == System.Net.HttpStatusCode.Accepted)
|
|
{
|
|
var res = result.Data;
|
|
_response.Data = res;
|
|
|
|
if (!string.IsNullOrEmpty(res.error_code) && res.error_code.Equals("006035"))
|
|
{
|
|
_response.ResponseCode = "2";
|
|
_response.Extra = "NOTFOUND";
|
|
}
|
|
_response.Msg = res.message;
|
|
}
|
|
else
|
|
{
|
|
var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
|
|
_response.ResponseCode = "1";
|
|
_response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}";
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_response.ResponseCode = "999";
|
|
_response.Msg = ex.Message;
|
|
}
|
|
return _response;
|
|
|
|
}
|
|
|
|
public TPResponse GetAccountStatus(GetStatus gs)
|
|
{
|
|
TPResponse _response = new TPResponse();
|
|
try
|
|
{
|
|
access_token = GetAuthToken().AccessCode;
|
|
var client = new RestClient(wing_base_url);
|
|
var model = MapGetStatus(gs);
|
|
|
|
var requestJson = JsonConvert.SerializeObject(model, Formatting.None);
|
|
|
|
LogicalThreadContext.Properties["MethodName"] = "Status_Inquiry_Account";
|
|
|
|
_log.Info($"{Status_Inquiry_Account}|REQUEST : {requestJson}");
|
|
var result = client.Execute<WingGetStatusResponseAccount>(BuildRequest<WingGetStatus>(Status_Inquiry_Account, requestJson, Method.POST, access_token));
|
|
_log.Info($"{Status_Inquiry_Account}|RESPONSE : {result.Content}");
|
|
|
|
|
|
if (result.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
var res = result.Data;
|
|
_response.Data = res;
|
|
|
|
if (!string.IsNullOrEmpty(res.transaction_status) && res.transaction_status.Equals("200"))
|
|
{
|
|
_response.Extra = "PAID";
|
|
}
|
|
|
|
_response.ResponseCode = "0";
|
|
_response.Msg = "Success";
|
|
|
|
}
|
|
else if (result.StatusCode == System.Net.HttpStatusCode.Accepted)
|
|
{
|
|
var res = result.Data;
|
|
_response.Data = res;
|
|
_response.Extra2 = !string.IsNullOrEmpty(res.error_code) ? res.error_code : "";
|
|
|
|
if (!string.IsNullOrEmpty(res.error_code) && res.error_code.Equals("006035"))
|
|
{
|
|
_response.ResponseCode = "2";
|
|
_response.Extra = "NOTFOUND";
|
|
|
|
}
|
|
_response.Msg = res.message;
|
|
}
|
|
else
|
|
{
|
|
var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
|
|
_response.ResponseCode = "1";
|
|
_response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}";
|
|
_response.Extra = "UNPAID";
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_response.ResponseCode = "999";
|
|
_response.Msg = ex.Message;
|
|
}
|
|
return _response;
|
|
|
|
}
|
|
|
|
public TPResponse GetCrossBankStatus(GetStatus gs)
|
|
{
|
|
TPResponse _response = new TPResponse();
|
|
try
|
|
{
|
|
access_token = GetAuthToken().AccessCode;
|
|
var client = new RestClient(wing_base_url);
|
|
var model = MapGetStatus(gs);
|
|
|
|
var requestJson = JsonConvert.SerializeObject(model, Formatting.None);
|
|
|
|
LogicalThreadContext.Properties["MethodName"] = "Status_Inquiry_CrossBank";
|
|
|
|
_log.Info($"{Status_Inquiry_CrossBank}|REQUEST : {requestJson}");
|
|
var result = client.Execute<WingGetStatusResponseCrossBank>(BuildRequest<WingGetStatus>(Status_Inquiry_CrossBank, requestJson, Method.POST, access_token));
|
|
_log.Info($"{Status_Inquiry_CrossBank}|RESPONSE : {result.Content}");
|
|
|
|
if (result.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
var res = result.Data;
|
|
_response.Data = result.Data;
|
|
|
|
if (!string.IsNullOrEmpty(res.transaction_status) && res.transaction_status.Equals("Success"))
|
|
{
|
|
_response.Extra = "PAID";
|
|
}
|
|
|
|
_response.ResponseCode = "0";
|
|
_response.Msg = "Success";
|
|
}
|
|
else if (result.StatusCode == System.Net.HttpStatusCode.Accepted)
|
|
{
|
|
var res = result.Data;
|
|
_response.Data = res;
|
|
_response.Extra2 = !string.IsNullOrEmpty(res.error_code) ? res.error_code : "";
|
|
|
|
if (!string.IsNullOrEmpty(res.error_code) && res.error_code.Equals("006035"))
|
|
{
|
|
_response.ResponseCode = "2";
|
|
_response.Extra = "NOTFOUND";
|
|
|
|
}
|
|
_response.Msg = res.message;
|
|
}
|
|
else
|
|
{
|
|
var er = SimpleJson.DeserializeObject<ApiException>(result.Content);
|
|
_response.ResponseCode = "1";
|
|
_response.Msg = string.IsNullOrEmpty(result.Content) ? result.ErrorMessage : $"{ er.error_code}-{er.message}";
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_response.ResponseCode = "999";
|
|
_response.Msg = ex.Message;
|
|
}
|
|
return _response;
|
|
|
|
}
|
|
#region
|
|
|
|
|
|
private string encrypt(string orignalText)
|
|
{
|
|
|
|
string encodedText = null;
|
|
|
|
try
|
|
{
|
|
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
|
|
//ORIGINAL LINE: final java.security.MessageDigest md = java.security.MessageDigest.getInstance("SHA-256");
|
|
MessageDigest md = MessageDigest.getInstance("SHA-256");
|
|
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
|
|
//ORIGINAL LINE: final byte[] digestOfPassword = md.digest(AES_KEY.getBytes("utf-8"));
|
|
byte[] bytes = Encoding.UTF8.GetBytes("HG58YZ3CR9");
|
|
byte[] digestOfPassword = md.digest(bytes);
|
|
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
|
|
//ORIGINAL LINE: final javax.crypto.SecretKey key = new javax.crypto.spec.SecretKeySpec(digestOfPassword, "AES");
|
|
SecretKey key = new SecretKeySpec(digestOfPassword, "AES");
|
|
|
|
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
|
|
//ORIGINAL LINE: final javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("AES/CBC/PKCS5Padding");
|
|
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
|
|
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
|
|
//ORIGINAL LINE: final javax.crypto.spec.IvParameterSpec iv = new javax.crypto.spec.IvParameterSpec(new byte[16]);
|
|
IvParameterSpec iv = new IvParameterSpec(new byte[16]);
|
|
|
|
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
|
|
|
|
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
|
|
//ORIGINAL LINE: final byte[] plainTextBytes = orignalText.getBytes("utf-8");
|
|
byte[] plainTextBytes = Encoding.UTF8.GetBytes(orignalText);
|
|
// byte[] plainTextBytes = orignalText.GetBytes(Encoding.UTF8);
|
|
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
|
|
//ORIGINAL LINE: final byte[] encodeTextBytes = cipher.doFinal(plainTextBytes);
|
|
byte[] encodeTextBytes = cipher.doFinal(plainTextBytes);
|
|
|
|
encodedText = (Convert.ToBase64String(encodeTextBytes));
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
throw new ApplicationException("", e);
|
|
}
|
|
|
|
return encodedText;
|
|
}
|
|
|
|
public static string NewString(byte[] bytes)
|
|
{
|
|
return NewString(bytes, 0, bytes.Length);
|
|
}
|
|
public static string NewString(byte[] bytes, int index, int count)
|
|
{
|
|
return System.Text.Encoding.UTF8.GetString((byte[])(object)bytes, index, count);
|
|
}
|
|
|
|
public static string NewString(byte[] bytes, string encoding)
|
|
{
|
|
return NewString(bytes, 0, bytes.Length, encoding);
|
|
}
|
|
public static string NewString(byte[] bytes, int index, int count, string encoding)
|
|
{
|
|
return System.Text.Encoding.GetEncoding(encoding).GetString((byte[])(object)bytes, index, count);
|
|
}
|
|
|
|
|
|
public string decrypt(string orignalText)
|
|
{
|
|
|
|
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
|
|
//ORIGINAL LINE: final java.security.MessageDigest md = java.security.MessageDigest.getInstance("SHA-256");
|
|
MessageDigest md = MessageDigest.getInstance("SHA-256");
|
|
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
|
|
//ORIGINAL LINE: final byte[] digestOfPassword = md.digest(AES_KEY.getBytes("utf-8"));
|
|
|
|
byte[] bytes = Encoding.UTF8.GetBytes(AES_KEY);
|
|
byte[] digestOfPassword = md.digest(bytes);
|
|
|
|
//sbyte[] digestOfPassword = md.digest(AES_KEY.GetBytes(Encoding.UTF8));
|
|
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
|
|
//ORIGINAL LINE: final javax.crypto.SecretKey key = new javax.crypto.spec.SecretKeySpec(digestOfPassword, "AES");
|
|
SecretKey key = new SecretKeySpec(digestOfPassword, "AES");
|
|
|
|
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
|
|
//ORIGINAL LINE: final javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("AES/CBC/PKCS5Padding");
|
|
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
|
|
|
|
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(new byte[16]));
|
|
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
|
|
//ORIGINAL LINE: final byte[] plainTextBytes = org.apache.commons.codec.binary.Base64.decodeBase64(orignalText);
|
|
byte[] plainTextBytes = Convert.FromBase64String(orignalText);
|
|
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
|
|
//ORIGINAL LINE: final byte[] encodeTextBytes = cipher.doFinal(plainTextBytes);
|
|
byte[] encodeTextBytes = cipher.doFinal(plainTextBytes);
|
|
|
|
return NewString(encodeTextBytes);
|
|
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|
|
|