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.
 
 
 

441 lines
17 KiB

using Common.Model;
using Common.Model.KftcSendMoney;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Business.KFTCSendMoneyBussiness
{
public class KftcSendMoney : IKftcSendMoney
{
public DbResult DebitAccount(KftcSendMoneyRequest model)
{
DbResult _dbRes = new DbResult();
DbResult _logResp = new DbResult();
string customerId = model.CustomerId;
string accessToken = model.AccessToken;
string fintechUseNo = model.FintechUseNo;
string cAmt = model.CollAmt;
string accountName = model.AccountName;
string customerBankCode = model.BankCode;
string accountNum = model.AccountNum;
string accHolderInfoType = model.AccHolderInfoType;
string accHolderInfo = model.AccHolderInfo;
if (string.IsNullOrWhiteSpace(customerId)
|| string.IsNullOrWhiteSpace(accessToken)
|| string.IsNullOrWhiteSpace(fintechUseNo)
|| string.IsNullOrWhiteSpace(cAmt)
|| string.IsNullOrWhiteSpace(accountName)
|| string.IsNullOrWhiteSpace(customerBankCode)
|| string.IsNullOrWhiteSpace(accountNum)
|| string.IsNullOrWhiteSpace(accHolderInfoType)
|| string.IsNullOrWhiteSpace(accHolderInfo))
{
_dbRes.ResponseCode = "999";
_dbRes.Msg = "Oops! Something went wrong please re-login and try again.";
return _dbRes;
}
cAmt = cAmt.Split('.')[0];
_dbRes = CheckBankStatus(customerBankCode, customerId);
if (_dbRes.ResponseCode != "A0000")
{
return _dbRes;
}
if (String.IsNullOrEmpty(accHolderInfoType) == true)
{
_dbRes.ResponseCode = "999";
_dbRes.Msg = "[FAIL] Customer's real name number type is null ";
return _dbRes;
}
if (String.IsNullOrEmpty(accHolderInfo) == true)
{
_dbRes.ResponseCode = "999";
_dbRes.Msg = "[FAIL] Customer's real name number is null ";
return _dbRes;
}
if (String.IsNullOrEmpty(accountNum) == true)
{
_dbRes.ResponseCode = "999";
_dbRes.Msg = "[FAIL] Customer's real number is null ";
return _dbRes;
}
var accountHolderInfoType = accHolderInfoType;
var accountHolderInfo = accHolderInfo.Replace("-", "").Trim();
_dbRes = CheckRealName(customerId, customerBankCode, accountNum, accountHolderInfoType, accountHolderInfo);
/* 계좌실명조회가 실패하면... */
if (_dbRes.ResponseCode != "A0000")
{
return _dbRes;
}
/*
* 출금이체 서비스
*
* */
var req = new Common.KFTC.Request.withdraw();
req.dps_print_content = accountName; //입금계좌내역
req.fintech_use_num = fintechUseNo; //산업은행-1234567890
req.tran_amt = cAmt; //거래금액
req.tran_dtime = DateTime.Now.ToString("yyyyMMddHHmmss"); //요청일시
string tranDtime = req.tran_dtime;
//string tranDtime_1 = DateTime.Now.AddSeconds(-1).ToString("yyyyMMddHHmmss");
string _URL = _utility.ReadWebConfig("TRANSFER_WITHDRAW", ""); //@"transfer/withdraw";
var access_token = accessToken;
//log request
_logResp = _utility.LogRequestKFTC(customerId, "DebitAccount", "access_token :" + access_token + "req :" + JsonConvert.SerializeObject(req));
KFTCPostGet kftcRequest = new KFTCPostGet();
try
{
string postData = JsonConvert.SerializeObject(req);
/*
* 출금이체 요청
* */
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
_utility.LogResponseKFTC(_logResp.Id, resp, _dbRes.ResponseCode, _dbRes.Msg);
return _dbRes;
}
var respObj = JsonConvert.DeserializeObject<Response.withdraw>(resp);
//log response
_utility.LogResponseKFTC(_logResp.Id, resp, respObj.rsp_code, (respObj.rsp_code == "A0000") ? "Success!" : respObj.rsp_message);
if (respObj.rsp_code == "A0001")
{
Thread.Sleep(1 * 60 * 1000);
/* 이체결과확인
* */
respObj = transfer_result(ref respObj, customerId, "1");
if (respObj.rsp_code == "A0001")
{
Thread.Sleep(2 * 60 * 1000);
/* 이체결과확인
* */
respObj = transfer_result(ref respObj, customerId, "2");
if (respObj.rsp_code == "A0001")
{
_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")
{
/*
* 송금인 정보조회 삭제
*
* @Max-2018.09.07
* */
//string fromTime = respObj.api_tran_dtm.Substring(0, 14);
//max-20180615
//_dbRes = CheckRemittant(fromTime, customerId, accountNum, accountName, processId);
//respObj.remittance_check = (_dbRes.ResponseCode == "A0000") ? "Y" : "N";
respObj.remittance_check = "Y";
_saveKFTCData = SaveKFTCTranData(respObj, customerId);
//if (_dbRes.ResponseCode != "A0000")
//{
// return _dbRes;
//}
}
_dbRes.ResponseCode = respObj.rsp_code;
_dbRes.Msg = respObj.rsp_message;
_dbRes.Id = _saveKFTCData.Id;
return _dbRes;
}
catch (Exception ex)
{
//log response
_utility.LogResponseKFTC(_logResp.Id, "Exception occured!", "999", ex.Message);
_dbRes.SetError("999", ex.Message, null);
return _dbRes;
}
}
private DbResult CheckBankStatus(string customerBankCode, string customerId)
{
DbResult dbRes = new DbResult();
DbResult logRes = new DbResult();
KFTCPostGet kftcRequest = new KFTCPostGet();
//string _URL = @"bank/status";
string httpUrl = _utility.ReadWebConfig("BANK_STATUS", "");
string access_token = _utility.ReadSession("oob_access_token", "");
string gmeBankCode = _utility.ReadSession("gmeBankCode", "");
string processId = _utility.ReadSession(_utility.GetSessionKey(customerId), "");
//log request
logRes = _utility.LogRequestKFTC(customerId, "CheckBankStatus", "_URL :" + httpUrl + " access_token :" + access_token, processId);
try
{
/*
* 참가은행 상태조회!!!
* */
var resBankStatusStr = kftcRequest.GetFromKFTC(httpUrl, access_token);
/*
* 참가은행 상태조회 실패!!!
* */
if (string.IsNullOrEmpty(resBankStatusStr))
{
dbRes.ErrorCode = "999";
dbRes.Msg = "[FAIL] KFTC OPEN-FLATFORM (BANK/STATUS)!";
//log response
_utility.LogResponseKFTC(logRes.Id, null, dbRes.ErrorCode, 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
_utility.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 == customerBankCode)
{
bankStatus = item.bank_status;
}
}
if (bankStatus != "Y")
{
dbRes.ErrorCode = "999";
dbRes.Msg = String.Format("[FAIL] This bank{0} service is not available right now, please try again later !!", customerBankCode);
//log response
_utility.LogResponseKFTC(logRes.Id, null, dbRes.ErrorCode, 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.ErrorCode = "999";
dbRes.Msg = String.Format("[FAIL] This bank {0} service is not available right now, please try again later !!", gmeBankCode);
//log response
_utility.LogResponseKFTC(logRes.Id, null, dbRes.ErrorCode, dbRes.Msg);
return dbRes;
}
//성공
dbRes.SetError("A0000", "", null);
return dbRes;
}
catch (Exception ex)
{
dbRes.SetError("999", ex.Message, null);
//log response
_utility.LogResponseKFTC(logRes.Id, "Exception occured", "999", ex.Message);
return dbRes;
}
}
public DbResult CheckRealName(string customerId, string custBankCode, string custAccountNum, string accountHolderInfoType, string accountHolderInfo)
{
DbResult _dbRes = new DbResult();
DbResult _logResp = new DbResult();
KFTCPostGet kftcRequest = new KFTCPostGet();
string httpUrl = _utility.ReadWebConfig("INQUIRY_REALNAME", ""); //@"inquiry/real_name";
string oob_access_token = _utility.ReadSession("oob_access_token", "");
string processId = _utility.ReadSession(_utility.GetSessionKey(customerId), "");
//주민등록번호 Resident registration number
if (accountHolderInfoType == "8008")
{
accountHolderInfoType = "1";
}
//외국인등록번호 Foreigner registration number
else if (accountHolderInfoType == "1302")
{
accountHolderInfoType = "2";
}
//여권번호이면 조합주민번호로 조회 Passport with Combination no
else if (accountHolderInfoType == "10997")
{
accountHolderInfoType = "5";
}
//사업자등록번호 Company Registration Number
else if (accountHolderInfoType == "10988")
{
accountHolderInfoType = "6";
}
var reqRealNameObj = new Common.KFTC.Request.real_name();
reqRealNameObj.bank_code_std = custBankCode;
reqRealNameObj.account_num = custAccountNum;
reqRealNameObj.account_holder_info_type = accountHolderInfoType;
reqRealNameObj.account_holder_info = accountHolderInfo;
reqRealNameObj.tran_dtime = DateTime.Now.ToString("yyyyMMddHHmmss");
try
{
string reqRealNameStr = JsonConvert.SerializeObject(reqRealNameObj);
//로그-요청로그
_logResp = _utility.LogRequestKFTC(customerId, httpUrl, reqRealNameStr, processId);
var resRealNameStr = kftcRequest.PostToKFTC(httpUrl, oob_access_token, reqRealNameStr);
/*
* 계좌실명조회 실패!!!
* */
if (string.IsNullOrEmpty(resRealNameStr))
{
_dbRes.ErrorCode = "999";
_dbRes.Msg = "[FAIL] KFTC OPEN-FLATFORM (inquiry/real_name)";
//로그-결과로그(실패)
_utility.LogResponseKFTC(_logResp.Id, null, _dbRes.ErrorCode, _dbRes.Msg);
return _dbRes;
}
var resRealNameObj = JsonConvert.DeserializeObject<Response.real_name>(resRealNameStr);
//응답메시지가 성공일때...
if (resRealNameObj.rsp_code == "A0000" && resRealNameObj.bank_rsp_code == "000")
{
_dbRes.ErrorCode = "A0000";
_dbRes.Msg = "[SUCCESS] KFTC OPEN-FLATFORM INQUIRY";
}
//응답메시지가 성공이 아닐때..
else if (resRealNameObj.rsp_code != "A0000")
{
_dbRes.ErrorCode = 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.ErrorCode = 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.ErrorCode = resRealNameObj.rsp_code;
_dbRes.Msg = "[FAIL] KFTC OPEN-FLATFORM INQUIRY";
}
// 로그-응답로그
_utility.LogResponseKFTC(_logResp.Id, resRealNameStr, _dbRes.ErrorCode, _dbRes.Msg);
_dbRes.SetError(_dbRes.ErrorCode, _dbRes.Msg, null);
return _dbRes;
}
catch (Exception ex)
{
//로그-응답로그
_utility.LogResponseKFTC(_logResp.Id, "Exception occured!", "999", ex.Message);
_dbRes.SetError("999", ex.Message, null);
return _dbRes;
}
}
}
}