spc-kiosk-pb/Service/BsvPayment/VanSpcnCommon.cs

226 lines
13 KiB
C#
Raw Normal View History

2019-06-16 05:12:09 +00:00
using System;
using System.Collections;
using System.Text;
using Cosmos.UserFrame;
using Cosmos.BaseFrame;
using Cosmos.ServiceProvider;
using Cosmos.Common;
using Cosmos.CommonManager;
namespace Cosmos.Service
{
class VanSpcnCommon : IVanCommonUs
{
private SManager sManager = new SManager(); // 이 객체를 통해 업무 Service 호출
private StateServer StateObject = (StateServer)StateServer.GetInstance(); // StateObject : StateServer Object (객체)
private PosStatus m_cPosStatus = new PosStatus(); // 기본정보 참조
private TranStatus m_cTrnStatus = new TranStatus(); // 거래정보 참조
private IDataCommonUs m_cDataCommon = null; // POS 공통함수 인터페이스
public VanSpcnCommon()
{
m_cPosStatus = (PosStatus)StateObject.POS; // POS 기본정보
m_cTrnStatus = (TranStatus)StateObject.TRAN; // POS 거래정보
m_cDataCommon = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON);
}
#region
/// <summary>
/// 키 다운로드 요청
/// </summary>
/// <returns></returns>
public string KeyDownLoad(string[] aParam)
{
string sRet = UserCom.RST_ERR;
try
{
string sSendData = string.Empty;// 송신 전문
string sRecvData = ""; // 수신 전문
// 다운로드 요청 전문 바디 생성
string[] aIrtBody = new string[Column.POS_REQ_DOWNLOAD.LEN.Length];
aIrtBody[Column.POS_REQ_DOWNLOAD.SEQ.ReqLineInfo] = "A"; // 회선정보
aIrtBody[Column.POS_REQ_DOWNLOAD.SEQ.ReqPosIp] = ""; // 포스정보
aIrtBody[Column.POS_REQ_DOWNLOAD.SEQ.ReqPosDllVer] = m_cPosStatus.Base.PosNo; // 포스모듈버젼
aIrtBody[Column.POS_REQ_DOWNLOAD.SEQ.ReqPosSeq] = ""; // 포스일련번호
aIrtBody[Column.POS_REQ_DOWNLOAD.SEQ.ReqShopAccountNo] = "1208518096"; // 사업자번호
aIrtBody[Column.POS_REQ_DOWNLOAD.SEQ.ReqFiller] = ""; // Filler
aIrtBody[Column.POS_REQ_DOWNLOAD.SEQ.ReqETX] = PosConst.VAN_HEXA.ETX;
aIrtBody[Column.POS_REQ_DOWNLOAD.SEQ.ReqCR] = PosConst.VAN_HEXA.CR;
//다운로드 요청 전문 생성
sSendData = ItemColumn.MakeMessage(aIrtBody, Column.POS_REQ_DOWNLOAD.LEN, Column.POS_REQ_DOWNLOAD.TYPE);
// 가맹점 정보 획득(회사승인ID,점포승인ID)
string sCmpApprID = PosMstManager.GetMstVan(ItemConst.TR_ITEM_ID.CREDITCARD_ITEM, ItemConst.TR_ITEM_ID.CREDITCARD.CREDIT_CARD, PosMst.MST_VAN.DATA.CMP_APPR_ID);
string sApprID = PosMstManager.GetMstVan(ItemConst.TR_ITEM_ID.CREDITCARD_ITEM, ItemConst.TR_ITEM_ID.CREDITCARD.CREDIT_CARD, PosMst.MST_VAN.DATA.APPR_ID);
// 다운로드 요청 전문 헤더 생성
sSendData = m_cDataCommon.MakeCreditCardHeader(PosConst.POS_VAN_MASTER.REQ_DOWNLOAD, sSendData.Length, sCmpApprID, sApprID) + sSendData;
// 다운로드 요청 전문 전송
sRet = m_cDataCommon.ExecuteCardIrt(PosConst.POS_VAN_MASTER.REQ_DOWNLOAD, sSendData, ref sRecvData, true, "");
if (sRet != UserCom.RST_OK) return sRet;
byte[] bytes = Encoding.Default.GetBytes(sRecvData);
int nNowPos = 0;
string[] aIrtDTLRsp = new string[Column.POS_RES_DOWNLOAD.LEN.Length];
ItemColumn.ParseMessage(Column.POS_RES_DOWNLOAD.LEN, Column.POS_RES_DOWNLOAD.TYPE, bytes, ref nNowPos, ref aIrtDTLRsp);
if (aIrtDTLRsp[Column.POS_RES_DOWNLOAD.SEQ.ResStatus] != "O")
{
return string.Format("|{0} - {1}{2}", sRet, aIrtDTLRsp[Column.POS_RES_DOWNLOAD.SEQ.ResMessage1], aIrtDTLRsp[Column.POS_RES_DOWNLOAD.SEQ.ResCode]);
}
return UserCom.RST_OK;
}
catch (Exception ex)
{
UserLog.WriteLogFile(UserCom.ERROR, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
}
return sRet;
}
#endregion
#region
/// <summary>
/// 룰파일 다운로드 요청
/// </summary>
/// <returns></returns>
public string RuleFileDownLoad(string[] aParam)
{
string sRet = UserCom.RST_ERR;
try
{
// 가맹점 정보 획득(회사승인ID,점포승인ID)
string sCmpApprID = PosMstManager.GetMstVan(ItemConst.TR_ITEM_ID.CREDITCARD_ITEM, ItemConst.TR_ITEM_ID.CREDITCARD.CREDIT_CARD, PosMst.MST_VAN.DATA.CMP_APPR_ID);
string sApprID = PosMstManager.GetMstVan(ItemConst.TR_ITEM_ID.CREDITCARD_ITEM, ItemConst.TR_ITEM_ID.CREDITCARD.CREDIT_CARD, PosMst.MST_VAN.DATA.APPR_ID);
if (sCmpApprID == "" || sApprID == "") return sRet;
int nMaxRuleIndex = 0; // 총갯수
string sResultRuleInfo = ""; // 결과전송용
for (int nRuleIndex = 1; nRuleIndex < 10; nRuleIndex++)
{
// 룰파일정보 = 기기번호(20) + 룰파일인덱스(1) + SPACE(120)
string sSendRuleInfo = CmUtil.RPadH(sApprID, 20) + nRuleIndex.ToString() + CmUtil.RPadH("", 120);
// 기기번호(20) + 룰파일인덱스(1) + 룰파일총갯수(1) + 룰파일명(24) + 룰파일크기(4) + 알림글내용(820)
string sRecvRuleInfo = ExecuteRuleFileIrt(PosConst.POS_VAN_MASTER.RULE_DOWNLOAD_REQ, sSendRuleInfo);
if (sRecvRuleInfo.Length < 50) break;
nMaxRuleIndex = CmUtil.IntParse(CmUtil.MidH(sRecvRuleInfo, 21, 1));
string sRuleFileName = CmUtil.MidH(sRecvRuleInfo, 22, 24);
int nRuleDataLen = CmUtil.IntParse(CmUtil.MidH(sRecvRuleInfo, 46, 4));
string sRuleData = "";
if ( nRuleDataLen > 0) sRuleData = CmUtil.MidH(sRecvRuleInfo, 50, nRuleDataLen);
if (sRuleFileName.Trim() != "" && sRuleData.Trim() != "")
{
// 룰파일 저장 처리
if (System.IO.Directory.Exists(BaseCom.NxMstPath + @"RULE\") == false) System.IO.Directory.CreateDirectory(BaseCom.NxMstPath + @"RULE\");
string sFileName = BaseCom.NxMstPath + @"RULE\" + sRuleFileName.Trim() + ".txt";
CmUtil.WriteTextFile(sFileName, sRuleData, System.Text.Encoding.UTF8);
sResultRuleInfo += sRuleFileName;
}
if (nRuleIndex >= nMaxRuleIndex) break;
}
// 룰파일 다운로드 결과 전송
if (sResultRuleInfo != "")
{
// 기기번호(20)+룰파일인덱스(1)+룰파일명1(24) +...
string sSendRuleInfo = CmUtil.RPadH(sApprID, 20) + nMaxRuleIndex.ToString() + sResultRuleInfo;
// 룰파일 다운로드 결과 전송
ExecuteRuleFileIrt(PosConst.POS_VAN_MASTER.RULE_RESULT_REQ, sSendRuleInfo);
}
return UserCom.RST_OK;
}
catch (Exception ex)
{
UserLog.WriteLogFile(UserCom.ERROR, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
}
return sRet;
}
/// <summary>
/// 룰파일 다운로드 IRT 처리
/// </summary>
/// <returns></returns>
public string ExecuteRuleFileIrt(string sMsgID, string sSendRuleInfo)
{
string sRet = UserCom.RST_ERR;
string sRecvRuleInfo = "";
try
{
string sSendData = ""; // 송신 전문
string sRecvData = ""; // 수신 전문
// 룰파일 다운로드 요청 전문 바디 생성
string[] aIrtBody = new string[Column.POS_RULEFILE_DOWNLOAD_REQ.LEN.Length];
aIrtBody[Column.POS_RULEFILE_DOWNLOAD_REQ.SEQ.RuleKind] = "H";
aIrtBody[Column.POS_RULEFILE_DOWNLOAD_REQ.SEQ.Filler] = "";
aIrtBody[Column.POS_RULEFILE_DOWNLOAD_REQ.SEQ.FS] = PosConst.VAN_HEXA.FS;
aIrtBody[Column.POS_RULEFILE_DOWNLOAD_REQ.SEQ.RuleLen] = String.Format("{0:D4}", CmUtil.LenH(sSendRuleInfo));
aIrtBody[Column.POS_RULEFILE_DOWNLOAD_REQ.SEQ.RuleInfo] = sSendRuleInfo;
aIrtBody[Column.POS_RULEFILE_DOWNLOAD_REQ.SEQ.ETX] = PosConst.VAN_HEXA.ETX;
aIrtBody[Column.POS_RULEFILE_DOWNLOAD_REQ.SEQ.CR] = PosConst.VAN_HEXA.CR;
// 룰파일 다운로드 요청 전문 생성
sSendData = ItemColumn.MakeMessage(aIrtBody, Column.POS_RULEFILE_DOWNLOAD_REQ.LEN, Column.POS_RULEFILE_DOWNLOAD_REQ.TYPE);
// 가맹점 정보 획득(회사승인ID,점포승인ID)
string sCmpApprID = PosMstManager.GetMstVan(ItemConst.TR_ITEM_ID.CREDITCARD_ITEM, ItemConst.TR_ITEM_ID.CREDITCARD.CREDIT_CARD, PosMst.MST_VAN.DATA.CMP_APPR_ID);
string sApprID = PosMstManager.GetMstVan(ItemConst.TR_ITEM_ID.CREDITCARD_ITEM, ItemConst.TR_ITEM_ID.CREDITCARD.CREDIT_CARD, PosMst.MST_VAN.DATA.APPR_ID);
// 룰파일 다운로드 요청 전문 헤더 생성
sSendData = m_cDataCommon.MakeCreditCardHeader(sMsgID, sSendData.Length, sCmpApprID, sApprID) + sSendData;
// 룰파일 다운로드 요청 전문 전송
sRet = m_cDataCommon.ExecuteCardIrt(sMsgID, sSendData, ref sRecvData, true, "");
if (sRet != UserCom.RST_OK)
{
UserLog.WriteLogFile(UserCom.ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", sRet);
return "";
}
byte[] bytes = Encoding.Default.GetBytes(sRecvData);
int nNowPos = 0;
string[] aIrtDTLRsp = new string[Column.POS_RULEFILE_DOWNLOAD_RES.LEN.Length];
ItemColumn.ParseMessage(Column.POS_RULEFILE_DOWNLOAD_RES.LEN, Column.POS_RULEFILE_DOWNLOAD_RES.TYPE, bytes, ref nNowPos, ref aIrtDTLRsp);
if (aIrtDTLRsp[Column.POS_RULEFILE_DOWNLOAD_RES.SEQ.Status] != "O" || aIrtDTLRsp[Column.POS_RULEFILE_DOWNLOAD_RES.SEQ.ResCode] != "0000")
{
string sErrMsg = string.Format("{0}-{1}:{2}", sRet, aIrtDTLRsp[Column.POS_RULEFILE_DOWNLOAD_RES.SEQ.ResMsg], aIrtDTLRsp[Column.POS_RULEFILE_DOWNLOAD_RES.SEQ.ResCode]);
UserLog.WriteLogFile(UserCom.ERROR, UserCom.INFO_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", sErrMsg);
return "";
}
// 기기번호(20) + 룰파일인덱스(1) + 룰파일총갯수(1) + 룰파일명(24) + 룰파일크기(4) + 알림글내용(820)
sRecvRuleInfo = aIrtDTLRsp[Column.POS_RULEFILE_DOWNLOAD_RES.SEQ.RuleInfo];
return sRecvRuleInfo;
}
catch (Exception ex)
{
UserLog.WriteLogFile(UserCom.ERROR, UserCom.ERROR_LEVEL, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()", ex.Message);
}
return "";
}
#endregion
}
}