/* * msg_layout.h - 카드 매입 전문(電文) 고정길이 레이아웃 * * 대외/대내 전문은 고정길이 위치기반(positional) 구조다. 각 필드는 * 널 종료가 없는 고정폭 char 배열이며, 숫자 필드는 좌측 zero-padding * (예: 거래금액 000000012500). util_msg.c 가 pack/unpack 을 담당한다. */ #ifndef MSG_LAYOUT_H #define MSG_LAYOUT_H /* 전문구분 코드 */ #define MSG_TYPE_RECV "0200" /* 매입요청(수신) */ #define MSG_TYPE_RESP "0210" /* 매입응답 */ #define MSG_TYPE_RECON "0500" /* 정산/대사 */ /* 응답코드 */ #define RESP_OK "0000" /* 정상 */ #define RESP_INVALID "9001" /* 항목오류 */ #define RESP_NOMERCH "9002" /* 가맹점 없음 */ #define RESP_SYSERR "9999" /* 시스템 오류 */ /* * 매입 요청 전문 헤더 + 바디 (총 MSG_ACQ_LEN 바이트) * 필드 순서/폭이 곧 와이어 포맷이므로 재배치 금지. */ typedef struct { char msg_type[4]; /* 전문구분 4 */ char trans_code[6]; /* 거래코드 6 */ char merch_id[15]; /* 가맹점번호 15 */ char card_no[16]; /* 카드번호(마스킹) 16 */ char approval_no[9]; /* 승인번호 9 */ char amount[12]; /* 거래금액 12 (zero-pad, 원) */ char txn_date[8]; /* 거래일자 8 (YYYYMMDD) */ char txn_time[6]; /* 거래시각 6 (HHMMSS) */ char inst_month[2]; /* 할부개월 2 (00=일시불) */ char resp_code[4]; /* 응답코드 4 */ char filler[18]; /* 예비 18 */ } acq_msg_t; /* 합계 100 바이트 */ #define MSG_ACQ_LEN ((int)sizeof(acq_msg_t)) /* = 100 */ /* 필드 폭 상수 (unpack 검증용) */ #define FLD_MSG_TYPE_LEN 4 #define FLD_TRANS_CODE_LEN 6 #define FLD_MERCH_ID_LEN 15 #define FLD_CARD_NO_LEN 16 #define FLD_APPROVAL_LEN 9 #define FLD_AMOUNT_LEN 12 #define FLD_TXN_DATE_LEN 8 #define FLD_TXN_TIME_LEN 6 #define FLD_INST_LEN 2 #define FLD_RESP_LEN 4 #endif /* MSG_LAYOUT_H */