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.
 
 
 

2739 lines
119 KiB

using Common;
using Common.Helper;
using Common.KFTC;
using Common.Model;
using Common.Model.AutoRefund;
using Common.Model.KFTCRegistration;
using Common.Model.KftcSendMoney;
using Common.Model.SendMoney;
using log4net;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Repository.AutoRefund;
using Repository.Coupon;
using Repository.KFTCRepository;
using Repository.Mobile;
using Repository.SendMoney;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading;
using System.Web;
namespace Business.KFTCBusiness
{
public class KftcProcessBusiness : IKftcProcessBusiness
{
private readonly IKftcProcessRepository _repo;
private readonly IMobileServicesRepo _mobilerepo;
private readonly ISendMoneyRepository _sendrepo;
private readonly IAutoRefundRepository _autorepo;
private readonly ICouponRepository icouponrepo;
private static readonly ILog Log = LogManager.GetLogger(typeof(KftcProcessBusiness));
public KftcProcessBusiness(KftcProcessRepository repo, CouponRepository icouponrepo, MobileServicesRepo mobilerepo, SendMoneyRepository sendrepo, AutoRefundRepository autorepo)
{
_repo = repo;
this.icouponrepo = icouponrepo;
_mobilerepo = mobilerepo;
_sendrepo = sendrepo;
_autorepo = autorepo;
}
#region AUTO DEBIT ACCOUNT REGISTRATION
public JsonRxResponse RegistrationKFTC(string customerId, string lang, string client_id)
{
JsonRxResponse res = new JsonRxResponse();
try
{
string URL = GetKftcUrl(customerId, lang, client_id);
List<AccountDetails> AccountList = GetAccountList(customerId);
AccountList.ForEach(x => x.KftcAccountId = Crypto.Encrypt(x.KftcAccountId, Utilities.ReadWebConfig("ktft_client_info_salt", "")));
List<Header> ListLangauge = GetKftcLanguage(customerId);
List<Header> ListHeader = GetKftcHeader(customerId);
KftcCommonResponse Response = new KftcCommonResponse()
{
AccountList = AccountList,
Header = ListHeader,
URL = URL,
Language = ListLangauge
};
res.ErrorCode = "0";
res.Msg = "Success";
res.Data = Response;
return res;
}
catch (Exception ex)
{
Log.Error("Exception tracked : " + ex.Message, ex);
res.SetResponse("1", "Exception tracked : " + ex.Message, null);
res.Data = new { };
return res;
}
}
private List<Header> GetKftcLanguage(string customerId)
{
DataTable dt = _repo.GetKftcLanguage(customerId);
List<Header> ListLanguage = new List<Header>();
if (dt == null || dt.Rows.Count <= 0)
{
return ListLanguage;
}
foreach (DataRow row in dt.Rows)
{
Header language = new Header();
language.Key = row["key"].ToString();
language.Value = row["value"].ToString();
ListLanguage.Add(language);
};
return ListLanguage;
}
private string GetKftcUrl(string customerId, string lang, string client_id)
{
var custId = "mobile_" + customerId;
//for test
//client_id = "B41lT2TeaECwRA4ITjGsbHOGAnm5gPBojPC1zTRq";
Guid g = Guid.NewGuid();
string stateValue = g.ToString().Replace("-", "");
var auth = new Common.KFTC.Request.Authorize();
auth.response_type = "code";
auth.client_id = client_id;
auth.redirect_uri = KFTC_GME.callback_url;
auth.scope = "login inquiry transfer";
auth.client_info = custId;
auth.state = stateValue;
auth.auth_type = "1";
auth.bg_color = "#F4F8FB";
auth.txt_color = "#000000";
auth.btn1_color = "#EF343B";
auth.btn2_color = "#22246B";
//auth.lang = lang;
auth.edit_option = "off";
string _URL = @"oauth/2.0/authorize?@query";
var jObj = (JObject)JsonConvert.DeserializeObject(JsonConvert.SerializeObject(auth));
var query = String.Join("&", jObj.Children().Cast<JProperty>().Select(jp => jp.Name.Equals("redirect_uri") ? jp.Name +
"=" + (jp.Value.ToString()) : jp.Name + "=" + HttpUtility.UrlEncode(jp.Value.ToString())));
return ApplicationConfig.ReadWebConfig("KFTC_HOST_NAME", "") + _URL.Replace("@query", query);
}
private List<Header> GetKftcHeader(string customerId)
{
DataRow dr = _repo.GetCustomerData(customerId);
List<Header> listKftcHeader = new List<Header>();
string[] param = new string[] { "Kftc-Bfop-UserSeqNo", "Kftc-Bfop-UserCI", "Kftc-Bfop-UserName" ,
"Kftc-Bfop-UserInfo","Kftc-Bfop-UserCellNo","Kftc-Bfop-PhoneCarrier","Kftc-Bfop-UserEmail"};
if (dr == null)
{
//KftcHeader.Add("Kftc-Bfop-UserSeqNo", "");
//KftcHeader.Add("Kftc-Bfop-UserCI", "");
//KftcHeader.Add("Kftc-Bfop-UserName", "");
//KftcHeader.Add("Kftc-Bfop-UserInfo", "");
//KftcHeader.Add("Kftc-Bfop-UserCellNo", "");
//KftcHeader.Add("Kftc-Bfop-PhoneCarrier", "");
//KftcHeader.Add("Kftc-Bfop-UserEmail", "");
foreach (var item in param)
{
Header KftcHeader = new Header();
KftcHeader.Key = item;
KftcHeader.Value = "";
listKftcHeader.Add(KftcHeader);
}
}
else
{
Header KftcHeader1 = new Header();
KftcHeader1.Key = "Kftc-Bfop-UserSeqNo";
KftcHeader1.Value = string.IsNullOrEmpty(dr["userSeqNo"].ToString()) ? "" : dr["userSeqNo"].ToString();
listKftcHeader.Add(KftcHeader1);
Header KftcHeader2 = new Header();
KftcHeader2.Key = "Kftc-Bfop-UserCI";
KftcHeader2.Value = string.IsNullOrEmpty(dr["userCi"].ToString()) ? "" : dr["userCi"].ToString();
listKftcHeader.Add(KftcHeader2);
Header KftcHeader3 = new Header();
KftcHeader3.Key = "Kftc-Bfop-UserName";
KftcHeader3.Value = string.IsNullOrEmpty(dr["userName"].ToString()) ? "" : dr["userName"].ToString();
listKftcHeader.Add(KftcHeader3);
Header KftcHeader4 = new Header();
KftcHeader4.Key = "Kftc-Bfop-UserInfo";
KftcHeader4.Value = string.IsNullOrEmpty(dr["userInfo"].ToString()) ? "" : dr["userInfo"].ToString();
listKftcHeader.Add(KftcHeader4);
Header KftcHeader5 = new Header();
KftcHeader5.Key = "Kftc-Bfop-UserCellNo";
KftcHeader5.Value = string.IsNullOrEmpty(dr["UserCellNo"].ToString()) ? "" : dr["UserCellNo"].ToString();
listKftcHeader.Add(KftcHeader5);
Header KftcHeader6 = new Header();
KftcHeader6.Key = "Kftc-Bfop-PhoneCarrier";
KftcHeader6.Value = "";
listKftcHeader.Add(KftcHeader6);
Header KftcHeader7 = new Header();
KftcHeader7.Key = "Kftc-Bfop-UserEmail";
KftcHeader7.Value = string.IsNullOrEmpty(dr["UserEmail"].ToString()) ? "" : dr["UserEmail"].ToString();
listKftcHeader.Add(KftcHeader7);
}
return listKftcHeader;
}
/*
* KFTC_CUSTOMER_SUB 테이블에 등록된 계좌정보를 가져온다.
* */
private List<AccountDetails> GetAccountList(string customerId)
{
var accessToken = ""; //see again
List<AccountDetails> _accountDetails = new List<AccountDetails>();
List<AccountDetails> _delAccountList = new List<AccountDetails>();
AccountDetails _accDetail = new AccountDetails();
DataTable dt = _repo.GetAccountList(customerId);
if (dt == null || dt.Rows.Count <= 0)
{
return _accountDetails;
}
string IsSyncAccList = dt.Rows[0]["IsSyncAccList"].ToString();
List<Response.acoount_unit> _accList = new List<Response.acoount_unit>();
if (IsSyncAccList == "Y")
{
DataRow customer = _repo.GetCustomerData(customerId);
if (customer != null)
{
string userSeqNo = customer["userSeqNo"].ToString(); //how??
Response.account_list _accountList = AccountListAPI(userSeqNo, accessToken, customerId);
_accList = _accountList.res_list;
}
}
foreach (DataRow item in dt.Rows)
{
AccountDetails _account = new AccountDetails();
_account.KftcAccountId = item["RowId"].ToString();
_account.BankCode = item["BankCode"].ToString();
_account.BankCodeStd = item["BankCode"].ToString();
_account.IsInboundPennyTestRequested = Convert.ToBoolean(item["IsInboundPennyTestRequested"]);
// _account.AccessToken = item["access_token"].ToString();
//_account.TokenType = item["tokenType"].ToString();
//_account.Scope = item["scope"].ToString();
//_account.UserCi = item["userCi"].ToString();
//_account.CustomerId = item["customerId"].ToString();
//_account.UserSeqNo = item["userSeqNo"].ToString();
//_account.FintechUseNo = item["fintechUseNo"].ToString();
//_account.BankCodeStd = item["bankCodeStd"].ToString();
_account.BankName = item["bankName"].ToString();
//_account.AccountNum = item["accountNum"].ToString();
_account.AccountNumMasked = item["accountNumMasked"].ToString();
//_account.AccountName = item["accountName"].ToString();
_account.IsShowRefresh = item["IsShowRefresh"].ToString();
if (IsSyncAccList == "Y")
{
if (_accList.Count > 0)
{
bool bSearch = false;
foreach (var acc in _accList)
{
if ((_account.AccountNum == acc.account_num)
&& (acc.transfer_agree_yn == "Y"))
{
bSearch = true;
_accountDetails.Add(_account);
break;
}
}
if (!bSearch)
{
_delAccountList.Add(_account);
}
}
}
else
{
_accountDetails.Add(_account);
}
}
if (_delAccountList.Count > 0)
{
foreach (var account in _delAccountList)
{
_repo.DeleteAccount(account);
}
}
return _accountDetails;
}
/*
* 등록계좌조회 API
* */
private Response.account_list AccountListAPI(string userSeqNo, string accessToken, string customerId)
{
Response.account_list _accountList = new Response.account_list();
DbResult _logResp = new DbResult();
string _acclistURL = @"v2.0/account/list?user_seq_no=@user_seq_no&include_cancel_yn=@include_cancel_yn&sort_order=@sort_order";
try
{
Request.list req = new Request.list();
req.user_seq_no = userSeqNo; // user_seq_no;
req.sort_order = "D"; // Descending, A:Ascending
req.include_cancel_yn = "N"; // 해지계좌 불포함, Y:해지계좌 포함
_logResp = _repo.LogRequestKFTC(customerId, "Account/List", "URL: " + _acclistURL + " RequestData: " + JsonConvert.SerializeObject(req), "");
Log.Debug("[KFTC-API-REQ] account/list : [customerId]:" + customerId + " [REQ URL]:" + _acclistURL + " [REQ DATA]:" + JsonConvert.SerializeObject(req));
KFTCPostGet kftcRequest = new KFTCPostGet();
var acclistResult = kftcRequest.GetFromKFTC(_acclistURL.Replace("@user_seq_no", req.user_seq_no)
.Replace("@include_cancel_yn", req.include_cancel_yn)
.Replace("@sort_order", req.sort_order),
accessToken);
if (string.IsNullOrEmpty(acclistResult))
{
_accountList.rsp_code = "0101";
_accountList.rsp_message = "FAILED TO KFTC OPEN-FLATFORM (ACCOUNT/LIST) QUERY!";
_repo.LogResponseKFTC(_logResp.Id, null, _accountList.rsp_code, _accountList.rsp_message);
return _accountList;
}
_accountList = JsonConvert.DeserializeObject<Response.account_list>(acclistResult);
Log.Debug("[KFTC-API-RES] account/list : " + acclistResult);
_repo.LogResponseKFTC(_logResp.Id, acclistResult, _accountList.rsp_code, _accountList.rsp_message);
}
catch (Exception ex)
{
_repo.LogResponseKFTC(_logResp.Id, "Exception occured!", "999", ex.Message);
_accountList.rsp_code = "0101";
_accountList.rsp_message = ex.Message;
Log.Debug("[KFTC-API-EXCEPTION] account/list :" + ex.Message);
}
return _accountList;
}
#endregion AUTO DEBIT ACCOUNT REGISTRATION
/* ---------------------------------------------------------------------
* 계좌해지 API
* ---------------------------------------------------------------------
*/
public JsonRxResponse CancelAccount(string cancelType, DeleteRequest req, string customerId)
{
DbResult _dbRes = new DbResult();
DbResult _logResp = new DbResult();
JsonRxResponse res = new JsonRxResponse();
KFTCPostGet kftcRequest = new KFTCPostGet();
var kftcLogId = Crypto.Decrypt(req.KftcLogId, Utilities.ReadWebConfig("ktft_client_info_salt", ""));
try
{
var request = _repo.GetAccountKFTCInfo(customerId, kftcLogId); /* 2019.10.10 KFTC 계좌 서비스승인 정보조회 Dana*/
var fintechUseNo = request["FintechUseNo"].ToString();
var accessToken = request["AccessToken"].ToString();
string inquiryAgreeYn = request["inquiryAgreeYn"].ToString();
string transferAgreeYn = request["transferAgreeYn"].ToString();
string _cancelURL = @"v2.0/account/cancel";
if (null == request)
{
res.ErrorCode = "1";
res.Msg = "Error:Invalid auto debit account";
return res;
}
if (cancelType == "inquiry" && inquiryAgreeYn != "Y")
{
res.SetResponse("0", "This account has already been deleted.", null);
}
if (cancelType == "transfer" && transferAgreeYn != "Y")
{
res.SetResponse("0", "This account has already been deleted.", null);
}
Request.account_cancel reqObj = new Request.account_cancel();
reqObj.scope = cancelType;
reqObj.bank_tran_id = ApplicationConfig.ReadWebConfig("GME_TRAN_CODE", "") + "U" + DateTime.Now.ToString("HHmmssfff"); // 은행거래 고유번호
reqObj.fintech_use_num = fintechUseNo;
string reqData = JsonConvert.SerializeObject(reqObj);
_logResp = _repo.LogRequestKFTC(customerId, "AccountCancel", reqData);
Log.Debug("[KFTC-API-REQ] account/cancel : [customerId]:" + customerId + " [REQ Data]:" + reqData);
/*계좌해지요청* */
var resp = kftcRequest.PostToKFTC(_cancelURL, accessToken, reqData);
/** 사용자 계좌해지요청 실패!!! * */
if (string.IsNullOrEmpty(resp))
{
res.ErrorCode = "999";
res.Msg = "FAILED TO KFTC OPEN-FLATFORM (ACCOUNT/CANCEL)!";
_repo.LogResponseKFTC(_logResp.Id, null, res.ErrorCode, res.Msg);
return res;
}
var respObj = JsonConvert.DeserializeObject<Response.cancel>(resp);
_repo.LogResponseKFTC(_logResp.Id, resp, respObj.rsp_code, respObj.rsp_message);
string processId = _logResp.Extra;
Log.Debug("[KFTC-API-RES] account/cancel : " + resp);
if (respObj.rsp_code == "A0000")
{
res.ErrorCode = "0";
res.Msg = "Account deleted successfully!";
res.Data = new { };
}
else
{
res.ErrorCode = "1";
res.Msg = respObj.rsp_message;
res.Data = new { };
}
return res;
}
catch (Exception ex)
{
res.ErrorCode = "1";
res.Msg = "Error:Invalid auto debit account";
return res;
}
}
public JsonRxResponse GetOPTNumber(string customerId, string user, string amount, string kftcId)
{
JsonRxResponse res = new JsonRxResponse();
DbResult dbResult = new DbResult();
try
{
kftcId = Crypto.Decrypt(kftcId, Utilities.ReadWebConfig("ktft_client_info_salt", ""));
dbResult = _repo.GetOPTNumber(customerId, user, amount, kftcId);
res.SetResponse(dbResult.ResponseCode, dbResult.Msg, "");
return res;
}
catch (Exception ex)
{
Log.Error("Exception tracked : " + ex.Message, ex);
res.SetResponse("1", "Exception tracked : " + ex.Message, null);
return res;
}
}
public DbResult SendAutoDebit(string CustomerId, string KftcCustRegdId, string CollAmt, string schemaId, string serviceCharge)
{
DbResult _dbRes = new DbResult();
KftcSendMoneyRequest request = _repo.GetCustomerKFTCInfo(CustomerId, KftcCustRegdId);
if (null == request)
{
_dbRes.SetError("1", "Error:Invalid auto debit account", null);
return _dbRes;
}
request.CollAmt = CollAmt.Split('.')[0];
DbResult _logResp = new DbResult();
/*
* empty check
* */
if (string.IsNullOrWhiteSpace(request.CustomerId)
|| string.IsNullOrWhiteSpace(request.AccessToken)
|| string.IsNullOrWhiteSpace(request.FintechUseNo)
|| string.IsNullOrWhiteSpace(CollAmt)
|| string.IsNullOrWhiteSpace(request.AccountName)
|| string.IsNullOrWhiteSpace(request.BankCode)
|| string.IsNullOrWhiteSpace(request.AccountNum)
|| string.IsNullOrWhiteSpace(request.AccHolderInfoType)
|| string.IsNullOrWhiteSpace(request.AccHolderInfo))
{
_dbRes.ResponseCode = "999";
_dbRes.Msg = "Oops! Something went wrong please re-login and try again.";
return _dbRes;
}
request.processId = DateTime.Now.Ticks + request.CustomerId;
/*
* 참가은행 상태조회
* @Max:2018.09
* */
//_dbRes = CheckBankStatus(request);
//if (_dbRes.ResponseCode != "A0000")
//{
// return _dbRes;
//}
/*
* 예금주 실명번호 조회
* @Max:2018.09.
* */
//if (String.IsNullOrEmpty(request.AccHolderInfoType) == true)
//{
// _dbRes.ResponseCode = "999";
// _dbRes.Msg = "[FAIL] Customer's real name number type is null ";
// return _dbRes;
//}
//if (String.IsNullOrEmpty(request.AccHolderInfo) == true)
//{
// _dbRes.ResponseCode = "999";
// _dbRes.Msg = "[FAIL] Customer's real name number is null ";
// return _dbRes;
//}
//if (String.IsNullOrEmpty(request.AccountNum) == true)
//{
// _dbRes.ResponseCode = "999";
// _dbRes.Msg = "[FAIL] Customer's real number is null ";
// return _dbRes;
//}
//var accountHolderInfoType = request.AccHolderInfoType;
//var accountHolderInfo = request.AccHolderInfo.Replace("-", "").Trim();
//request.AccHolderInfo = accountHolderInfo;
/*
* 실명계좌조회 : Ver 1
*/
//_dbRes = CheckRealName(request);
///* 계좌실명조회가 실패하면... */
//if (_dbRes.ResponseCode != "A0000")
//{
// return _dbRes;
//}
/*
* 실명계좌조회 : Ver 2
*/
CheckRealNameModel model = new CheckRealNameModel()
{
CustomerId = CustomerId,
BankCode = request.BankCode,
AccountNumber = request.AccountNum
};
var jsonRx = KFTC_RealNameCheck_V2(model);
if (jsonRx.ErrorCode != "0")
{
_dbRes.SetError("1", jsonRx.Msg, null);
return _dbRes;
}
/*
* 출금이체 서비스
*
* */
// 쿠폰 아이디가 있으면 쿠폰 할인 금액을 구한다.
string discountvalue = "0";
if (!string.IsNullOrWhiteSpace(schemaId))
{
Log.Debug("coupon started" + schemaId.ToString() + " charge" + serviceCharge.ToString());
discountvalue = icouponrepo.GetCouponDiscountValue(schemaId, serviceCharge);
}
var req = new Common.KFTC.Request.withdraw();
req.bank_tran_id = ApplicationConfig.ReadWebConfig("GME_TRAN_CODE", "") + "U" + DateTime.Now.ToString("HHmmssfff"); // 은행거래 고유번호
req.cntr_account_type = ApplicationConfig.ReadWebConfig("CNTR_ACCOUNT_TYPE", "");
req.cntr_account_num = ApplicationConfig.ReadWebConfig("GME_WITHDRAW_ACCNO", "");
req.dps_print_content = request.AccountName; //입금계좌내역
req.fintech_use_num = request.FintechUseNo; //산업은행-1234567890
req.tran_amt = (Convert.ToDouble(request.CollAmt) - Convert.ToDouble(discountvalue)).ToString(); //거래금액
req.tran_dtime = DateTime.Now.ToString("yyyyMMddHHmmss"); //요청일시
req.req_client_name = request.AccountName;
req.req_client_bank_code = request.BankCode;
req.req_client_account_num = request.AccountNum;
req.req_client_num = request.CustomerId;
req.transfer_purpose = ApplicationConfig.ReadWebConfig("WITHDRAW_TRANSFER_PURPOSE", "");
string tranDtime = req.tran_dtime;
//string tranDtime_1 = DateTime.Now.AddSeconds(-1).ToString("yyyyMMddHHmmss");
string _URL = ApplicationConfig.ReadWebConfig("TRANSFER_WITHDRAW", ""); //@"transfer/withdraw";
var access_token = request.AccessToken;
string postData = JsonConvert.SerializeObject(req);
//log request
_logResp = _repo.LogRequestKFTC(request.CustomerId, "DebitAccount", "access_token :" + access_token + "req :" + postData);
Log.Debug("[KFTC-API-REQ] transfer/Withdraw : [customerId]:" + request.CustomerId + " [REQ URL]:" + _URL + " [REQ DATA]:" + postData);
KFTCPostGet kftcRequest = new KFTCPostGet();
try
{
/*
* 출금이체 요청
* */
var resp = kftcRequest.PostToKFTC(_URL, access_token, postData);
/*
* 출금이체 요청 실패!!!
* */
if (string.IsNullOrEmpty(resp))
{
_dbRes.ResponseCode = "999";
_dbRes.Msg = "FAILED TO KFTC OPEN-FLATFORM (TRANSFER/WITHDRAW)!";
//log response
_repo.LogResponseKFTC(_logResp.Id, resp, _dbRes.ResponseCode, _dbRes.Msg);
return _dbRes;
}
var respObj = JsonConvert.DeserializeObject<Response.withdraw>(resp);
Log.Debug("[KFTC-API-RES] transfer/Withdraw : " + resp);
//log response
_repo.LogResponseKFTC(_logResp.Id, resp, respObj.rsp_code, (respObj.rsp_code == "A0000") ? "Success!" : respObj.rsp_message);
if (respObj.rsp_code == "A0001" ||
respObj.rsp_code == "A0003" ||
respObj.rsp_code == "A0007" ||
respObj.bank_rsp_code == "400")
{
Thread.Sleep(1 * 60 * 1000);
/* 이체결과확인
* */
respObj = CheckWithdrawResult(ref respObj, request.CustomerId, "1");
if (respObj.rsp_code == "A0001" ||
respObj.rsp_code == "A0003" ||
respObj.rsp_code == "A0007" ||
respObj.bank_rsp_code == "400")
{
Thread.Sleep(2 * 60 * 1000);
/* 이체결과확인
* */
respObj = CheckWithdrawResult(ref respObj, request.CustomerId, "2");
if (respObj.rsp_code == "A0001" ||
respObj.rsp_code == "A0003" ||
respObj.rsp_code == "A0007" ||
respObj.bank_rsp_code == "400")
{
_dbRes.ResponseCode = respObj.rsp_code;
_dbRes.Msg = respObj.rsp_message;
_dbRes.Id = respObj.api_tran_id;
_dbRes.Extra = respObj.api_tran_dtm;
return _dbRes;
}
}
}
DbResult _saveKFTCData = new DbResult();
if (respObj.rsp_code == "A0000")
{
/*
* COPIED FROM ONLINE
*
* @PRALHAD-2019.01.08
* */
//string fromTime = respObj.api_tran_dtm.Substring(0, 14);
//max-20180615
//_dbRes = CheckRemittant(fromTime, customerId, accountNum, accountName, processId);
//respObj.remittance_check = (_dbRes.ErrorCode == "A0000") ? "Y" : "N";
respObj.remittance_check = "Y";
_saveKFTCData = _repo.SaveKFTCTranData(respObj, request.CustomerId);
//if (_dbRes.ErrorCode != "A0000")
//{
// return _dbRes;
//}
}
_dbRes.ResponseCode = respObj.rsp_code;
_dbRes.Msg = respObj.rsp_message;
_dbRes.Id = _saveKFTCData.Id;
// USED FOR AUTO DEBIT REFURN
_dbRes.Extra = request.AccountNum;
_dbRes.Extra2 = request.BankCode;
return _dbRes;
}
catch (Exception ex)
{
//log response
_repo.LogResponseKFTC(_logResp.Id, "Exception occured!", "999", ex.Message);
_dbRes.SetError("999", ex.Message, null);
return _dbRes;
}
}
// check GME bank status and customer bank Status
private DbResult CheckBankStatus(KftcSendMoneyRequest request)
{
DbResult dbRes = new DbResult();
DbResult logRes = new DbResult();
KFTCPostGet kftcRequest = new KFTCPostGet();
//string _URL = @"bank/status";
//string httpUrl = ApplicationConfig.ReadWebConfig("BANK_STATUS", ""); //using Open banking 2019.10 @Dana disable
//using Open banking 2019.10 @Dana
string httpUrl = @"v2.0/bank/status";
string access_token = request.GmeAccessToken;
string gmeBankCode = request.GmeBankCode;
string processId = request.processId;
//log request
logRes = _repo.LogRequestKFTC(request.CustomerId, "CheckBankStatus", "_URL :" + httpUrl + " access_token :" + access_token, processId);
try
{
/*
* 참가은행 상태조회!!!
* */
var resBankStatusStr = kftcRequest.GetFromKFTC(httpUrl, access_token);
/*
* 참가은행 상태조회 실패!!!
* */
if (string.IsNullOrEmpty(resBankStatusStr))
{
dbRes.ResponseCode = "999";
dbRes.Msg = "[FAIL] KFTC OPEN-FLATFORM (BANK/STATUS)!";
//log response
_repo.LogResponseKFTC(logRes.Id, null, dbRes.ResponseCode, dbRes.Msg);
return dbRes;
}
var resBankStatusObj = JsonConvert.DeserializeObject<Response.bank_status>(resBankStatusStr);
//log response
//_utility.LogResponseKFTC(_logResp.Id, resp, bankList.rsp_code, bankList.rsp_message);
//정상응답이 아닌경우...
if (resBankStatusObj.rsp_code != "A0000")
{
dbRes.SetError("999", resBankStatusObj.rsp_message, null);
//log response
_repo.LogResponseKFTC(logRes.Id, null, resBankStatusObj.rsp_code, dbRes.Msg);
return dbRes;
}
List<Response.bank_unit> bankUnit = resBankStatusObj.res_list;
//dbRes.Extra = logRes.Extra;
//dbRes.Id = "";
//고객은행과 GME은행이 정상이면 "YY"
string bankStatus = "N";
foreach (var item in bankUnit)
{
//customer bank
if (item.bank_code_std == request.BankCode)
{
bankStatus = item.bank_status;
}
}
if (bankStatus != "Y")
{
dbRes.ResponseCode = "999";
dbRes.Msg = String.Format("[FAIL] This bank{0} service is not available right now, please try again later !!", request.BankCode);
//log response
_repo.LogResponseKFTC(logRes.Id, null, dbRes.ResponseCode, dbRes.Msg);
return dbRes;
}
bankStatus = "N";
foreach (var item in bankUnit)
{
//GME bank
if (item.bank_code_std == gmeBankCode)
{
bankStatus = item.bank_status;
}
}
if (bankStatus != "Y")
{
dbRes.ResponseCode = "999";
dbRes.Msg = String.Format("[FAIL] This bank {0} service is not available right now, please try again later !!", gmeBankCode);
//log response
_repo.LogResponseKFTC(logRes.Id, null, dbRes.ResponseCode, dbRes.Msg);
return dbRes;
}
//성공
dbRes.SetError("A0000", "", null);
return dbRes;
}
catch (Exception ex)
{
dbRes.SetError("999", ex.Message, null);
//log response
_repo.LogResponseKFTC(logRes.Id, "Exception occured", "999", ex.Message);
return dbRes;
}
}
// CUSTOMER ACCOUNT DETAIL VERIFICATION
public DbResult CheckRealName(KftcSendMoneyRequest request)
{
DbResult _dbRes = new DbResult();
DbResult _logResp = new DbResult();
KFTCPostGet kftcRequest = new KFTCPostGet();
string httpUrl = ApplicationConfig.ReadWebConfig("INQUIRY_REALNAME", ""); //@"inquiry/real_name";
string oob_access_token = request.GmeAccessToken;
string processId = request.processId;
//주민등록번호 Resident registration number
if (request.AccHolderInfoType == "8008")
{
request.AccHolderInfoType = "1";
}
//외국인등록번호 Foreigner registration number
else if (request.AccHolderInfoType == "1302")
{
request.AccHolderInfoType = "2";
}
//여권번호이면 조합주민번호로 조회 Passport with Combination no
else if (request.AccHolderInfoType == "10997")
{
request.AccHolderInfoType = "5";
}
//사업자등록번호 Company Registration Number
else if (request.AccHolderInfoType == "10988")
{
request.AccHolderInfoType = "6";
}
var reqRealNameObj = new Common.KFTC.Request.real_name();
reqRealNameObj.bank_code_std = request.BankCode;
reqRealNameObj.account_num = request.AccountNum;
reqRealNameObj.account_holder_info_type = request.AccHolderInfoType;
reqRealNameObj.account_holder_info = request.AccHolderInfo;
reqRealNameObj.tran_dtime = DateTime.Now.ToString("yyyyMMddHHmmss");
try
{
string reqRealNameStr = JsonConvert.SerializeObject(reqRealNameObj);
//로그-요청로그
_logResp = _repo.LogRequestKFTC(request.CustomerId, httpUrl, reqRealNameStr, processId);
var resRealNameStr = kftcRequest.PostToKFTC(httpUrl, oob_access_token, reqRealNameStr);
/*
* 계좌실명조회 실패!!!
* */
if (string.IsNullOrEmpty(resRealNameStr))
{
_dbRes.ResponseCode = "999";
_dbRes.Msg = "[FAIL] KFTC OPEN-FLATFORM (inquiry/real_name)";
//로그-결과로그(실패)
_repo.LogResponseKFTC(_logResp.Id, null, _dbRes.ResponseCode, _dbRes.Msg);
return _dbRes;
}
var resRealNameObj = JsonConvert.DeserializeObject<Response.real_name>(resRealNameStr);
//응답메시지가 성공일때...
if (resRealNameObj.rsp_code == "A0000" && resRealNameObj.bank_rsp_code == "000")
{
_dbRes.ResponseCode = "A0000";
_dbRes.Msg = "[SUCCESS] KFTC OPEN-FLATFORM INQUIRY";
}
//응답메시지가 성공이 아닐때..
else if (resRealNameObj.rsp_code != "A0000")
{
_dbRes.ResponseCode = resRealNameObj.rsp_code;
_dbRes.Msg = String.Format("[FAIL] KFTC OPEN-FLATFORM INQUIRY rsp_message:{0}",
resRealNameObj.rsp_message);
//_dbRes.Msg = String.Format("[FAIL] inquiry/real_name : rsp_message={0}, req_type={1}, req_num={2}, res_type={3}, res_num={4}",
// resRealNameObj.rsp_message,
// accountHolderInfoType,
// accountHolderInfo,
// resRealNameObj.account_holder_info_type,
// resRealNameObj.account_holder_info);
}
else if (resRealNameObj.bank_rsp_code != "000")
{
_dbRes.ResponseCode = resRealNameObj.bank_rsp_code;
_dbRes.Msg = String.Format("[FAIL] KFTC OPEN-FLATFORM INQUIRY bank_rsp_message:{0}",
resRealNameObj.bank_rsp_message);
//_dbRes.Msg = String.Format("[FAIL] inquiry/real_name : rsp_message={0}, req_type={1}, req_num={2}, res_type={3}, res_num={4}",
// resRealNameObj.bank_rsp_message,
// accountHolderInfoType,
// accountHolderInfo,
// resRealNameObj.account_holder_info_type,
// resRealNameObj.account_holder_info);
}
else
{
_dbRes.ResponseCode = resRealNameObj.rsp_code;
_dbRes.Msg = "[FAIL] KFTC OPEN-FLATFORM INQUIRY";
}
// 로그-응답로그
_repo.LogResponseKFTC(_logResp.Id, resRealNameStr, _dbRes.ResponseCode, _dbRes.Msg);
_dbRes.SetError(_dbRes.ResponseCode, _dbRes.Msg, null);
return _dbRes;
}
catch (Exception ex)
{
//로그-응답로그
_repo.LogResponseKFTC(_logResp.Id, "Exception occured!", "999", ex.Message);
_dbRes.SetError("999", ex.Message, null);
return _dbRes;
}
}
/*
* KFTC 이체결과조회
* */
private Response.withdraw CheckWithdrawResult(ref Response.withdraw withdrawObj, string customerId, string tryCount)
{
string url = @"v2.0/transfer/result";
var reqObj = new Request.result();
reqObj.check_type = "1"; //1:출금이체, 2:입금이체
reqObj.req_cnt = "1"; //요청건수
reqObj.tran_dtime = DateTime.Now.ToString("yyyyMMddHHmmss"); ; //요청일시
reqObj.req_list = new List<Request.result_unit>();
var reqUnitObj = new Request.result_unit();
reqUnitObj.tran_no = "1"; // 거래순번
reqUnitObj.org_bank_tran_id = withdrawObj.bank_tran_id; ; // "12345678901234567890"; //원거래 고유번호
reqUnitObj.org_bank_tran_date = withdrawObj.bank_tran_date; // "20180101"; //원거래 일자
reqUnitObj.org_tran_amt = withdrawObj.tran_amt; // "1000"; //원거래금액
reqObj.req_list.Add(reqUnitObj);
string reqData = JsonConvert.SerializeObject(reqObj);
//log request
DbResult _logResp = _repo.LogRequestKFTC(customerId, "DebitAccount:Retry:" + tryCount, JsonConvert.SerializeObject(reqObj));
Log.Debug("[KFTC-API-REQ] transfer/result : [customerId]:" + customerId + " [REQ DATA]:" + JsonConvert.SerializeObject(reqObj));
Response.withdraw resObj = new Response.withdraw();
var gme = _repo.GetGMEMaster();
if (gme == null)
{
resObj.rsp_code = "999";
resObj.rsp_message = "[transfer/result] Failed to bring GME token";
_repo.LogResponseKFTC(_logResp.Id, null, resObj.rsp_code, resObj.rsp_message);
return resObj;
}
var gmeAccessToken = gme["accessToken"].ToString();
KFTCPostGet kftcRequest = new KFTCPostGet();
var resData = kftcRequest.PostToKFTC(url, gmeAccessToken, reqData);
if (string.IsNullOrEmpty(resData))
{
resObj.rsp_code = "999";
resObj.rsp_message = "[transfer/result] Failed to Open-banking transfer/result";
_repo.LogResponseKFTC(_logResp.Id, null, resObj.rsp_code, resObj.rsp_message);
return resObj;
}
resObj = JsonConvert.DeserializeObject<Response.withdraw>(resData);
//log response
_repo.LogResponseKFTC(_logResp.Id, resData, resObj.rsp_code, resObj.rsp_message);
Log.Debug("[KFTC-API-RES] transfer/result : " + resData);
return resObj;
}
/* ------------------------------------
* 광주은행 입금이체
* ------------------------------------
* */
// refund of auto debit failed transaction
public DbResult RefundAutoDebit(AutoDebitRefund refundInfo, AccountTransferToBank withdrawalInfo)
{
//UPDATE FAIL LOG FOR AUTO DEBIT TRANSACTION
var resp1 = _repo.LogFailTransactionForAutoDebit(refundInfo.rowId, refundInfo.ErrorCode, refundInfo.ErrorMsg, withdrawalInfo.amount);
if (resp1.ResponseCode == "1")
{
return resp1;
}
DbResult dbResult = new DbResult()
{
ResponseCode = "1",
Msg = "Failed!"
};
try
{
KJAutoRefundModel kj = new KJAutoRefundModel()
{
flag = "Autodebit_REQ",
customerId = refundInfo.CustomerId,
customerSummary = "",
amount = withdrawalInfo.amount,
action = "REQ",
actionDate = "",
actionBy = refundInfo.CustomerId,
bankCode = withdrawalInfo.receiveInstitution,
bankAccountNo = withdrawalInfo.receiveAccountNo,
};
dbResult = _repo.SendAutoRefund(kj);
kj.rowId = dbResult.Id;
/* KJ 입금이체 실행
* */
var body = JsonConvert.SerializeObject(withdrawalInfo);
var resp = KwangjuBankApi.TransferAmount(body);
var dbApiRes = JsonConvert.DeserializeObject<JsonRxResponse>(resp);
if (dbApiRes.ErrorCode != "0")
{
kj.flag = "Autodebit_FAIL";
kj.action = "FAIL";
}
else
{
kj.flag = "SUCCESS";
kj.action = "SUCCESS";
}
dbResult = _repo.SendAutoRefund(kj);
}
catch (Exception e)
{
dbResult.ResponseCode = "1";
dbResult.Msg = e.Message;
}
return dbResult;
}
/* * ------------------------------------
* 입금이체 결과조회 API
* ------------------------------------
* */
// Response.deposit으로 return하기 위한 함수
private Response.deposit CheckDepositResult(ref Response.deposit depositObj, string customerId, string tryCount)
{
string url = @"v2.0/transfer/result";
var reqObj = new Request.result();
reqObj.check_type = "2"; //1:출금이체, 2:입금이체
reqObj.req_cnt = "1"; //요청건수
reqObj.tran_dtime = DateTime.Now.ToString("yyyyMMddHHmmss"); ; //요청일시
reqObj.req_list = new List<Request.result_unit>();
var reqUnitObj = new Request.result_unit();
reqUnitObj.tran_no = depositObj.res_list[0].tran_no;
reqUnitObj.org_bank_tran_id = depositObj.res_list[0].bank_tran_id;
reqUnitObj.org_bank_tran_date = depositObj.res_list[0].bank_tran_date; //거래일자
reqUnitObj.org_tran_amt = depositObj.res_list[0].tran_amt; //거래금액
reqObj.req_list.Add(reqUnitObj);
string reqData = JsonConvert.SerializeObject(reqObj);
//log request
DbResult _logResp = _repo.LogRequestKFTC(customerId, "DebitAccount:Retry:" + tryCount, JsonConvert.SerializeObject(reqObj));
Log.Debug("[KFTC-API-REQ] transfer/result : [customerId]:" + customerId + " [REQ DATA]:" + JsonConvert.SerializeObject(reqObj));
Response.deposit resObj = new Response.deposit();
var gme = _repo.GetGMEMaster();
if (gme == null)
{
resObj.rsp_code = "999";
resObj.rsp_message = "[transfer/result] Failed to bring GME token";
_repo.LogResponseKFTC(_logResp.Id, null, resObj.rsp_code, resObj.rsp_message);
return resObj;
}
var gmeAccessToken = gme["accessToken"].ToString();
KFTCPostGet kftcRequest = new KFTCPostGet();
var resData = kftcRequest.PostToKFTC(url, gmeAccessToken, reqData);
if (string.IsNullOrEmpty(resData))
{
resObj.rsp_code = "999";
resObj.rsp_message = "[transfer/result] Failed to Open-banking transfer/result";
_repo.LogResponseKFTC(_logResp.Id, null, resObj.rsp_code, resObj.rsp_message);
return resObj;
}
resObj = JsonConvert.DeserializeObject<Response.deposit>(resData);
//log response
_repo.LogResponseKFTC(_logResp.Id, resData, resObj.rsp_code, resObj.rsp_message);
Log.Debug("[KFTC-API-RES] transfer/result : " + resData);
return resObj;
}
public JsonRxResponse GetKFTCBankList()
{
JsonRxResponse jsonRx = new JsonRxResponse();
List<BankInformation> listBank = new List<BankInformation>();
try
{
Log.DebugFormat("GetKFTCBankList | Calling GetKFTCBankList");
var dt = _repo.GetKftcBankList();
if (dt == null || dt.Rows.Count <= 0)
{
Log.Debug("GetKFTCBankList | Returning null while calling the GetKFTCBankList.");
jsonRx.SetResponse("1", "Could not fetch the exrate data.");
return jsonRx;
}
foreach (DataRow row in dt.Rows)
{
BankInformation bank = new BankInformation();
bank.RowId = row["rowId"].ToString();
bank.BankCode = row["bankCode"].ToString();
bank.BankName = row["bankName"].ToString();
listBank.Add(bank);
}
jsonRx.SetResponse("0", "Success");
jsonRx.Data = listBank;
Log.Debug("GetKFTCBankList | Calling GetKFTCBankList Success...");
return jsonRx;
}
catch (Exception ex)
{
Log.Error("Something Went Wrong, Please Try Again!!", ex);
jsonRx.SetResponse("1", "Could not fetch the GetKFTCBankList details.");
return jsonRx;
}
}
public JsonRxResponse KFTC_RealNameCheck_V2(CheckRealNameModel model)
{
JsonRxResponse jsonRx = new JsonRxResponse();
DbResult _dbRes = new DbResult();
DbResult _logResp = new DbResult();
KFTCPostGet kftcRequest = new KFTCPostGet();
bool isSuccess = false;
string saveIdNumber = "";
var reqRealNameObj = new Common.KFTC.Request.real_name();
// KFTC Open Banking 2019.10 @Dana // Disable string httpUrl =
// ApplicationConfig.ReadWebConfig("INQUIRY_REALNAME", ""); //@"inquiry/real_name";
var gme = _repo.GetGMEMaster();
if (gme == null)
{
jsonRx.SetResponse("1", "Failed to bring GME token.", null);
return jsonRx;
}
var gmeAccessToken = gme["accessToken"].ToString();
var customer = _repo.GetCustomerMaster(model.CustomerId);
if (customer == null)
{
jsonRx.SetResponse("1", "Failed to bring customer information.", null);
return jsonRx;
}
var kcm = _repo.GetRealNameCheck(model.CustomerId);
if (kcm != null)
{
// 은행거래 고유번호
//reqRealNameObj.bank_tran_id = ApplicationConfig.ReadWebConfig("GME_TRAN_CODE", "") + "U" + DateTime.Now.ToString("HHmmssfff");
reqRealNameObj.bank_tran_id = getBankTranId();
reqRealNameObj.account_holder_info_type = kcm["accHolderInfoType"].ToString();
reqRealNameObj.account_holder_info = kcm["accHolderInfo"].ToString().Replace("-", "");
reqRealNameObj.bank_code_std = model.BankCode;
reqRealNameObj.account_num = model.AccountNumber;
reqRealNameObj.tran_dtime = DateTime.Now.ToString("yyyyMMddHHmmss");
isSuccess = KFTC_RealNameCheck_Common(reqRealNameObj, gmeAccessToken, model.CustomerId);
}
if (isSuccess == false)
{
var idType = customer["idType"].ToString();
var idNumber = customer["idNumber"].ToString().Replace("-", "");
var dob = customer["dob"].ToString();
var gender = customer["gender"].ToString();
var country = customer["country"].ToString();
var processId = DateTime.Now.Ticks + model.CustomerId;
int pos = 0;
for (int j = idNumber.Length - 1; j > 0; j--)
{
char ch = idNumber[j];
if (ch >= 0x30 && ch <= 0x39)
{
pos = j;
break;
}
}
var combNumber = idNumber.Substring(pos - 4, 5);
string[] idTypes = { "1", "2", "3", "4", "5", "6", "E",
"1", "2", "3", "4", "5", "6", "E" };
for (int i = 0; i < 14; i++)
{
// 은행거래 고유번호
//reqRealNameObj.bank_tran_id = ApplicationConfig.ReadWebConfig("GME_TRAN_CODE", "") + "U" + DateTime.Now.ToString("HHmmssfff");
reqRealNameObj.bank_tran_id = getBankTranId();
reqRealNameObj.bank_code_std = model.BankCode;
reqRealNameObj.account_num = model.AccountNumber;
reqRealNameObj.tran_dtime = DateTime.Now.ToString("yyyyMMddHHmmss");
reqRealNameObj.account_holder_info_type = idTypes[i];
if (i < 7)
{
reqRealNameObj.account_holder_info = idNumber;
}
else
{
reqRealNameObj.account_holder_info = String.Format("{0}{1}{2}{3}",
dob,
gender,
country,
combNumber);
}
saveIdNumber = reqRealNameObj.account_holder_info.Insert(6, "-");
isSuccess = KFTC_RealNameCheck_Common(reqRealNameObj, gmeAccessToken, model.CustomerId);
if (isSuccess == true)
{
_repo.SetRealNameData(model.CustomerId, reqRealNameObj.account_holder_info_type, saveIdNumber);
break;
}
} // endof for (int i = 0; i < 14; i++)
}
if (isSuccess == true)
{
jsonRx.SetResponse("0", "Code:A0000, Msg:Success to check the real name of the account.", null);
}
else
{
jsonRx.SetResponse("1", "Failed to check the real name of the account.", null);
}
return jsonRx;
}
public bool KFTC_RealNameCheck_Common(Common.KFTC.Request.real_name requestObj, string gmeAccessToken, string customerId)
{
KFTCPostGet kftcRequest = new KFTCPostGet();
DbResult dbResult = new DbResult();
DbResult logResult = new DbResult();
var httpUrl = ApplicationConfig.ReadWebConfig("INQUIRY_REALNAME", ""); //@"inquiry/real_name";
var processId = DateTime.Now.Ticks + customerId;
bool bRet = false;
try
{
string requestStr = JsonConvert.SerializeObject(requestObj);
//로그-요청로그(TBL_KFTC_LOG)
logResult = _repo.LogRequestKFTC(customerId, httpUrl, requestStr, processId);
Log.Debug("[KFTC-API-REQ] inquiry/real_name : [customerId]:" + customerId + " [REQ DATA]:" + requestStr);
var responseStr = kftcRequest.PostToKFTC(httpUrl, gmeAccessToken, requestStr);
/*
* 계좌실명조회 실패!!!
* */
if (string.IsNullOrEmpty(responseStr))
{
dbResult.ResponseCode = "999";
dbResult.Msg = "[FAIL] KFTC OPEN-FLATFORM (inquiry/real_name) RESPONSE IS NULL";
//로그-결과로그(실 패)
_repo.LogResponseKFTC(logResult.Id, null, dbResult.ResponseCode, dbResult.Msg);
return false;
}
var responseObj = JsonConvert.DeserializeObject<Response.real_name>(responseStr);
Log.Debug("[KFTC-API-RES] inquiry/real_name : " + responseStr);
//응답메시지가 성공일때...
if (responseObj.rsp_code == "A0000" && responseObj.bank_rsp_code == "000")
{
bRet = true;
dbResult.ResponseCode = "A0000";
dbResult.Msg = "[SUCCESS] KFTC OPEN-FLATFORM (inquiry/real_name)";
_repo.LogResponseKFTC(logResult.Id, responseStr, dbResult.ResponseCode, dbResult.Msg);
}
else
{
if (responseObj.rsp_code != "A0000")
{
dbResult.ResponseCode = responseObj.rsp_code;
dbResult.Msg = String.Format("[FAIL] KFTC OPEN-FLATFORM (inquiry/real_name) rsp_message:{0}",
responseObj.rsp_message);
}
else if (responseObj.bank_rsp_code != "000")
{
dbResult.ResponseCode = responseObj.bank_rsp_code;
dbResult.Msg = String.Format("[FAIL] KFTC OPEN-FLATFORM (inquiry/real_name) bank_rsp_message:{0}",
responseObj.bank_rsp_message);
}
else
{
dbResult.ResponseCode = responseObj.rsp_code;
dbResult.Msg = "[FAIL] KFTC OPEN-FLATFORM (inquiry/real_name)";
}
// 로그-응답로그
_repo.LogResponseKFTC(logResult.Id, responseStr, dbResult.ResponseCode, dbResult.Msg);
}
}
catch (Exception ex)
{
//로그-응답로그
_repo.LogResponseKFTC(logResult.Id, "Exception Error", "999", ex.Message);
return false;
}
return bRet;
}
/*
* Manual token refresh
* */
public JsonRxResponse CheckKFTCAccounts(string customerId, string lang, string client_id)
{
JsonRxResponse res = new JsonRxResponse();
try
{
string URL = GetUrl_AuthorizeAccounts(customerId, lang, client_id);
List<AccountDetails> AccountList = GetAccountList(customerId);
AccountList.ForEach(x => x.KftcAccountId = Crypto.Encrypt(x.KftcAccountId, Utilities.ReadWebConfig("ktft_client_info_salt", "")));
List<Header> ListLangauge = GetKftcLanguage(customerId);
List<Header> ListHeader = GetKftcHeader(customerId);
KftcCommonResponse Response = new KftcCommonResponse()
{
AccountList = AccountList,
Header = ListHeader,
URL = URL,
Language = ListLangauge
};
res.ErrorCode = "0";
res.Msg = "Success";
res.Data = Response;
return res;
}
catch (Exception ex)
{
Log.Error("Exception tracked : " + ex.Message, ex);
res.SetResponse("1", "Exception tracked : " + ex.Message, null);
res.Data = new { };
return res;
}
}
/* Open Banking 2019.10 Dana */
private string GetUrl_AuthorizeAccounts(string customerId, string lang, string client_id)
{
var custId = "mobile_" + customerId;
Guid g = Guid.NewGuid();
string stateValue = g.ToString().Replace("-", "");
var auth = new Common.KFTC.Request.authorize_account();
auth.response_type = "code";
auth.client_id = client_id;
auth.redirect_uri = KFTC_GME.callback_url;
auth.scope = "login inquiry transfer";
auth.client_info = custId;
auth.state = stateValue; //using Open banking 2019.10 @Dana
auth.auth_type = "1";
auth.bg_color = "#F4F8FB";
auth.txt_color = "#000000";
auth.btn1_color = "#EF343B";
auth.btn2_color = "#22246B";
//auth.lang = lang;
auth.edit_option = "off";
auth.invoke_type = "ajax";
string _URL = @"oauth/2.0/authorize_account?@query"; //using Open banking 2019.10 @Dana
var jObj = (JObject)JsonConvert.DeserializeObject(JsonConvert.SerializeObject(auth));
var query = String.Join("&", jObj.Children().Cast<JProperty>().Select(jp => jp.Name.Equals("redirect_uri") ? jp.Name +
"=" + (jp.Value.ToString()) : jp.Name + "=" + HttpUtility.UrlEncode(jp.Value.ToString())));
return ApplicationConfig.ReadWebConfig("KFTC_HOST_NAME", "") + _URL.Replace("@query", query);
}
/* 2019.09 Dana */
public JsonRxResponse CheckBalance(CheckBalanceModel model) // CustomerId Type FintechUseNo
{
JsonRxResponse res = new JsonRxResponse();
DbResult _logResp = new DbResult();
if (model.Type == "wallet") // wallet일때
{
DbResult _resp = new DbResult();
_resp = _repo.GetUserEmail(model.CustomerId);
if (_resp.Id == null)
{
res.ErrorCode = "1";
res.Msg = "FAILED TO Load UserId";
return res;
}
var bal = _sendrepo.GetCurrentBalance(_resp.Id);
if (bal != null)
{
Response.balance walletBalance = new Response.balance();
walletBalance.balance_amt = bal;
res.ErrorCode = "0";
res.Msg = "Success";
res.Data = walletBalance;
return res;
}
else
{
res.ErrorCode = "1";
res.Msg = "FAILED TO Load Wallet Balance";
return res;
}
}
else //은행계좌라면 API호출해서 잔액조회
{
var customerDetail = _repo.GetAccountList(model.CustomerId);
var accessToken = customerDetail.Rows[0]["access_token"].ToString();
//accessToken = "b37d092c-6912-42d8-9876-d13eb23e55ad";
string url = @"v2.0/account/balance/fin_num?bank_tran_id=@bankId&fintech_use_num=@finnum&tran_dtime=@time";
string bankId = ApplicationConfig.ReadWebConfig("GME_TRAN_CODE", "") + "U" + DateTime.Now.ToString("HHmmssfff"); // 은행거래 고유번호
string requestTime = DateTime.Now.ToString("yyyyMMddHHmmss");
try
{
KFTCPostGet kftcRequest = new KFTCPostGet();
url = url.Replace("@bankId", bankId).Replace("@finnum", model.FintechUseNo).Replace("@time", requestTime);
var balanceResult = kftcRequest.GetFromKFTC(url, accessToken);
_logResp = _repo.LogRequestKFTC(model.CustomerId, "account/balance", "URL: " + url + "access_token: " + accessToken, "");
Log.Debug("[KFTC-API-REQ] account/balance : [customerId]:" + model.CustomerId + " [REQ URL]:" + url);
/* 잔액조회 실패 Check Balance fail */
if (string.IsNullOrEmpty(balanceResult))
{
res.ErrorCode = "1";
res.Msg = "FAILED TO KFTC OPEN-FLATFORM (Account/Balance) QUERY!";
_repo.LogResponseKFTC(_logResp.Id, null, res.ErrorCode, res.Msg);
return res;
}
var respObj = JsonConvert.DeserializeObject<Response.balance>(balanceResult);
Log.Debug("[KFTC-API-RES] account/balance : " + balanceResult);
if (respObj.rsp_code == "A0000")
{
res.ErrorCode = "0";
res.Msg = "Success";
res.Data = JsonConvert.DeserializeObject(balanceResult);
_repo.LogResponseKFTC(_logResp.Id, balanceResult, respObj.rsp_code, respObj.rsp_message);
return res;
}
else
{
res.ErrorCode = "1";
res.Msg = respObj.rsp_message;
_repo.LogResponseKFTC(_logResp.Id, balanceResult, respObj.rsp_code, respObj.rsp_message);
return res;
}
}
catch (Exception ex)
{
Log.Error("Exception tracked : " + ex.Message, ex);
res.SetResponse("1", "Exception tracked : " + ex.Message, null);
_repo.LogResponseKFTC(_logResp.Id, "Exception occured!", "999", ex.Message);
return res;
}
}
}
/* 2019.09 Dana */
public JsonRxResponse DomeRemitStart(string customerId)
{
JsonRxResponse res = new JsonRxResponse();
DbResult _resp = new DbResult();
_resp = _repo.GetKFTCServiceFee("DomesticRemittance", "KFTC"); //KFTC service fee
if (_resp.Id == null)
{
res.ErrorCode = "1";
res.Msg = "FAILED TO Load Service Fee.";
return res;
}
DbResult _resp2 = new DbResult();
_resp2 = _repo.GetKFTCServiceFee("DomesticRemittance", "KJWallet"); //Wallet service fee
if (_resp2.Id == null)
{
res.ErrorCode = "1";
res.Msg = "FAILED TO Load Service Fee.";
return res;
}
List<AccountDetails> accountsData = _repo.GetWalletAccountList(customerId);
if (accountsData == null) // Account가 없으면 Fail
{
res.ErrorCode = "1";
res.Msg = "FAILED TO Load Account List.";
return res;
}
accountsData.ForEach(x => x.KftcAccountId = Crypto.Encrypt(x.KftcAccountId, Utilities.ReadWebConfig("ktft_client_info_salt", "")));
List<BankInformation> bankData = new List<BankInformation>();
var dt = _repo.GetKftcBankList();
if (dt == null || dt.Rows.Count <= 0) //BankList가 없으면 Fail
{
res.ErrorCode = "1";
res.Msg = "FAILED TO KFTC Bank List.";
return res;
}
foreach (DataRow row in dt.Rows)
{
BankInformation bank = new BankInformation();
bank.RowId = row["rowId"].ToString();
bank.BankCode = row["bankCode"].ToString();
bank.BankName = row["bankName"].ToString();
bankData.Add(bank);
}
Response.dome_default body = new Response.dome_default()
{
accounts = accountsData,
banks = bankData,
servicefee = _resp.Id,
servicefee_wallet = _resp2.Id
};
res.ErrorCode = "0";
res.Msg = "Success";
res.Data = body;
return res;
}
public JsonRxResponse GetRecentHistories(RecentHistoryModel model)
{
JsonRxResponse res = new JsonRxResponse();
List<Response.RecentHistory> historyData = new List<Response.RecentHistory>();
var dt = _repo.GetRecentHistories(model);
if (dt == null || dt.Rows.Count <= 0) //Recent History가 없는 경우
{
res.ErrorCode = "0";
res.Msg = "0 Recent Histories txn.";
res.Data = historyData;
return res;
}
foreach (DataRow row in dt.Rows)
{
Response.RecentHistory hisData = new Response.RecentHistory();
BankInformation bankDate = new BankInformation();
bankDate.RowId = row["rowId"].ToString();
bankDate.BankCode = row["bankCode"].ToString();
bankDate.BankName = row["bankName"].ToString();
hisData.bank = bankDate;
hisData.recipient_account = row["recipient_account"].ToString();
hisData.recipient_name = row["recipient_name"].ToString();
historyData.Add(hisData);
}
res.ErrorCode = "0";
res.Msg = "Success";
res.Data = historyData;
return res;
}
/* 2019.09 Dana */
public JsonRxResponse GetRecipientInfo(CheckRealNameModel model) // customerId BankCode AccountNumber
{
JsonRxResponse res = new JsonRxResponse();
Response.recipientInfo info = new Response.recipientInfo();
DbResult _resp = new DbResult();
var resp = KwangjuBankApi.BankAccountName(model.BankCode, model.AccountNumber); //광주은행 API를 이용하여 계좌주명 추출
if (resp == null)
{
res.ErrorCode = "1";
res.Msg = "Please Check Recipient Bank Account.";
return res;
}
var dbApiRes = JsonConvert.DeserializeObject<JsonRxResponse>(resp);
if (dbApiRes.ErrorCode != "0")
{
res.ErrorCode = "1";
res.Msg = "Please Check Recipient Bank Account.";
return res;
}
else
{
info.RecipientName = dbApiRes.Msg;
_resp = _repo.GetRecipientMobileNo(model); //Recipient MobileNo 추출
info.RecipientPhone = _resp.Id;
res.ErrorCode = "0";
res.Msg = "Success";
res.Data = info;
return res;
}
}
/* * ------------------------------------
* Domestic Remittance 송금시작 2019.09 Dana
* ------------------------------------
* */
public JsonRxResponse SendDomeRimit(DomesticRemitModel model)
{
JsonRxResponse JsonRx = new JsonRxResponse
{
ErrorCode = "1",
Msg = "Domestic Remittance Request cannot proceed further. Please contact GME head office."
};
DbResult _resp = new DbResult();
DbResult _serviceResp = new DbResult();
Response.domesticTran domeTran = new Response.domesticTran();
//model.RecipientName = "(주)글로벌머니익스프레스입니다.";
string customerName = "";
string customerBankCode = "034";
string customerAccountNo = "";
if (model.type == "wallet")
{
_serviceResp = _repo.GetKFTCServiceFee("DomesticRemittance", "KJWallet"); //service fee
if (_serviceResp.Id == null)
{
JsonRx.ErrorCode = "1";
JsonRx.Msg = "FAILED TO Load Service Fee.";
return JsonRx;
}
model.ServiceFee = _serviceResp.Id;
var customerDetail = _repo.GetGMECustomerList(model.CustomerId);
customerName = customerDetail.Rows[0]["fullName"].ToString();
customerAccountNo = customerDetail.Rows[0]["walletAccountNo"].ToString();
model.SetSenderData(customerName, customerBankCode, customerAccountNo);
//var processId = "";
// Domestic request log
//DomesticHistoryModel historyModel = new DomesticHistoryModel();
//historyModel.SetWalletHistoryData(model);
//_resp = _repo.requestKFTCDomesticHistory(historyModel);
//processId = _resp.Id;
JsonRxResponse wallet_result = SendDomeRimit_wallet_withdraw(model);
if (wallet_result.ErrorCode == "0")
{
domeTran.CustomerId = model.CustomerId;
domeTran.TranNo = wallet_result.Id;
//성공메세지
JsonRx.ErrorCode = "0";
JsonRx.Msg = "Success";
JsonRx.Data = domeTran;
return JsonRx;
}
else
{
JsonRx.ErrorCode = "1";
JsonRx.Msg = wallet_result.Msg;
return JsonRx;
}
}
else if (model.type == "autodebit")
{
_serviceResp = _repo.GetKFTCServiceFee("DomesticRemittance", "KFTC"); //service fee
if (_serviceResp.Id == null)
{
JsonRx.ErrorCode = "1";
JsonRx.Msg = "FAILED TO Load Service Fee.";
return JsonRx;
}
model.ServiceFee = _serviceResp.Id; // service fee
var customerDetail = _repo.GetKFTCAccountInfo(model.CustomerId, model.FintechUseNo);
if (customerDetail == null)
{
JsonRx.ErrorCode = "1";
JsonRx.Msg = "FAILED TO Sender's Account Information.";
return JsonRx;
}
customerName = customerDetail["accountName"].ToString();
customerBankCode = customerDetail["bankCodeStd"].ToString();
customerAccountNo = customerDetail["accountNum"].ToString();
model.SetSenderData(customerName, customerBankCode, customerAccountNo);
//출금이체
var withdraw_result = SendDomeRimit_withdraw(model);
if (withdraw_result.ErrorCode == "0") // 출금 성공 -> 입금시도 withdraw success -> deposit
{
//입금이체
var deposit_result = SendDomeRimit_deposit(model);
if (deposit_result.ErrorCode == "0")
{
//voucher already splited
//국내이체에 전체성공하면 core table에 데이터생성하는 프로시저 실행
//_repo.startPushFromDomestit(model.processId);
domeTran.CustomerId = model.CustomerId;
domeTran.TranNo = model.processId;
//성공메세지
JsonRx.ErrorCode = "0";
JsonRx.Msg = "Success";
JsonRx.Data = domeTran;
return JsonRx;
}
//else
//{
// //출금 원복
// //request log
// //_resp = _repo.requestKFTCDomesticHistory(model, processId, "refund");
// JsonRx.ErrorCode = "1"; // refund 성공여부와 관계없이 무조건 에러표시(입금이체가 실패했으므로) var
// rejec_result = SendDomeRimit_refund(model); if (rejec_result.ErrorCode ==
// "0") JsonRx.Msg = deposit_result.Msg;//입금에러메세지 else JsonRx.Msg =
// rejec_result.Msg; //만약 원복도 실패하면 원복실패 에러메세지를 보여줌
// return JsonRx;
//}
}
else// 출금 실패 withdraw success fail
{
JsonRx = withdraw_result;
return JsonRx;
}
}
return JsonRx;
}
/* * ------------------------------------------------------------------------
* Domestic Remittance autobebit 출금이체 API호출 2019.09 Dana
* ------------------------------------------------------------------------
* */
public JsonRxResponse SendDomeRimit_withdraw(DomesticRemitModel model)
{
DbResult _logResp = new DbResult();
JsonRxResponse jsonResponse = new JsonRxResponse();
DbResult _resp = new DbResult();
//1.KFTC_DOMESTIC_HISTORY insert (실계좌-withdraw)
DomesticHistoryModel withdrawModel = new DomesticHistoryModel();
withdrawModel.SetWithdrawData(model);
_resp = _repo.requestKFTCDomesticHistory(withdrawModel);
model.processId = _resp.Id;
model.transferType = "withdraw";
//2.KFTC 출금이체 API 실행
jsonResponse = KftcTransferWithdraw(model);
jsonResponse.Id = model.processId;
if (jsonResponse.ErrorCode == "0")
{
//3.KFTC_DOMESTIC_HISTORY update(실계좌-withdraw)
var respObj_withdraw = JsonConvert.DeserializeObject<Response.withdraw>(jsonResponse.Extra);
_repo.responseKFTCDomesticHistory_withdraw(respObj_withdraw, model);
}
else
{
//3.KFTC_DOMESTIC_HISTORY update(실계좌-withdraw)
if (string.IsNullOrEmpty(jsonResponse.Extra) == true)
{
_repo.responseKFTCDomesticHistory_withdraw(null, model);
}
else
{
var respObj_withdraw = JsonConvert.DeserializeObject<Response.withdraw>(jsonResponse.Extra);
_repo.responseKFTCDomesticHistory_withdraw(respObj_withdraw, model);
}
}
return jsonResponse;
}
public JsonRxResponse KftcTransferWithdraw(DomesticRemitModel model)
{
JsonRxResponse jsonResponse = new JsonRxResponse();
DbResult logResult = new DbResult();
KFTCPostGet kftcRequest_withdraw = new KFTCPostGet();
//var gme = _repo.GetGMEMaster();
//if (gme == null)
//{
// jsonResponse.SetResponse("1", "Failed to bring GME token.", null);
// return jsonResponse;
//}
//var gmeAccessToken = gme["accessToken"].ToString();
var accessTokenTemplate = _repo.GetAccountList(model.CustomerId);
var accessToken = accessTokenTemplate.Rows[0]["access_token"].ToString();
var customerDetail = _repo.GetKFTCAccountInfo(model.CustomerId, model.FintechUseNo);
if (customerDetail == null)
{
jsonResponse.SetResponse("1", "Failed to bring customer account number.", null);
return jsonResponse;
}
var amt = (Convert.ToDecimal(model.SentAmount) + Convert.ToDecimal(model.ServiceFee)).ToString();
var withdrawObj = new Common.KFTC.Request.withdraw();
withdrawObj.bank_tran_id = ApplicationConfig.ReadWebConfig("GME_TRAN_CODE", "") + "U" + DateTime.Now.ToString("HHmmssfff"); // 은행거래 고유번호
withdrawObj.cntr_account_type = ApplicationConfig.ReadWebConfig("CNTR_ACCOUNT_TYPE", "");
withdrawObj.cntr_account_num = ApplicationConfig.ReadWebConfig("GME_WITHDRAW_ACCNO", "");
//withdrawObj.dps_print_content = lengSubstring(10, "D_" + model.RecipientName); //입금계좌 인자내역
withdrawObj.dps_print_content = lengSubstring(10, "D_" + model.senderName); //입금계좌 인자내역
withdrawObj.fintech_use_num = model.FintechUseNo; //출금계좌 핀테크번호
withdrawObj.tran_amt = amt; //거래금액
withdrawObj.tran_dtime = DateTime.Now.ToString("yyyyMMddHHmmss"); //요청일시
withdrawObj.req_client_name = customerDetail["accountName"].ToString();
withdrawObj.req_client_bank_code = customerDetail["bankCodeStd"].ToString();
withdrawObj.req_client_account_num = customerDetail["accountNum"].ToString();
withdrawObj.req_client_num = model.CustomerId;
withdrawObj.transfer_purpose = ApplicationConfig.ReadWebConfig("WITHDRAW_TRANSFER_PURPOSE", "");
string withdraw_url = ApplicationConfig.ReadWebConfig("TRANSFER_WITHDRAW", "");
string withdrawData = JsonConvert.SerializeObject(withdrawObj);
logResult = _repo.LogRequestKFTC(model.CustomerId, "Domestic Remittance/withdraw", "access_token :" + accessToken + "req :" + withdrawData);
Log.Debug("[KFTC-API-REQ] transfer/withdraw : [customerId]:" + model.CustomerId + " [REQ DATA]:" + withdrawData);
var result_withdraw = kftcRequest_withdraw.PostToKFTC(withdraw_url, accessToken, withdrawData);
/* 출금 실패 withdraw fail */
if (string.IsNullOrEmpty(result_withdraw))
{
jsonResponse.ErrorCode = "1";
jsonResponse.Msg = "FAILED TO KFTC OPEN-FLATFORM (transfer/withdraw) QUERY!";
_repo.LogResponseKFTC(logResult.Id, null, jsonResponse.ErrorCode, jsonResponse.Msg);
return jsonResponse;
}
var respObj_withdraw = JsonConvert.DeserializeObject<Response.withdraw>(result_withdraw);
Log.Debug("[KFTC-API-RES] transfer/withdraw : " + result_withdraw);
if (respObj_withdraw.rsp_code == "A0001" ||
respObj_withdraw.rsp_code == "A0003" ||
respObj_withdraw.rsp_code == "A0007" ||
respObj_withdraw.bank_rsp_code == "400")
{
Thread.Sleep(1 * 60 * 1000);
/* 이체결과확인 */
respObj_withdraw = CheckWithdrawResult(ref respObj_withdraw, model.CustomerId, "1");
//_repo.responseKFTCDomesticHistory_withdraw(respObj_withdraw, processId, model.CustomerId);
if (respObj_withdraw.rsp_code == "A0001" ||
respObj_withdraw.rsp_code == "A0003" ||
respObj_withdraw.rsp_code == "A0007" ||
respObj_withdraw.bank_rsp_code == "400")
{
Thread.Sleep(2 * 60 * 1000);
/* 이체결과확인 */
respObj_withdraw = CheckWithdrawResult(ref respObj_withdraw, model.CustomerId, "2");
//_repo.responseKFTCDomesticHistory_withdraw(respObj_withdraw, processId, model.CustomerId);
if (respObj_withdraw.rsp_code == "A0001" ||
respObj_withdraw.rsp_code == "A0003" ||
respObj_withdraw.rsp_code == "A0007" ||
respObj_withdraw.bank_rsp_code == "400")
{
jsonResponse.ErrorCode = "1";
jsonResponse.Msg = respObj_withdraw.rsp_message;
jsonResponse.Extra = JsonConvert.SerializeObject(respObj_withdraw);
_repo.LogResponseKFTC(logResult.Id, result_withdraw, respObj_withdraw.rsp_code, respObj_withdraw.rsp_message);
//_repo.responseKFTCDomesticHistory_withdraw(respObj_withdraw, processId, model.CustomerId); // Domestic 출금이체 response log
return jsonResponse;
}
}
}
if (respObj_withdraw.rsp_code == "A0000")
{
jsonResponse.ErrorCode = "0";
jsonResponse.Msg = "Success";
jsonResponse.Extra = JsonConvert.SerializeObject(respObj_withdraw);
_repo.LogResponseKFTC(logResult.Id, result_withdraw, respObj_withdraw.rsp_code, respObj_withdraw.rsp_message);
//_repo.responseKFTCDomesticHistory_withdraw(respObj_withdraw, processId, model.CustomerId); // Domestic 출금이체 response log
return jsonResponse;
}
else
{
jsonResponse.ErrorCode = "1";
jsonResponse.Msg = respObj_withdraw.rsp_message;
jsonResponse.Extra = JsonConvert.SerializeObject(respObj_withdraw);
_repo.LogResponseKFTC(logResult.Id, result_withdraw, respObj_withdraw.rsp_code, respObj_withdraw.rsp_message);
//_repo.responseKFTCDomesticHistory_withdraw(respObj_withdraw, processId, model.CustomerId); // Domestic 출금이체 response log
return jsonResponse;
}
}
/* * ------------------------------------------------------------------------
* Domestic Remittance autobebit 입금이체 API호출 2019.09 Dana
* ------------------------------------------------------------------------
* */
public JsonRxResponse SendDomeRimit_deposit(DomesticRemitModel model)
{
JsonRxResponse jsonResponse = new JsonRxResponse();
DbResult _resp = new DbResult();
//1.KFTC_DOMESTIC_HISTORY insert (실계좌-withdraw)
DomesticHistoryModel depositModel = new DomesticHistoryModel();
depositModel.SetDepositData(model);
_resp = _repo.requestKFTCDomesticHistory(depositModel);
//2.KFTC 입금이체 API실행
model.transferType = "deposit";
jsonResponse = KftcTransferDeposit(model);
jsonResponse.Id = model.processId;
if (jsonResponse.ErrorCode == "0")
{
//3.KJ_AUTO_REFUND update
KJAutoRefundModel kjModel = new KJAutoRefundModel();
kjModel.SetDepositData("Domestic", "SUCCESS", model);
_resp = _repo.SendAutoRefund(kjModel);
//4.KFTC_DOMESTIC_HISTORY update(실계좌-deposit)
var depositObj = JsonConvert.DeserializeObject<Response.deposit>(jsonResponse.Extra);
_repo.responseKFTCDomesticHistory_DepositRefund(depositObj, model);
}
else
{
//3.KJ_AUTO_REFUND update
KJAutoRefundModel kjModel = new KJAutoRefundModel();
kjModel.SetDepositData("Domestic", "FAIL", model);
_resp = _repo.SendAutoRefund(kjModel);
//4.KFTC_DOMESTIC_HISTORY update(실계좌-depoit)
if (string.IsNullOrEmpty(jsonResponse.Extra) == true)
{
_repo.responseKFTCDomesticHistory_DepositRefund(null, model);
}
else
{
var depositObj = JsonConvert.DeserializeObject<Response.deposit>(jsonResponse.Extra);
_repo.responseKFTCDomesticHistory_DepositRefund(depositObj, model);
}
}
return jsonResponse;
}
public JsonRxResponse KftcTransferDeposit(DomesticRemitModel model)
{
JsonRxResponse jsonResponse = new JsonRxResponse();
DbResult logResult = new DbResult();
KFTCPostGet kftcRequest = new KFTCPostGet();
var gme = _repo.GetGMEMaster();
if (gme == null)
{
jsonResponse.SetResponse("1", "Failed to bring GME token.", null);
return jsonResponse;
}
var gmeAccessToken = gme["accessToken"].ToString();
//string customerName = "";
//string customerBankCode = "034";
//string customerAccountNo = "";
//if(model.type=="wallet")
//{
// var customerDetail = _repo.GetGMECustomerList(model.CustomerId);
// customerName = customerDetail.Rows[0]["fullName"].ToString();
// customerAccountNo = customerDetail.Rows[0]["walletAccountNo"].ToString();
//}
//else if(model.type=="autodebit")
//{
// var customerDetail = _repo.GetKFTCAccountInfo(model.CustomerId, model.FintechUseNo);
// if (customerDetail == null)
// {
// jsonResponse.SetResponse("1", "Failed to bring customer account number.", null);
// return jsonResponse;
// }
// customerName = customerDetail["accountName"].ToString();
// customerBankCode = customerDetail["bankCodeStd"].ToString();
// customerAccountNo = customerDetail["accountNum"].ToString();
//}
Request.deposit deposit_req = new Request.deposit()
{
cntr_account_type = ApplicationConfig.ReadWebConfig("CNTR_ACCOUNT_TYPE", ""),
cntr_account_num = ApplicationConfig.ReadWebConfig("GME_DEPOSIT_ACCNO", ""),
wd_pass_phrase = ApplicationConfig.ReadWebConfig("pass_phrase", ""), // "입금이체용 암호문구";
wd_print_content = lengSubstring(10, "D_" + model.senderName),//출금계좌인자내역(GME통장내역)
name_check_option = "off",
req_cnt = "1",
tran_dtime = DateTime.Now.ToString("yyyyMMddHHmmss"),
req_list = new List<Request.bank_account>()
};
var tranAmt = (model.transferType == "refund") ? (Convert.ToDecimal(model.SentAmount) + Convert.ToDecimal(model.ServiceFee)).ToString() : model.SentAmount;
Request.bank_account bank = new Request.bank_account()
{
bank_tran_id = ApplicationConfig.ReadWebConfig("GME_TRAN_CODE", "") + "U" + DateTime.Now.ToString("HHmmssfff"), // 은행거래 고유번호
tran_no = "1",
bank_code_std = model.RecipientBankCode,//입금은행코드
account_num = model.RecipientAccountNo,//입금계좌번호
account_holder_name = lengSubstring(10, model.RecipientName),//입금계좌 예금주명
print_content = lengSubstring(10, model.senderName),//입금계좌인자내역
tran_amt = tranAmt, //입금금액
req_client_name = lengSubstring(10, model.senderName),
req_client_bank_code = model.senderBankCode,
req_client_account_num = model.senderAccountNo,
req_client_num = model.CustomerId,
transfer_purpose = ApplicationConfig.ReadWebConfig("WITHDRAW_TRANSFER_PURPOSE", "")
};
deposit_req.req_list.Add(bank);
var deposit_body = JsonConvert.SerializeObject(deposit_req);
/* KFTC 입금 API 호출 TRANSFER/DEPOSIT start */
try
{
string deposit_url = @"v2.0/transfer/deposit/acnt_num";
logResult = _repo.LogRequestKFTC(model.CustomerId, "Domestic Remittance/deposit", "access_token :" + gmeAccessToken + "req :" + deposit_body);
Log.Debug("[KFTC-API-REQ] transfer/deposit : [customerId]:" + model.CustomerId + " [REQ DATA]:" + deposit_body);
var deposit_result = kftcRequest.PostToKFTC(deposit_url, gmeAccessToken, deposit_body);
/* 입금이체 요청 실패 TRANSFER/DEPOSIT fail */
if (string.IsNullOrEmpty(deposit_result))
{
jsonResponse.ErrorCode = "1";
jsonResponse.Msg = "FAILED TO KFTC OPEN-FLATFORM (TRANSFER/DEPOSIT)!";
_repo.LogResponseKFTC(logResult.Id, deposit_result, jsonResponse.ErrorCode, jsonResponse.Msg);
return jsonResponse;
}
/* 입금이체 API 결과처리 TRANSFER/DEPOSIT result */
var objDepositRst = JsonConvert.DeserializeObject<Response.deposit>(deposit_result);
Log.Debug("[KFTC-API-RES] transfer/deposit : " + deposit_result);
/* 처리중으로 나오면 결과 재확인 result re-check */
if (objDepositRst.rsp_code == "A0001" ||
objDepositRst.rsp_code == "A0003" ||
objDepositRst.rsp_code == "A0007" ||
objDepositRst.res_list[0].bank_rsp_code == "400" ||
objDepositRst.res_list[0].bank_rsp_code == "803" ||
objDepositRst.res_list[0].bank_rsp_code == "804")
{
Thread.Sleep(1 * 60 * 1000);
/* 이체결과 조회 */
objDepositRst = CheckDepositResult(ref objDepositRst, model.CustomerId, "1");
//_repo.responseKFTCDomesticHistory_DepositRefund(objDepositRstTemp, processId, model.CustomerId, flag);
if (objDepositRst.rsp_code == "A0001" ||
objDepositRst.rsp_code == "A0003" ||
objDepositRst.rsp_code == "A0007" ||
objDepositRst.res_list[0].bank_rsp_code == "400" ||
objDepositRst.res_list[0].bank_rsp_code == "803" ||
objDepositRst.res_list[0].bank_rsp_code == "804")
{
Thread.Sleep(2 * 60 * 1000);
objDepositRst = CheckDepositResult(ref objDepositRst, model.CustomerId, "2");
//_repo.responseKFTCDomesticHistory_DepositRefund(objDepositRstTemp, processId, model.CustomerId, flag);
if (objDepositRst.rsp_code == "A0001" ||
objDepositRst.rsp_code == "A0003" ||
objDepositRst.rsp_code == "A0007" ||
objDepositRst.res_list[0].bank_rsp_code == "400" ||
objDepositRst.res_list[0].bank_rsp_code == "803" ||
objDepositRst.res_list[0].bank_rsp_code == "804")
{
//실패로그 남기기
jsonResponse.ErrorCode = "1";
jsonResponse.Msg = objDepositRst.rsp_message;
jsonResponse.Extra = JsonConvert.SerializeObject(objDepositRst);
_repo.LogResponseKFTC(logResult.Id, deposit_result, objDepositRst.rsp_code, objDepositRst.rsp_message);
return jsonResponse;
}
}
}
if (objDepositRst.rsp_code == "A0000")
{
jsonResponse.ErrorCode = "0";
jsonResponse.Msg = "Success";
jsonResponse.Extra = JsonConvert.SerializeObject(objDepositRst);
//jsonResponse.Data = objDepositRst;
_repo.LogResponseKFTC(logResult.Id, deposit_result, objDepositRst.rsp_code, objDepositRst.rsp_message);
//_repo.responseKFTCDomesticHistory_DepositRefund(objDepositRst, processId, model.CustomerId, flag); // Domestic 입금이체 response log
//kjModel.action = "SUCCESS";
//_repo.SendAutoRefund(kjModel);
return jsonResponse;
}
else
{
jsonResponse.ErrorCode = "1";
jsonResponse.Msg = objDepositRst.rsp_message;
jsonResponse.Extra = JsonConvert.SerializeObject(objDepositRst);
_repo.LogResponseKFTC(logResult.Id, deposit_result, objDepositRst.rsp_code, objDepositRst.rsp_message);
//_repo.responseKFTCDomesticHistory_DepositRefund(objDepositRst, processId, model.CustomerId, flag); // Domestic 입금이체 response log
//kjModel.action = "FAIL";
//_repo.SendAutoRefund(kjModel);
return jsonResponse;
}
}
catch (Exception ex)
{
Log.Error("Exception tracked : " + ex.Message, ex);
jsonResponse.SetResponse("1", "Exception tracked : " + ex.Message, null);
_repo.LogResponseKFTC(logResult.Id, "Exception occured!", "999", ex.Message);
//_repo.responseKFTCDomesticHistory_DepositRefund(null, processId, model.CustomerId, flag);
//kjModel.action = "FAIL";
//_repo.SendAutoRefund(kjModel);
return jsonResponse;
}
}
/* * ------------------------------------------------------------------------
* Domestic Remittance autobebit 환불(입금이체)API호출 2019.09 Dana
* ------------------------------------------------------------------------
* */
public JsonRxResponse SendDomeRimit_refund(DomesticRemitModel model)
{
JsonRxResponse jsonResponse = new JsonRxResponse();
DbResult _resp = new DbResult();
//1.KFTC_DOMESTIC_HISTORY insert (실계좌-refund)
DomesticHistoryModel refundModel = new DomesticHistoryModel();
refundModel.SetRefundData(model);
_resp = _repo.requestKFTCDomesticHistory(refundModel);
//2.KFTC 입금이체 API실행
model.transferType = "refund";
jsonResponse = KftcTransferDeposit(model);
jsonResponse.Id = model.processId;
if (jsonResponse.ErrorCode == "0")
{
//3.KJ_AUTO_REFUND insert
KJAutoRefundModel kjModel = new KJAutoRefundModel();
kjModel.SetRefundData("Domestic", "SUCCESS", model);
_resp = _repo.SendAutoRefund(kjModel);
//4.KFTC_DOMESTIC_HISTORY update(실계좌-refund)
var depositObj = JsonConvert.DeserializeObject<Response.deposit>(jsonResponse.Extra);
_repo.responseKFTCDomesticHistory_DepositRefund(depositObj, model);
}
else
{
//3.KJ_AUTO_REFUND update
KJAutoRefundModel kjModel = new KJAutoRefundModel();
kjModel.SetRefundData("Domestic", "FAIL", model);
_resp = _repo.SendAutoRefund(kjModel);
//4.KFTC_DOMESTIC_HISTORY update(실계좌-refund)
if (string.IsNullOrEmpty(jsonResponse.Extra) == true)
{
_repo.responseKFTCDomesticHistory_DepositRefund(null, model);
}
else
{
var depositObj = JsonConvert.DeserializeObject<Response.deposit>(jsonResponse.Extra);
_repo.responseKFTCDomesticHistory_DepositRefund(depositObj, model);
}
}
return jsonResponse;
}
public Common.Model.DbResult CheckLoginPassword(string user, string txnPassword, string paymentType, string customerId)
{
return _repo.CheckLoginPassword(user, txnPassword, paymentType, customerId);
}
/* * ------------------------------------------------------------------------
* Domestic Remittance wallet 입금(출금이체 함수호출) 2019.09 Dana
* ------------------------------------------------------------------------
* */
public JsonRxResponse SendDomeRimit_wallet_withdraw(DomesticRemitModel model)
{
JsonRxResponse JsonRx = new JsonRxResponse
{
ErrorCode = "1",
Msg = "Domestic Remittance(wallet) Request cannot proceed further. Please contact GME head office."
};
DbResult _resp = new DbResult();
//1.KFTC_DOMESTIC_HISTORY insert (가상계좌-walletwithdraw)
DomesticHistoryModel historyModel = new DomesticHistoryModel();
historyModel.SetWalletHistoryData(model);
_resp = _repo.requestKFTCDomesticHistory(historyModel);
JsonRx.Id = model.processId = _resp.Id;
////2. KFTC_DOMESTIC_HISTORY update(가상계좌-walletwithdraw)
//Response.withdraw response = new Response.withdraw();//log에 응답 성공 message넣기
//response.rsp_code = "A0000";
//_repo.responseKFTCDomesticHistory_withdraw(response, model); // Domestic 출금 response log(API호출이 없으므로 무조건 성공으로)
//3. KJ_AUTO_REFUND insert (REQ)
KJAutoRefundModel kjModel = new KJAutoRefundModel();
kjModel.SetDepositData("DomesticWallet", "REQ", model);
_resp = _repo.SendAutoRefund(kjModel);
if (_resp.ResponseCode != "0")
{
JsonRx.ErrorCode = "1";
JsonRx.Msg = "FAIL.Check your Wallet and Wallet Balance.";
return JsonRx;
}
kjModel.rowId = _resp.Id;
//4. KFTC_DOMESTIC_HISTORY insert(가상계좌-deposit)
//var GMEcustomerDetail = _repo.GetGMECustomerList(model.CustomerId);
DomesticHistoryModel depositModel = new DomesticHistoryModel();
depositModel.SetDepositData(model);
_repo.requestKFTCDomesticHistory(depositModel);// Domestic 입금이체 request log
//5. KFTC 입금이체 API 이용 (deposit)
JsonRxResponse depositResult = new JsonRxResponse();
model.transferType = "deposit";
depositResult = KftcTransferDeposit(model);
//6. KFTC_DOMESTIC_HISTORY update(가상계좌-deposit)
if (string.IsNullOrEmpty(depositResult.Extra) == true)
{
_repo.responseKFTCDomesticHistory_DepositRefund(null, model);
}
else
{
var respObj = JsonConvert.DeserializeObject<Response.deposit>(depositResult.Extra);
_repo.responseKFTCDomesticHistory_DepositRefund(respObj, model);
}
if (depositResult.ErrorCode != "0")
{
//7. KJ_AUTO_REFUND update (FAIL)
kjModel.SetRefundData("DomesticWallet_FAIL", "FAIL", model);
_resp = _repo.SendAutoRefund(kjModel);
//8. KFTC_DOMESTIC_HISTORY Insert(가상계좌-refund)
DomesticHistoryModel refundModel = new DomesticHistoryModel();
refundModel.SetRefundData(model);
_repo.requestKFTCDomesticHistory(refundModel);
//이건 필요없을것 같다.....
//_repo.responseKFTCDomesticHistory_DepositRefund(null, processId, model.CustomerId, "refund");
JsonRx.ErrorCode = "1";
JsonRx.Msg = depositResult.Msg;
return JsonRx;
}
else
{
//7. KJ_AUTO_REFUND update (SUCCESS)
kjModel.SetDepositData("DomesticWallet_SUCC", "SUCCESS", model);
_resp = _repo.SendAutoRefund(kjModel);
JsonRx.ErrorCode = "0";
JsonRx.Msg = "Success";
return JsonRx;
}
}
/* * ------------------------------------------------------------------------
* Domestic Remittance wallet 출금이체(Using KFTC) 2019.09 Dana
* ------------------------------------------------------------------------
* */
public JsonRxResponse SendDomeRimit_wallet_Deposit(DomesticRemitModel model)
{
JsonRxResponse res = new JsonRxResponse();
DbResult _logResp = new DbResult();
DbResult _resp = new DbResult();
var gme = _repo.GetGMEMaster();
if (gme == null)
{
res.SetResponse("1", "Failed to bring GME token.", null);
return res;
}
var gmeAccessToken = gme["accessToken"].ToString(); // 입금시에는 GME AccessToken 사용
/* @Max 수정 */
//고객의 이름, 가상계좌번호
var customerDetail = _repo.GetGMECustomerList(model.CustomerId);
//var customerDetail = _repo.GetAccountList(model.CustomerId);
Request.deposit deposit_req = new Request.deposit()
{
cntr_account_type = ApplicationConfig.ReadWebConfig("CNTR_ACCOUNT_TYPE", ""),
cntr_account_num = ApplicationConfig.ReadWebConfig("GME_DEPOSIT_ACCNO", ""),
wd_pass_phrase = ApplicationConfig.ReadWebConfig("pass_phrase", ""), // "입금이체용 암호문구";
wd_print_content = lengSubstring(10, "D_" + model.RecipientName), //출금계좌인자내역
name_check_option = "off",
req_cnt = "1",
tran_dtime = DateTime.Now.ToString("yyyyMMddHHmmss"),
req_list = new List<Request.bank_account>()
};
Request.bank_account bank = new Request.bank_account()
{
bank_tran_id = ApplicationConfig.ReadWebConfig("GME_TRAN_CODE", "") + "U" + DateTime.Now.ToString("HHmmssfff"), // 은행거래 고유번호
tran_no = "1",
bank_code_std = model.RecipientBankCode,//입금은행코드
account_num = model.RecipientAccountNo,//입금계좌번호
account_holder_name = lengSubstring(10, model.RecipientName),//입금계좌 예금주명
print_content = lengSubstring(10, model.RecipientName),//입금계좌인자내역
tran_amt = Convert.ToDecimal(model.SentAmount).ToString(), //입금금액
req_client_name = customerDetail.Rows[0]["fullName"].ToString(),
req_client_bank_code = "034", //가상은행코드
req_client_account_num = customerDetail.Rows[0]["walletAccountNo"].ToString(),
req_client_num = model.CustomerId,
transfer_purpose = ApplicationConfig.ReadWebConfig("WITHDRAW_TRANSFER_PURPOSE", "") // transfer
};
deposit_req.req_list.Add(bank);
var deposit_body = JsonConvert.SerializeObject(deposit_req);
/* KFTC 입금 API 호출 TRANSFER/DEPOSIT start */
try
{
KFTCPostGet kftcRequest = new KFTCPostGet();
string deposit_url = @"v2.0/transfer/deposit/acnt_num";
var deposit_result = kftcRequest.PostToKFTC(deposit_url, gmeAccessToken, deposit_body);
_logResp = _repo.LogRequestKFTC(model.CustomerId, "Domestic Remittance/deposit", "access_token :" + gmeAccessToken + "req :" + deposit_body);
/* 입금이체 요청 실패 TRANSFER/DEPOSIT fail */
if (string.IsNullOrEmpty(deposit_result))
{
res.ErrorCode = "1";
res.Msg = "FAILED TO KFTC OPEN-FLATFORM (TRANSFER/DEPOSIT)!";
_repo.LogResponseKFTC(_logResp.Id, deposit_result, res.ErrorCode, res.Msg);
//_repo.responseKFTCDomesticHistory_DepositRefund(null, processId, model.CustomerId, "deposit");
return res;
}
/* 입금이체 API 결과처리 TRANSFER/DEPOSIT result */
var objDepositRst = JsonConvert.DeserializeObject<Response.deposit>(deposit_result);
_repo.LogResponseKFTC(_logResp.Id, deposit_result, objDepositRst.rsp_code, (objDepositRst.rsp_code == "A0000") ? "Success!" : objDepositRst.rsp_message);
//_repo.responseKFTCDomesticHistory_DepositRefund(objDepositRst, processId, model.CustomerId, "deposit"); // Domestic 입금이체 response log
/* 처리중으로 나오면 결과 재확인 result re-check */
if (objDepositRst.rsp_code == "A0001" ||
objDepositRst.rsp_code == "A0003" ||
objDepositRst.rsp_code == "A0007" ||
objDepositRst.res_list[0].bank_rsp_code == "400" ||
objDepositRst.res_list[0].bank_rsp_code == "803" ||
objDepositRst.res_list[0].bank_rsp_code == "804")
{
Thread.Sleep(1 * 60 * 1000);
/* 이체결과 조회 */
objDepositRst = CheckDepositResult(ref objDepositRst, model.CustomerId, "1");
//_repo.responseKFTCDomesticHistory_DepositRefund(objDepositRstTemp, processId, model.CustomerId, "deposit");
if (objDepositRst.rsp_code == "A0001" ||
objDepositRst.rsp_code == "A0003" ||
objDepositRst.rsp_code == "A0007" ||
objDepositRst.res_list[0].bank_rsp_code == "400" ||
objDepositRst.res_list[0].bank_rsp_code == "803" ||
objDepositRst.res_list[0].bank_rsp_code == "804")
{
Thread.Sleep(2 * 60 * 1000);
objDepositRst = CheckDepositResult(ref objDepositRst, model.CustomerId, "2");
//_repo.responseKFTCDomesticHistory_DepositRefund(objDepositRstTemp, processId, model.CustomerId, "deposit");
if (objDepositRst.rsp_code == "A0001" ||
objDepositRst.rsp_code == "A0003" ||
objDepositRst.rsp_code == "A0007" ||
objDepositRst.res_list[0].bank_rsp_code == "400" ||
objDepositRst.res_list[0].bank_rsp_code == "803" ||
objDepositRst.res_list[0].bank_rsp_code == "804")
{
//실패로그 남기기
res.ErrorCode = "1";
res.Msg = objDepositRst.rsp_message;
res.Id = objDepositRst.api_tran_id;
res.Extra = objDepositRst.api_tran_dtm;
_repo.LogResponseKFTC(_logResp.Id, deposit_result, objDepositRst.rsp_code, objDepositRst.rsp_message);
//_repo.responseKFTCDomesticHistory_DepositRefund(objDepositRstTemp, processId, model.CustomerId, "deposit"); // Domestic 입금이체 response log
return res;
}
}
}
if (objDepositRst.rsp_code == "A0000")
{
res.ErrorCode = "0";
res.Msg = "Success";
res.Extra = JsonConvert.SerializeObject(objDepositRst);
_repo.LogResponseKFTC(_logResp.Id, deposit_result, objDepositRst.rsp_code, objDepositRst.rsp_message);
//_repo.responseKFTCDomesticHistory_DepositRefund(objDepositRst, processId, model.CustomerId, "deposit"); // Domestic 입금이체 response log
return res;
}
else
{
res.ErrorCode = "1";
res.Msg = objDepositRst.rsp_message;
_repo.LogResponseKFTC(_logResp.Id, deposit_result, objDepositRst.rsp_code, objDepositRst.rsp_message);
//_repo.responseKFTCDomesticHistory_DepositRefund(objDepositRst, processId, model.CustomerId, "deposit"); // Domestic 입금이체 response log
return res;
}
}
catch (Exception ex)
{
Log.Error("Exception tracked : " + ex.Message, ex);
res.SetResponse("1", "Exception tracked : " + ex.Message, null);
_repo.LogResponseKFTC(_logResp.Id, "Exception occured!", "999", ex.Message);
//_repo.responseKFTCDomesticHistory_DepositRefund(null, processId, model.CustomerId, "deposit"); // Domestic 입금이체 response log
return res;
}
}
/* 입금이체 시 사용. substring하기 위한 함수 @Dana */
public string lengSubstring(int subLength, string str)
{
string result = "";
if (str.Length >= subLength)
result = str.Substring(0, subLength);
else
result = str;
return result;
}
public JsonRxResponse DeleteAccount(DeleteRequest req, string customerId)
{
JsonRxResponse res = new JsonRxResponse();
KftcSendMoneyRequest request;
try
{
var kftcLogId = Crypto.Decrypt(req.KftcLogId, Utilities.ReadWebConfig("ktft_client_info_salt", ""));
request = _repo.GetCustomerKFTCInfo(customerId, kftcLogId);
if (null == request)
{
res.ErrorCode = "1";
res.Msg = "Error:Invalid auto debit account";
return res;
}
DbResult dbResult = new DbResult();
DbResult logResult = new DbResult();
var fintechUseNo = request.FintechUseNo;
logResult = _repo.LogRequestKFTC(customerId, "DBDelete", "CustomerId :" + customerId + " fintechUseNo :" + fintechUseNo);
dbResult = _repo.DeleteAccount(customerId, fintechUseNo);
_repo.LogResponseKFTC(logResult.Id, JsonConvert.SerializeObject(dbResult), dbResult.ResponseCode, dbResult.Msg);
res.ErrorCode = dbResult.ResponseCode;
res.Msg = dbResult.Msg;
res.Data = new { Message = dbResult.Msg };
return res;
}
catch (Exception ex)
{
res.ErrorCode = "1";
res.Msg = "Error:Invalid auto debit account";
return res;
}
}
private string getBankTranId()
{
//f3aa2cd1-1e9b-41fd-80f1-fd518cac9b81
Guid guid = Guid.NewGuid();
string guidSub = guid.ToString().Replace("-", "");
Random rndNum = new Random();
int rNum = rndNum.Next(0, 29);
string unique = guidSub.Substring(rNum, 3);
string bankTranId = ApplicationConfig.ReadWebConfig("GME_TRAN_CODE", "") + "U" + DateTime.Now.ToString("HHmmss") + unique;
return bankTranId.ToUpper();
}
public JsonRxResponse RegistrationKFTC_V4(string email, string lang, string client_id)
{
JsonRxResponse res = new JsonRxResponse();
var customerId = "";
try
{
var dbResult = _repo.GetCustomerIdEmail(email);
if (dbResult != null)
{
customerId = dbResult.Msg;
string URL = GetKftcUrl(customerId, lang, client_id);
//List<AccountDetails> AccountList = GetAccountList(customerId);
//AccountList.ForEach(x => x.KftcAccountId = Crypto.Encrypt(x.KftcAccountId, Utilities.ReadWebConfig("ktft_client_info_salt", "")));
List<Header> ListLangauge = GetKftcLanguage(customerId);
List<Header> ListHeader = GetKftcHeader_V4(customerId);
KftcCommonResponse Response = new KftcCommonResponse()
{
Header = ListHeader,
URL = URL,
Language = ListLangauge
};
res.ErrorCode = "0";
res.Msg = "Success";
res.Data = Response;
return res;
}
else
{
res.ErrorCode = "1";
res.Msg = "failed";
res.Data = null;
return res;
}
}
catch (Exception ex)
{
Log.Error("Exception tracked : " + ex.Message, ex);
res.SetResponse("1", "Exception tracked : " + ex.Message, null);
res.Data = new { };
return res;
}
}
private List<Header> GetKftcHeader_V4(string customerId)
{
DataRow dr = _repo.GetCustomerData_V4(customerId);
List<Header> listKftcHeader = new List<Header>();
string[] param = new string[] { "Kftc-Bfop-UserSeqNo", "Kftc-Bfop-UserCI", "Kftc-Bfop-UserName" ,
"Kftc-Bfop-UserInfo","Kftc-Bfop-UserCellNo","Kftc-Bfop-PhoneCarrier","Kftc-Bfop-UserEmail"};
if (dr == null)
{
//KftcHeader.Add("Kftc-Bfop-UserSeqNo", "");
//KftcHeader.Add("Kftc-Bfop-UserCI", "");
//KftcHeader.Add("Kftc-Bfop-UserName", "");
//KftcHeader.Add("Kftc-Bfop-UserInfo", "");
//KftcHeader.Add("Kftc-Bfop-UserCellNo", "");
//KftcHeader.Add("Kftc-Bfop-PhoneCarrier", "");
//KftcHeader.Add("Kftc-Bfop-UserEmail", "");
foreach (var item in param)
{
Header KftcHeader = new Header();
KftcHeader.Key = item;
KftcHeader.Value = "";
listKftcHeader.Add(KftcHeader);
}
}
else
{
Header KftcHeader1 = new Header();
KftcHeader1.Key = "Kftc-Bfop-UserSeqNo";
KftcHeader1.Value = string.IsNullOrEmpty(dr["userSeqNo"].ToString()) ? "" : dr["userSeqNo"].ToString();
listKftcHeader.Add(KftcHeader1);
Header KftcHeader2 = new Header();
KftcHeader2.Key = "Kftc-Bfop-UserCI";
KftcHeader2.Value = string.IsNullOrEmpty(dr["userCi"].ToString()) ? "" : dr["userCi"].ToString();
listKftcHeader.Add(KftcHeader2);
Header KftcHeader3 = new Header();
KftcHeader3.Key = "Kftc-Bfop-UserName";
KftcHeader3.Value = string.IsNullOrEmpty(dr["userName"].ToString()) ? "" : dr["userName"].ToString();
listKftcHeader.Add(KftcHeader3);
Header KftcHeader4 = new Header();
KftcHeader4.Key = "Kftc-Bfop-UserInfo";
KftcHeader4.Value = string.IsNullOrEmpty(dr["userInfo"].ToString()) ? "" : dr["userInfo"].ToString();
listKftcHeader.Add(KftcHeader4);
Header KftcHeader5 = new Header();
KftcHeader5.Key = "Kftc-Bfop-UserCellNo";
KftcHeader5.Value = string.IsNullOrEmpty(dr["UserCellNo"].ToString()) ? "" : dr["UserCellNo"].ToString();
listKftcHeader.Add(KftcHeader5);
Header KftcHeader6 = new Header();
KftcHeader6.Key = "Kftc-Bfop-PhoneCarrier";
KftcHeader6.Value = "";
listKftcHeader.Add(KftcHeader6);
Header KftcHeader7 = new Header();
KftcHeader7.Key = "Kftc-Bfop-UserEmail";
KftcHeader7.Value = string.IsNullOrEmpty(dr["UserEmail"].ToString()) ? "" : dr["UserEmail"].ToString();
listKftcHeader.Add(KftcHeader7);
Header KftcHeader8 = new Header();
KftcHeader8.Key = "Kftc-Bfop-AccountNum";
KftcHeader8.Value = string.IsNullOrEmpty(dr["AccountNum"].ToString()) ? "" : dr["AccountNum"].ToString();
listKftcHeader.Add(KftcHeader8);
Header KftcHeader9 = new Header();
KftcHeader9.Key = "Kftc-Bfop-BankCodeStd";
KftcHeader9.Value = string.IsNullOrEmpty(dr["BankCodeStd"].ToString()) ? "" : dr["BankCodeStd"].ToString();
listKftcHeader.Add(KftcHeader9);
}
return listKftcHeader;
}
public bool SetRealNameDataIdWise(RealNameCheckDetails realNameCheckDetails)
{
var idNumber = realNameCheckDetails.idNumber.ToString().Replace("-", "");
var reqRealNameObj = new Common.KFTC.Request.real_name();
var processId = DateTime.Now.Ticks + realNameCheckDetails.customerId;
bool isSuccess = false;
string saveIdNumber = "";
//string[] idTypes = { "2", "5", "4", "1", "4" };
string[] idTypes = { "2", "1", "4", "5", "6", "3", "E", "4" };
for (int i = 0; i < 8; i++)
{
reqRealNameObj.bank_code_std = realNameCheckDetails.BankCode;
reqRealNameObj.account_num = realNameCheckDetails.AccountNumber;
reqRealNameObj.tran_dtime = DateTime.Now.ToString("yyyyMMddHHmmss");
//조합주민번호를 만들어서 체크
if (i == 7)
{
int pos = 0;
for (int j = idNumber.Length - 1; j > 0; j--)
{
char ch = idNumber[j];
if (ch >= 0x30 && ch <= 0x39)
{
pos = j;
break;
}
}
reqRealNameObj.account_holder_info_type = idTypes[i];
reqRealNameObj.account_holder_info = String.Format("{0}{1}{2}{3}",
realNameCheckDetails.dob,
realNameCheckDetails.gender,
realNameCheckDetails.country,
realNameCheckDetails.idNumber.Substring(pos - 4, 5));
}
else
{
reqRealNameObj.account_holder_info_type = idTypes[i];
reqRealNameObj.account_holder_info = idNumber;
}
saveIdNumber = reqRealNameObj.account_holder_info.Insert(6, "-");
isSuccess = KFTC_RealNameCheck_Common(reqRealNameObj, realNameCheckDetails.gmeAccessToken, realNameCheckDetails.customerId);
if (isSuccess == true)
{
_repo.SetRealNameData(realNameCheckDetails.customerId, reqRealNameObj.account_holder_info_type, saveIdNumber);
break;
}
}
return isSuccess;
}
}
}