624 lines
40 KiB
C#
624 lines
40 KiB
C#
using Cosmos.Common;
|
|
using Cosmos.CommonManager;
|
|
using Cosmos.ServiceProvider;
|
|
using Cosmos.UserFrame;
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
|
|
/*-----------------------------------------------------------------------------------------------*/
|
|
// 설 명 : OCB 직통신
|
|
// 작 성 자 :
|
|
// 변경 이력 :
|
|
/*-----------------------------------------------------------------------------------------------*/
|
|
namespace Cosmos.OLEDevice
|
|
{
|
|
/// <summary>
|
|
/// OCB 직통신
|
|
/// </summary>
|
|
public class OCBDirect : IOCBDirect
|
|
{
|
|
#region MPS.DLL 함수
|
|
/// <summary>
|
|
/// 가맹점등록
|
|
/// </summary>
|
|
[DllImport("MPS.dll")]
|
|
public static extern int RegisterMcht(string A, string B, string C, string D, string E, string F, string G, string H, string I, string J, byte[] K);
|
|
/// <summary>
|
|
/// 가맹점등록
|
|
/// </summary>
|
|
[DllImport("MPS.dll")]
|
|
public static extern int AuthMcht(string A, string B, string C, string D, string E, string F, string G, string H, string I, string J, byte[] K);
|
|
|
|
/// <summary>
|
|
/// 포인트조회
|
|
/// </summary>
|
|
[DllImport("MPS.dll")]
|
|
public static extern int InquiryPoint(string A, string B, string C, string D, string E, string F, string G, string H, string I, string J, string K, string L, byte[] M);
|
|
/// <summary>
|
|
/// 포인트적립
|
|
/// </summary>
|
|
[DllImport("MPS.dll")]
|
|
public static extern int SavePoint(string A, string B, string C, string D, string E, string F, string G, string H,
|
|
string I, string J, string K, string L, string M, string N, string O, string P,
|
|
string Q, string R, string S, string T, string U, string V, string W, string X,
|
|
string Y, int Z, byte[] AA, int BB, byte[] CC, byte[] DD);
|
|
/// <summary>
|
|
/// 포인트적립취소
|
|
/// </summary>
|
|
[DllImport("MPS.dll")]
|
|
public static extern int CancelSavePoint(string A, string B, string C, string D, string E, string F, string G, string H,
|
|
string I, string J, string K, string L, string M, string N, string O, string P,
|
|
string Q, string R, string S, string T, string U, string V, byte[] W);
|
|
/// <summary>
|
|
/// 포인트사용
|
|
/// </summary>
|
|
[DllImport("MPS.dll")]
|
|
public static extern int UsePoint ( string A, string B, string C, string D, string E, string F, string G, string H,
|
|
string I, string J, string K, string L, string M, string N, string O, string P,
|
|
string Q, string R, string S, string T, byte[] U );
|
|
/// <summary>
|
|
/// 포인트사용취소
|
|
/// </summary>
|
|
[DllImport("MPS.dll")]
|
|
public static extern int CancelUsePoint(string A, string B, string C, string D, string E, string F, string G, string H,
|
|
string I, string J, string K, string L, string M, string N, string O, string P,
|
|
string Q, string R, string S, byte[] T);
|
|
/// <summary>
|
|
/// 포인트할인
|
|
/// </summary>
|
|
[DllImport("MPS.dll")]
|
|
public static extern int DiscountService(string A, string B, string C, string D, string E, string F, string G, string H, string I,
|
|
string J, string K, string L, string M, string N, string O, string P, string Q, string R,
|
|
string S, string T, byte[] U);
|
|
/// <summary>
|
|
/// 포인트할인취소
|
|
/// </summary>
|
|
[DllImport("MPS.dll")]
|
|
public static extern int CancelDiscountService ( string A, string B, string C, string D, string E, string F, string G, string H, string I,
|
|
string J, string K, string L, string M, string N, string O, string P, string Q, string R,
|
|
string S, byte[] T );
|
|
/// <summary>
|
|
/// 망취소
|
|
/// </summary>
|
|
[DllImport("MPS.dll")]
|
|
public static extern int ForcedCancelUsePoint(string A, string B, string C, string D, string E, string F, string G, string H,
|
|
string I, string J, string K, string L, string M, string N, string O, string P,
|
|
string Q, string R, string S, byte[] T);
|
|
|
|
private IDataCommonUs m_cDataCommon = null;
|
|
protected SManager sManager = new SManager(); // 이 객체를 통해 업무 Service 호출
|
|
|
|
#endregion
|
|
|
|
#region 생성자
|
|
/// <summary>
|
|
/// StateServer Object (StateServer 객체)
|
|
/// </summary>
|
|
public StateServer StateObject = (StateServer)StateServer.GetInstance();
|
|
/// <summary>
|
|
/// Pos 상태 정보 객체
|
|
/// </summary>
|
|
public PosStatus m_cPosStatus = null;
|
|
/// <summary>
|
|
/// 생성자
|
|
/// </summary>
|
|
public OCBDirect()
|
|
{
|
|
try
|
|
{
|
|
m_cPosStatus = (PosStatus)StateObject.POS;
|
|
m_cDataCommon = (IDataCommonUs)sManager.InitServiceInstance(ServiceLists.ASV_DATA_PROCESS.DLL, ServiceLists.ASV_DATA_PROCESS.DATA_COMMON);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
UserLog.WriteLogFile(UserCom.LOG_IOS,
|
|
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
|
|
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명))
|
|
System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명))
|
|
ex.Message);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region OCB 직통신
|
|
/// <summary>
|
|
/// OCB 직통신
|
|
/// </summary>
|
|
/// <param name="sTradeDiv"></param>
|
|
/// <param name="sPayWayCD"></param>
|
|
/// <param name="sPayWayDtlCD"></param>
|
|
/// <param name="sTranType"></param>
|
|
/// <param name="sCardNo"></param>
|
|
/// <param name="sCardPwd"></param>
|
|
/// <param name="sPayAmt"></param>
|
|
/// <param name="sApprDt"></param>
|
|
/// <param name="sApprNo"></param>
|
|
/// <param name="sUniqueID"></param>
|
|
/// <param name="sResMsg"></param>
|
|
/// <param name="aIrtRspDTL"></param>
|
|
/// <returns></returns>
|
|
public string OCB_Direct_Point(string sTradeDiv, string sPayWayCD, string sPayWayDtlCD, string sTranType, string sCardNo, string sCardPwd, string sPayAmt, string sApprDt, string sApprNo, string sUniqueID, ref string sResMsg, ref string[] aIrtRspDTL)
|
|
{
|
|
int nRet = -1;
|
|
string sRet = UserCom.RST_ERR;
|
|
|
|
byte[] bRecvData = new byte[4096];
|
|
int nNowPos = 0;
|
|
|
|
string sResCD = "0";
|
|
string sApprTm = "";
|
|
|
|
try
|
|
{
|
|
#region 0.기초설정
|
|
// 응답메시지
|
|
sResMsg = "";
|
|
|
|
// VAN 정보 조회
|
|
//string sCMPApprID = PosMstManager.GetMstVan(ItemConst.TR_ITEM_ID.POINT_ITEM, ItemConst.TR_ITEM_ID.POINT_USE.OKCASHBACK_POINT, PosMst.MST_VAN.DATA.CMP_APPR_ID);
|
|
//string sApprID = PosMstManager.GetMstVan(ItemConst.TR_ITEM_ID.POINT_ITEM, ItemConst.TR_ITEM_ID.POINT_USE.OKCASHBACK_POINT, PosMst.MST_VAN.DATA.APPR_ID);
|
|
//string sApprPWD = PosMstManager.GetMstVan(ItemConst.TR_ITEM_ID.POINT_ITEM, ItemConst.TR_ITEM_ID.POINT_USE.OKCASHBACK_POINT, PosMst.MST_VAN.DATA.APPR_PWD);
|
|
string sCMPApprID = PosMstManager.GetMstVan(PosMstManager.GetPosOption(POS_OPTION.OPT326), PosMst.MST_VAN.DATA.CMP_APPR_ID);
|
|
string sApprID = PosMstManager.GetMstVan(PosMstManager.GetPosOption(POS_OPTION.OPT326), PosMst.MST_VAN.DATA.APPR_ID);
|
|
string sApprPWD = PosMstManager.GetMstVan(PosMstManager.GetPosOption(POS_OPTION.OPT326), PosMst.MST_VAN.DATA.APPR_PWD);
|
|
|
|
// 입력구분
|
|
string sInputType = "2";
|
|
if (sCardNo.IndexOf("=") > 0) sInputType = "0";
|
|
|
|
// 추적번호 = POS번호(2) + 일자(DD) + 시간(SSFFF)
|
|
if (sTranType != PosConst.POS_OCB_DIRECT.NET_CAN_POINT)
|
|
sUniqueID = m_cPosStatus.Base.PosNo.PadLeft(2, '0') + DateTime.Now.ToString("dd") + string.Format("{0:00000}", DateTime.Now.ToString("ssfff")) + "0";
|
|
#endregion
|
|
|
|
// 요청 - 승인로그 저장 (판매구분, [0]결제수단, [1]결제상세코드, [2]전문구분, [3]요청구분, [4]카드번호, [5]결제금액, [6]승인번호, [7]승인일자, [8]승인시간, [9]응답상태값, [10]응답메시지, [11]전문)
|
|
string sSendData = sTranType + CmUtil.MidH(sCMPApprID, 0, 4) + DateTime.Now.ToString("yyyyMMdd") + DateTime.Now.ToString("HHmmss") + CmUtil.MidH(sUniqueID, 0, 10) + "A" + "A1" + CmUtil.MidH(sApprID, 0, 15) + CmUtil.MidH(m_cPosStatus.Mst.StorBizPsnNo, 0, 10) + CmUtil.MidH(sApprPWD, 0, 16) + CmUtil.MidH(sCardNo, 0, 16) + CmUtil.MidH(sCardPwd, 0, 16) + CmUtil.MidH(sPayAmt, 0, 16) + CmUtil.MidH(sApprDt, 0, 8) + CmUtil.MidH(sApprNo, 0, 16) + CmUtil.MidH(sUniqueID, 0, 10);
|
|
|
|
// 승인데이터 중 카드번호 마스킹 처리(2017.05.25)
|
|
string sWriteSendData = CmUtil.MakeLogDataToMask(false, sCardNo, sSendData);
|
|
UserLog.WriteLogFile(UserCom.LOG_SOCK, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
|
|
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
|
|
"[SEND:" + sWriteSendData);
|
|
m_cDataCommon.SetSaleApprLog(sTradeDiv, new string[] { sPayWayCD, sPayWayDtlCD, sTranType, "S", sCardNo, sPayAmt, "", "", "", "", "", sWriteSendData });
|
|
|
|
#region 1.요청전문
|
|
// 1.요청전문
|
|
switch (sTranType)
|
|
{
|
|
case PosConst.POS_OCB_DIRECT.STOR_REGISTER:
|
|
{
|
|
#region 가맹점 등록
|
|
/*
|
|
A CHAR 4 전문번호 2A10
|
|
B CHAR 4 기관코드 해당기관코드
|
|
C CHAR 8 전송일자 예:20030924(YYYYMMDD)
|
|
D CHAR 6 전송시간 예:130201(HHMMSS)
|
|
E CHAR 10 추적번호 Sequence number(일별 Unique)
|
|
F CHAR 1 멤버쉽프로그램ID 'A' : OKCashbag
|
|
G CHAR 2 서비스구분 'A1' : OK캐쉬백서비스, 'A2' : T포인트서비스 , 'A3' : 로디아서비스
|
|
H CHAR 15 가맹점번호 가맹점번호(8)+SPACE 7자리 입력
|
|
I CHAR 10 가맹점사업자번호 예:1111111111
|
|
J CHAR 16 가맹점 비밀번호 예:1111
|
|
*/
|
|
nRet = RegisterMcht(sTranType, CmUtil.MidH(sCMPApprID, 0, 4), DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss"), CmUtil.MidH(sUniqueID, 0, 10), "A", "A1"
|
|
, CmUtil.MidH(sApprID, 0, 15), CmUtil.MidH(m_cPosStatus.Mst.StorBizPsnNo, 0, 10), CmUtil.MidH(sApprPWD, 0, 16), bRecvData);
|
|
break;
|
|
#endregion
|
|
}
|
|
case PosConst.POS_OCB_DIRECT.STOR_AUTH:
|
|
{
|
|
#region 가맹점 인증
|
|
/*
|
|
A CHAR 4 전문번호 2A20
|
|
B CHAR 4 기관코드 해당기관코드
|
|
C CHAR 8 전송일자 예:20030924(YYYYMMDD)
|
|
D CHAR 6 전송시간 예:130201(HHMMSS)
|
|
E CHAR 10 추적번호 Sequence number(일별 Unique)
|
|
F CHAR 1 멤버쉽프로그램ID 'A' : OKCashbag
|
|
G CHAR 2 서비스구분 'A1' : OK캐쉬백서비스, 'A2' : T포인트서비스 , 'A3' : 로디아서비스
|
|
H CHAR 15 가맹점번호 가맹점번호(8)+SPACE 7자리 입력
|
|
I CHAR 10 가맹점사업자번호 예:1111111111
|
|
J CHAR 16 가맹점 비밀번호 예:1111
|
|
*/
|
|
nRet = AuthMcht(sTranType, CmUtil.MidH(sCMPApprID, 0, 4), DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss"), CmUtil.MidH(sUniqueID, 0, 10), "A", "A1"
|
|
, CmUtil.MidH(sApprID, 0, 15), CmUtil.MidH(m_cPosStatus.Mst.StorBizPsnNo, 0, 10), CmUtil.MidH(sApprPWD, 0, 16), bRecvData);
|
|
break;
|
|
#endregion
|
|
}
|
|
case PosConst.POS_OCB_DIRECT.INQ_POINT:
|
|
{
|
|
#region 포인트 조회
|
|
/*
|
|
A CHAR 4 전문번호 2M30
|
|
B CHAR 4 기관코드 해당기관코드
|
|
C CHAR 8 전송일자 예:20030924(YYYYMMDD)
|
|
D CHAR 6 전송시간 예:130201(HHMMSS)
|
|
E CHAR 10 추적번호 Sequence number(일별 Unique)
|
|
F CHAR 1 멤버쉽프로그램ID 'A' : OKCashbag
|
|
G CHAR 2 서비스구분 'A1' : OK캐쉬백서비스, 'A2' : T포인트서비스 , 'A3' : 로디아서비스
|
|
H CHAR 15 가맹점번호 가맹점번호(8)+SPACE 7자리 입력
|
|
I CHAR 10 가맹점사업자번호 예:1111111111
|
|
J CHAR 19 카드번호 예:1234123412341234 ('-'제외)
|
|
K CHAR 19 주민번호 예:1234123412341234 ('-'제외)
|
|
L CHAR 2 요청구분 카드번호 : 'R1' , 주민번호 :'R2'
|
|
*/
|
|
nRet = InquiryPoint(sTranType, CmUtil.MidH(sCMPApprID, 0, 4), DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss"), CmUtil.MidH(sUniqueID, 0, 10), "A", "A1"
|
|
, CmUtil.MidH(sApprID, 0, 15), CmUtil.MidH(m_cPosStatus.Mst.StorBizPsnNo, 0, 10), CmUtil.MidH(sCardNo, 0, 19), CmUtil.MidH("", 0, 19), "R1", bRecvData);
|
|
break;
|
|
#endregion
|
|
}
|
|
case PosConst.POS_OCB_DIRECT.SAVE_POINT:
|
|
{
|
|
#region 포인트 적립
|
|
/*
|
|
A CHAR 4 전문번호 2100
|
|
B CHAR 4 기관코드 해당기관코드
|
|
C CHAR 8 전송일자 예:20030924(YYYYMMDD)
|
|
D CHAR 6 전송시간 예:130201(HHMMSS)
|
|
E CHAR 10 추적번호 Sequence number(일별 Unique)
|
|
F CHAR 1 멤버쉽프로그램ID 'A' : OKCashbag
|
|
G CHAR 2 서비스구분 'A1' : OK캐쉬백서비스, 'A2' : T포인트서비스 , 'A3' : 로디아서비스
|
|
H CHAR 15 가맹점번호 가맹점번호(8)+SPACE 7자리 입력
|
|
I CHAR 10 가맹점사업자번호 예:1111111111
|
|
J CHAR 8 거래일자 예:20030924(YYYYMMDD)
|
|
K CHAR 6 거래시간 예:130201(HHMMSS)
|
|
L CHAR 1 KEY-IN 여부 '0':Swapping, '2':Key-in, 'F': mart 수집상품 only
|
|
M CHAR 19 카드번호 예:1234123412341234 ('-'제외)
|
|
N CHAR 19 주민번호 예:1234123412341234 ('-'제외)
|
|
O CHAR 2 전표코드 '01' : 적립
|
|
P CHAR 2 거래구분코드 '11' : 금액현재, '12' : 금액가용, '21' : 포인트현재, '22' : 포인트가용
|
|
Q CHAR 2 계약구분코드 현금:01, 카드:02
|
|
R CHAR 10 거래금액 예:10000
|
|
S CHAR 9 현금거래금액 예:12000 (공급가액(T) + 부가가치세(U) + 봉사료(V)의 합계)
|
|
T CHAR 9 공급가액 예:10000(현금결제시 현금영수증발급을 위해 입력)
|
|
U CHAR 9 부가가치세 예:1000(현금결제시 현금영수증발급을 위해 입력)
|
|
V CHAR 9 봉사료 예:1000(현금결제시 현금영수증발급을 위해 입력)
|
|
W CHAR 1 거래자구분 소비자소득공제용(0:기본값), 사업자지출증빙용(1)
|
|
X CHAR 1 현금영수증처리구분 적립+현금(0), 적립Only(1)
|
|
Y CHAR 30 영수증번호 예:123456789(공백은 Space처리)
|
|
Z INT 4 쿠폰상품개수 예:2 (50개를 초과하지 않음) (상품 없을 경우 0(Zero))
|
|
AA STRUCT 가변 상품바코드(18) 예:8823456789123 (적립코드)(상품 없을 경우 입력안함)
|
|
(모두 CHAR형) 상품수량(5) 예:2 (공백은 Space로처리)(상품 없을 경우 입력안함)
|
|
적립용 상품 제휴사코드(6) 예:123456 (상품 없을 경우 입력안함)
|
|
포인트구분(1)
|
|
BB INT 4 마트상품개수 예:2 (50개를 초과하지 않음) (상품 없을 경우 0(Zero))
|
|
CC STRUCT 가변 상품바코드(18) 예:8823456789123 (적립코드)(상품 없을 경우 입력안함)
|
|
(모두 CHAR형) 상품수량(6) 예:2 (공백은 Space로처리) (상품 없을 경우 입력안함)
|
|
수집용 상품 제휴사코드(6) 예:123456 (상품 없을 경우 입력안함)
|
|
상품판매단가(9) 예:10000 (공백은 Space로처리)(상품 없을 경우 입력안함)
|
|
상품분류코드(6) 예:F10000 (상품 없을 경우 입력안함)
|
|
인자를 넘길때 (CHAR *)으로 Type Casting해서 넘긴다.
|
|
*/
|
|
nRet = SavePoint(sTranType, CmUtil.MidH(sCMPApprID, 0, 4), DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss"), CmUtil.MidH(sUniqueID, 0, 10), "A", "A1", CmUtil.MidH(sApprID, 0, 15), CmUtil.MidH(m_cPosStatus.Mst.StorBizPsnNo, 0, 10)
|
|
, DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss")
|
|
, CmUtil.MidH(sInputType, 0, 1), CmUtil.MidH(sCardNo, 0, 19), CmUtil.MidH("", 0, 19), "01", "11", "01"
|
|
, CmUtil.MidH(sPayAmt, 0, 10), CmUtil.MidH("", 0, 9), CmUtil.MidH("", 0, 9), CmUtil.MidH("", 0, 9), CmUtil.MidH("", 0, 9)
|
|
, CmUtil.MidH("0", 0, 1), "1", CmUtil.MidH("", 0, 30), 0, null, 0, null, bRecvData);
|
|
|
|
break;
|
|
#endregion
|
|
}
|
|
case PosConst.POS_OCB_DIRECT.SAVE_CAN_POINT:
|
|
{
|
|
#region 포인트 적립 취소
|
|
/*
|
|
A CHAR 4 전문번호 2110
|
|
B CHAR 4 기관코드 해당기관코드
|
|
C CHAR 8 전송일자 예:20030924(YYYYMMDD)
|
|
D CHAR 6 전송시간 예:130201(HHMMSS)
|
|
E CHAR 10 추적번호 Sequence number(일별 Unique)
|
|
F CHAR 1 멤버쉽프로그램ID 'A' : OKCashbag
|
|
G CHAR 2 서비스구분 'A1' : OK캐쉬백서비스, 'A2' : T포인트서비스 , 'A3' : 로디아서비스
|
|
H CHAR 15 가맹점번호 가맹점번호(8)+SPACE 7자리 입력
|
|
I CHAR 10 가맹점사업자번호 예:1111111111
|
|
J CHAR 8 거래일자 예:20030924(YYYYMMDD)
|
|
K CHAR 6 거래시간 예:130201(HHMMSS)
|
|
L CHAR 1 KEY-IN 여부 0':Swapping, '2':Key-in
|
|
M CHAR 19 카드번호 예:1234123412341234 ('-'제외)
|
|
N CHAR 19 주민번호 예:1234123412341234 ('-'제외)
|
|
O CHAR 8 원거래일자 예:20030924(YYYYMMDD)
|
|
P CHAR 9 원거래승인번호 예:123456789(공백은 Space로처리)
|
|
Q CHAR 2 전표코드 '21' : 적립취소
|
|
R CHAR 2 거래구분코드 '41' : 적립취소
|
|
S CHAR 10 원거래금액 예:10000(공백은 Space로처리)
|
|
T CHAR 1 취소요청구분 적립+현금(0), 적립Only(1)
|
|
U CHAR 30 원거래 영수증번호 예:123456789(공백은 Space처리)
|
|
V CHAR 1 현금영수증 취소사유 코드 '1' : 반품/거래취소, '2' : 거래오류로인한 취소, '3' : 기타(사유분류 불분명)
|
|
*/
|
|
nRet = CancelSavePoint(sTranType, CmUtil.MidH(sCMPApprID, 0, 4), DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss"), CmUtil.MidH(sUniqueID, 0, 10), "A", "A1", CmUtil.MidH(sApprID, 0, 15), CmUtil.MidH(m_cPosStatus.Mst.StorBizPsnNo, 0, 10)
|
|
, DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss")
|
|
, CmUtil.MidH(sInputType, 0, 1), CmUtil.MidH(sCardNo, 0, 19), CmUtil.MidH("", 0, 19), CmUtil.MidH(sApprDt, 0, 8), CmUtil.MidH(sApprNo, 0, 9), "21", "41"
|
|
, CmUtil.MidH(sPayAmt, 0, 10), "1", CmUtil.MidH("", 0, 30), "1", bRecvData);
|
|
break;
|
|
#endregion
|
|
}
|
|
case PosConst.POS_OCB_DIRECT.USE_POINT:
|
|
{
|
|
#region 포인트 사용
|
|
/*
|
|
A CHAR 4 전문번호 2400
|
|
B CHAR 4 기관코드 해당기관코드
|
|
C CHAR 8 전송일자 예:20030924(YYYYMMDD)
|
|
D CHAR 6 전송시간 예:130201(HHMMSS)
|
|
E CHAR 10 추적번호 Sequence number(일별 Unique)
|
|
F CHAR 1 멤버쉽프로그램ID 'A' : OKCashbag
|
|
G CHAR 2 서비스구분 'A1' : OK캐쉬백서비스, 'A2' : T포인트서비스 , 'A3' : 로디아서비스
|
|
H CHAR 15 가맹점번호 가맹점번호(8)+SPACE 7자리 입력
|
|
I CHAR 10 가맹점사업자번호 예:1111111111
|
|
J CHAR 8 거래일자 예:20030924(YYYYMMDD)
|
|
K CHAR 6 거래시간 예:130201(HHMMSS)
|
|
L CHAR 1 KEY-IN 여부 0':Swapping, '2':Key-in
|
|
M CHAR 19 카드번호 예:1234123412341234 ('-'제외)
|
|
N CHAR 19 주민번호 예:1234123412341234 ('-'제외)
|
|
O CHAR 16 카드 비밀번호 예:1111
|
|
P CHAR 2 전표코드 '11' : 사용
|
|
Q CHAR 2 거래구분코드 '40' : 사용
|
|
R CHAR 2 계약구분코드 '08' : 포인트 사용
|
|
S CHAR 10 사용포인트 예:10000
|
|
T CHAR 10 총거래금액 예:10000
|
|
*/
|
|
nRet = UsePoint(sTranType, CmUtil.MidH(sCMPApprID, 0, 4), DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss"), CmUtil.MidH(sUniqueID, 0, 10), "A", "A1", CmUtil.MidH(sApprID, 0, 15), CmUtil.MidH(m_cPosStatus.Mst.StorBizPsnNo, 0, 10)
|
|
, DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss")
|
|
, CmUtil.MidH(sInputType, 0, 1), CmUtil.MidH(sCardNo, 0, 19), CmUtil.MidH("", 0, 19), CmUtil.MidH(sCardPwd, 0, 16), "11", "40", "08"
|
|
, CmUtil.MidH(sPayAmt, 0, 10), CmUtil.MidH("", 0, 10), bRecvData);
|
|
break;
|
|
#endregion
|
|
}
|
|
case PosConst.POS_OCB_DIRECT.USE_CAN_POINT:
|
|
{
|
|
#region 포인트 사용 취소
|
|
/*
|
|
A CHAR 4 전문번호 2410
|
|
B CHAR 4 기관코드 해당기관코드
|
|
C CHAR 8 전송일자 예:20030924(YYYYMMDD)
|
|
D CHAR 6 전송시간 예:130201(HHMMSS)
|
|
E CHAR 10 추적번호 Sequence number(일별 Unique)
|
|
F CHAR 1 멤버쉽프로그램ID 'A' : OKCashbag
|
|
G CHAR 2 서비스구분 'A1' : OK캐쉬백서비스, 'A2' : T포인트서비스 , 'A3' : 로디아서비스
|
|
H CHAR 15 가맹점번호 가맹점번호(8)+SPACE 7자리 입력
|
|
I CHAR 10 가맹점사업자번호 예:1111111111
|
|
J CHAR 8 거래일자 예:20030924(YYYYMMDD)
|
|
K CHAR 6 거래시간 예:130201(HHMMSS)
|
|
L CHAR 1 KEY-IN 여부 0':Swapping, '2':Key-in
|
|
M CHAR 19 카드번호 예:1234123412341234 ('-'제외)
|
|
N CHAR 19 주민번호 예:1234123412341234 ('-'제외)
|
|
O CHAR 8 원거래일자 예:20030924(YYYYMMDD)
|
|
P CHAR 9 원거래승인번호 예:123456789(공백은 Space로처리)
|
|
Q CHAR 2 전표코드 '22' : 사용취소
|
|
R CHAR 2 거래구분코드 '42' : 사용취소
|
|
S CHAR 10 원거래금액 예:10000(공백은 Space로처리)
|
|
*/
|
|
nRet = CancelUsePoint(sTranType, CmUtil.MidH(sCMPApprID, 0, 4), DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss"), CmUtil.MidH(sUniqueID, 0, 10), "A", "A1", CmUtil.MidH(sApprID, 0, 15), CmUtil.MidH(m_cPosStatus.Mst.StorBizPsnNo, 0, 10)
|
|
, DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss")
|
|
, CmUtil.MidH(sInputType, 0, 1), CmUtil.MidH(sCardNo, 0, 19), CmUtil.MidH("", 0, 19), CmUtil.MidH(sApprDt, 0, 8), CmUtil.MidH(sApprNo, 0, 9), "22", "42"
|
|
, CmUtil.MidH(sPayAmt, 0, 10), bRecvData);
|
|
break;
|
|
#endregion
|
|
}
|
|
case PosConst.POS_OCB_DIRECT.NET_CAN_POINT:
|
|
{
|
|
#region 망취소
|
|
/*
|
|
A CHAR 4 전문번호 2410
|
|
B CHAR 4 기관코드 해당기관코드
|
|
C CHAR 8 전송일자 예:20030924(YYYYMMDD)
|
|
D CHAR 6 전송시간 예:130201(HHMMSS)
|
|
E CHAR 10 추적번호 포인트 사용 호출시 사용한 추적번호
|
|
F CHAR 1 멤버쉽프로그램ID 'A' : OKCashbag
|
|
G CHAR 2 서비스구분 'A1' : OK캐쉬백서비스, 'A2' : T포인트서비스 , 'A3' : 로디아서비스
|
|
H CHAR 15 가맹점번호 가맹점번호(8)+SPACE 7자리 입력
|
|
I CHAR 10 가맹점사업자번호 예:1111111111
|
|
J CHAR 8 거래일자 예:20030924(YYYYMMDD)
|
|
K CHAR 6 거래시간 예:130201(HHMMSS)
|
|
L CHAR 1 KEY-IN 여부 0':Swapping, '2':Key-in
|
|
M CHAR 19 카드번호 예:1234123412341234 ('-'제외)
|
|
N CHAR 19 주민번호 예:1234123412341234 ('-'제외)
|
|
O CHAR 8 원거래일자 예:20030924(YYYYMMDD)
|
|
P CHAR 9 원거래승인번호 예:123456789(공백은 Space로처리)
|
|
Q CHAR 2 전표코드 '21' : 적립취소 '22' : 사용취소
|
|
R CHAR 2 거래구분코드 '41' : 적립취소 '42' : 사용취소
|
|
S CHAR 10 원거래금액 예:10000(공백은 Space로처리)
|
|
*/
|
|
nRet = ForcedCancelUsePoint(PosConst.POS_OCB_DIRECT.NET_CAN_POINT, CmUtil.MidH(sCMPApprID, 0, 4), DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss"), CmUtil.MidH(sUniqueID, 0, 10), "A", "A1", CmUtil.MidH(sApprID, 0, 15), CmUtil.MidH(m_cPosStatus.Mst.StorBizPsnNo, 0, 10)
|
|
, DateTime.Now.ToString("yyyyMMdd"), DateTime.Now.ToString("HHmmss")
|
|
, CmUtil.MidH(sInputType, 0, 1), CmUtil.MidH(sCardNo, 0, 19), CmUtil.MidH("", 0, 19), CmUtil.MidH(sApprDt, 0, 8), CmUtil.MidH(sApprNo, 0, 9), (sTranType == PosConst.POS_OCB_DIRECT.SAVE_CAN_POINT ? "21" : "22"), (sTranType == PosConst.POS_OCB_DIRECT.SAVE_CAN_POINT ? "41" : "42")
|
|
, CmUtil.MidH(sPayAmt, 0, 10), bRecvData);
|
|
break;
|
|
#endregion
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
|
|
|
|
#region 2.처리결과
|
|
// 2.처리결과
|
|
if (nRet != 1)
|
|
{
|
|
sResMsg = ErrCodeToMsg(nRet); // 오류
|
|
sResCD = "1";
|
|
}
|
|
#endregion
|
|
|
|
#region 3.응답전문(정상)
|
|
else
|
|
{
|
|
// 정상응답
|
|
switch (sTranType)
|
|
{
|
|
case PosConst.POS_OCB_DIRECT.STOR_REGISTER: // 가맹점 등록
|
|
case PosConst.POS_OCB_DIRECT.STOR_AUTH: // 가맹점 인증
|
|
{
|
|
nNowPos = 0;
|
|
aIrtRspDTL = new string[Column.POS_REQ_OCB_AUTHMCHT.LEN.Length];
|
|
ItemColumn.ParseMessage(Column.POS_REQ_OCB_AUTHMCHT.LEN, Column.POS_REQ_OCB_AUTHMCHT.TYPE, bRecvData, ref nNowPos, ref aIrtRspDTL);
|
|
if (aIrtRspDTL[Column.POS_REQ_OCB_AUTHMCHT.SEQ.RES_CD].Trim() != "1")
|
|
{
|
|
// 응답오류
|
|
sResMsg = aIrtRspDTL[Column.POS_REQ_OCB_AUTHMCHT.SEQ.RES_MSG].Trim();
|
|
sResCD = "1";
|
|
}
|
|
else
|
|
{
|
|
// 정상
|
|
sResMsg = "OK";
|
|
sResCD = "0";
|
|
sRet = UserCom.RST_OK;
|
|
}
|
|
break;
|
|
}
|
|
case PosConst.POS_OCB_DIRECT.INQ_POINT: // 포인트 조회
|
|
{
|
|
nNowPos = 0;
|
|
aIrtRspDTL = new string[Column.POS_REQ_OCB_INQPOINT.LEN.Length];
|
|
ItemColumn.ParseMessage(Column.POS_REQ_OCB_INQPOINT.LEN, Column.POS_REQ_OCB_INQPOINT.TYPE, bRecvData, ref nNowPos, ref aIrtRspDTL);
|
|
if (aIrtRspDTL[Column.POS_REQ_OCB_INQPOINT.SEQ.RES_CD].Trim() != "1")
|
|
{
|
|
// 응답오류
|
|
sResMsg = aIrtRspDTL[Column.POS_REQ_OCB_INQPOINT.SEQ.RES_MSG1].Trim();
|
|
sResCD = "1";
|
|
}
|
|
else
|
|
{
|
|
// 정상
|
|
sResMsg = "OK";
|
|
sResCD = "0";
|
|
sRet = UserCom.RST_OK;
|
|
}
|
|
break;
|
|
}
|
|
case PosConst.POS_OCB_DIRECT.SAVE_POINT: // 포인트 적립
|
|
case PosConst.POS_OCB_DIRECT.USE_POINT: // 포인트 사용
|
|
{
|
|
nNowPos = 0;
|
|
aIrtRspDTL = new string[Column.POS_REQ_OCB_POINT.LEN.Length];
|
|
ItemColumn.ParseMessage(Column.POS_REQ_OCB_POINT.LEN, Column.POS_REQ_OCB_POINT.TYPE, bRecvData, ref nNowPos, ref aIrtRspDTL);
|
|
if (aIrtRspDTL[Column.POS_REQ_OCB_POINT.SEQ.RES_CD].Trim() != "1")
|
|
{
|
|
// 응답오류
|
|
sResMsg = aIrtRspDTL[Column.POS_REQ_OCB_POINT.SEQ.RES_MSG1].Trim();
|
|
sResCD = "1";
|
|
}
|
|
else
|
|
{
|
|
// 정상
|
|
sResMsg = "OK";
|
|
sResCD = "0";
|
|
sApprDt = aIrtRspDTL[Column.POS_REQ_OCB_POINT.SEQ.APPR_DATE].Trim();
|
|
sApprTm = aIrtRspDTL[Column.POS_REQ_OCB_POINT.SEQ.APPR_TIME].Trim();
|
|
sApprNo = aIrtRspDTL[Column.POS_REQ_OCB_POINT.SEQ.APPR_NO].Trim();
|
|
|
|
sRet = UserCom.RST_OK;
|
|
}
|
|
break;
|
|
}
|
|
case PosConst.POS_OCB_DIRECT.SAVE_CAN_POINT: // 포인트 적립 취소
|
|
case PosConst.POS_OCB_DIRECT.USE_CAN_POINT: // 포인트 사용 취소
|
|
case PosConst.POS_OCB_DIRECT.NET_CAN_POINT: // 포인트 망 취소
|
|
{
|
|
nNowPos = 0;
|
|
aIrtRspDTL = new string[Column.POS_REQ_OCB_CANPOINT.LEN.Length];
|
|
ItemColumn.ParseMessage(Column.POS_REQ_OCB_CANPOINT.LEN, Column.POS_REQ_OCB_CANPOINT.TYPE, bRecvData, ref nNowPos, ref aIrtRspDTL);
|
|
if (aIrtRspDTL[Column.POS_REQ_OCB_CANPOINT.SEQ.RES_CD].Trim() != "1")
|
|
{
|
|
// 응답오류
|
|
sResMsg = aIrtRspDTL[Column.POS_REQ_OCB_CANPOINT.SEQ.RES_MSG1].Trim();
|
|
sResCD = "1";
|
|
}
|
|
else
|
|
{
|
|
// 정상
|
|
sResMsg = "OK";
|
|
sResCD = "0";
|
|
sApprDt = aIrtRspDTL[Column.POS_REQ_OCB_CANPOINT.SEQ.APPR_DATE].Trim();
|
|
sApprTm = aIrtRspDTL[Column.POS_REQ_OCB_CANPOINT.SEQ.APPR_TIME].Trim();
|
|
sApprNo = aIrtRspDTL[Column.POS_REQ_OCB_CANPOINT.SEQ.APPR_NO].Trim();
|
|
sRet = UserCom.RST_OK;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 응답 - 승인로그 저장 (판매구분, [0]결제수단, [1]결제상세코드, [2]전문구분, [3]요청구분, [4]카드번호, [5]결제금액, [6]승인번호, [7]승인일자, [8]승인시간, [9]응답상태값, [10]응답메시지, [11]전문)
|
|
string sRecvData = ByteToString(bRecvData);
|
|
|
|
// 승인데이터 중 카드번호 마스킹 처리(2017.05.25)
|
|
string sWriteRecvData = CmUtil.MakeLogDataToMask(false, sCardNo, sRecvData.Trim());
|
|
UserLog.WriteLogFile(UserCom.LOG_SOCK, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
|
|
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + System.Reflection.MethodBase.GetCurrentMethod().Name + "()",
|
|
"[RECV:" + sWriteRecvData);
|
|
m_cDataCommon.SetSaleApprLog(sTradeDiv, new string[] { sPayWayCD, sPayWayDtlCD, sTranType, "R"
|
|
, sCardNo, sPayAmt
|
|
, sApprNo, (sApprDt == "" ? DateTime.Now.ToString("yyyyMMdd") : sApprDt), (sApprTm == "" ? DateTime.Now.ToString("HHmmss") : sApprTm)
|
|
, sResCD
|
|
, sResMsg
|
|
, sWriteRecvData });
|
|
|
|
#endregion
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
UserLog.WriteLogFile(UserCom.LOG_IOS,
|
|
System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
|
|
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name + "." + // Class Name (Class Name (클래스명))
|
|
System.Reflection.MethodBase.GetCurrentMethod().Name + "()", // Function Name (Function Name (함수명))
|
|
ex.Message);
|
|
sResMsg = ex.Message;
|
|
}
|
|
return sRet;
|
|
}
|
|
#endregion
|
|
|
|
#region 응답코드
|
|
/// <summary>
|
|
/// 응답코드
|
|
/// </summary>
|
|
/// <param name="nErrCode"></param>
|
|
/// <returns></returns>
|
|
private string ErrCodeToMsg(int nErrCode)
|
|
{
|
|
string sMsg = string.Empty;
|
|
|
|
try
|
|
{
|
|
switch (nErrCode)
|
|
{
|
|
case -1 : sMsg = "실패 - 함수Parameter값 이상"; break;
|
|
case 2 : sMsg = "암호화 실패 - 암호화, 복호화오류"; break;
|
|
case 3 : sMsg = "소켓 초기화 실패 - 네트워크 단절에 의한 소켓 초기화 실패"; break;
|
|
case 4 : sMsg = "소켓 Send 실패"; break;
|
|
case 5 : sMsg = "소켓 Receive 실패"; break;
|
|
case 6 : sMsg = "소켓 타임아웃"; break;
|
|
case 7 : sMsg = "인터넷 연결 실패"; break;
|
|
default: sMsg = "알 수 없는 에러"; break;
|
|
}
|
|
}
|
|
catch { }
|
|
return sMsg;
|
|
}
|
|
#endregion
|
|
|
|
#region Byte 문자열 처리
|
|
/// <summary>
|
|
/// Byte배열을 string으로 변환 (Byte배열의 null(0x00)값 제거)
|
|
/// </summary>
|
|
/// <param name="data"></param>
|
|
/// <returns></returns>
|
|
private string ByteToString(byte[] data)
|
|
{
|
|
int inx = Array.FindIndex(data, 0, (x) => x == 0x0);
|
|
if (inx >= 0)
|
|
{
|
|
return Encoding.Default.GetString(data, 0, inx);
|
|
}
|
|
else
|
|
{
|
|
return Encoding.Default.GetString(data);
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
}
|