📄 handle.cpre
字号:
/* * This is a part of the Application Preconsole * - Channel Access - DSI. * Copyright (C) 2000-2000 ABC.SDC. * All rights reserved. * * This source code is only intended as a supplement to the * Application Preconsole Reference and related * electronic documentation provided with the library. * See these sources for detailed information regarding the * Application Preconsole product. * * Update record: * 2001-08-12 Cheng WeiHong - create implementation file for * handling * 2001-09-30 R.Cao - simplify logic */#include "ap.h"#include "apca.h"EXEC SQL INCLUDE sqlca;EXEC SQL INCLUDE "dsi.h";EXEC SQL INCLUDE "dsiext.h";/* * Types and structures defined in this file */typedef struct tagTRANSSTRU{ PCSTR pszMsgId; PCSTR pszTransType; PCSTR pszConditionCode; PCSTR pszTransCode; PCSTR pszOrgTransCode;} TRANSSTRU;typedef TRANSSTRU * PTRANSSTRU;typedef const TRANSSTRU CTRANSSTRU;typedef const TRANSSTRU * PCTRANSSTRU;/* * Variables declared in this file */extern UINT nReqSeqNo;PCSTR pszRespCode[][2] = { {AP_RESPCODE_ACCEPT , "00"}, /* 承兑或交易成功 */ {AP_RESPCODE_REJECT , "93"}, /* 交易违法、不能完成 */ {AP_RESPCODE_LOGERR , "96"}, /* 系统异常、失效 */ {AP_RESPCODE_SYSERR , "96"}, /* 系统异常、失效 */ {AP_RESPCODE_MSG_DUPSEQNO , "94"}, /* 重复交易 */ {AP_RESPCODE_SYS_INTERMIT , "91"}, /* 发卡方或交换中心不能操作 */ {AP_RESPCODE_SERVICE_INTERMIT , "91"}, /* 发卡方或交换中心不能操作 */ {AP_RESPCODE_SERVICE_NOTSUPPORT , "40"}, /* 请求的功能尚不支持 */ {AP_RESPCODE_ACC_NOTEXIST , "14"}, /* 无效卡号 */ {AP_RESPCODE_ACC_LOST , "41"}, /* 挂失卡(没收卡)*/ {AP_RESPCODE_ACC_BALLACK , "51"}, /* 无足够的存款 */ {AP_RESPCODE_ACCPWD_ERR , "55"}, /* 不正确的PIN */ {AP_RESPCODE_AMT_OUTLMT , "61"}, /* 超出取款金额限制 */ {AP_RESPCODE_ORGTRANS_NOTEXIST , "25"}, /* 未能找到文件上记录 */ {AP_RESPCODE_ORGTRANS_CANCELED , "25"}, /* 未能找到文件上记录 */ {AP_RESPCODE_CARDNO_INVALID , "14"}, /* 无效卡号 */ {AP_RESPCODE_CARD_NOTACCEPT , "15"}, /* 无此发卡方 */ {AP_RESPCODE_CARD_CONFISCATE , "04"}, /* 没收卡 */ {AP_RESPCODE_CARD_EXPIRED , "54"}, /* 过期卡 */ {AP_RESPCODE_CARD_REFISSUE , "01"}, /* 查发卡方 */ {AP_RESPCODE_WITHDRAWTIME_OUTLMT , "65"}, /* 超出取款次数限制 */ {AP_RESPCODE_REFUNDAMT_OUTLMT , "13"}, /* 无效金额 */ {AP_RESPCODE_AUTHSETTLEAMT_OUTLMT, "13"}, /* 无效金额 */ {AP_RESPCODE_MERCH_INVALID , "03"}, /* 无效商户 */ {AP_RESPCODE_ACCPWD_TIMEOUTLMT , "38"}, /* 密码错误次数超限 */ {NULL , NULL}};TRANSSTRU transstru[] = { {"0100", "03", "06", AP_TRANSCODE_CS_AUTH , "" }, {"0100", "20", "06", AP_TRANSCODE_CS_CANCEL , AP_TRANSCODE_CS_AUTH }, {"0100", "31", "00", AP_TRANSCODE_CS_QUERYBAL , "" }, {"0200", "30", "02", AP_TRANSCODE_CS_QUERYBAL , "" }, {"0200", "01", "02", AP_TRANSCODE_CS_WITHDRAW , "" }, {"0200", "00", "06", AP_TRANSCODE_CS_AUTHSETTLE, "" }, {"0200", "00", "00", AP_TRANSCODE_CS_CONSUME , "" }, {"0200", "20", "06", AP_TRANSCODE_CS_CANCEL , AP_TRANSCODE_CS_AUTHSETTLE}, {"0200", "20", "00", AP_TRANSCODE_CS_CANCEL , AP_TRANSCODE_CS_CONSUME }, {"0220", "20", "00", AP_TRANSCODE_CS_REFUND , "" }, {"0220", "00", "00", TRANSCODE_AUTHSETTLE , "" }, {"0220", "19", "" , TRANSCODE_FEE , "" }, {"0220", "29", "" , TRANSCODE_FEE , "" }, {"0220", "00", "13", TRANSCODE_EXPADVICE , "" }, {"0220", "00", "17", TRANSCODE_EXPADVICE , "" }, {"0220", "00", "41", TRANSCODE_EXPADVICE , "" }, {"0220", "01", "00", TRANSCODE_EXPADVICE , "" }, {"0220", "01", "02", TRANSCODE_EXPADVICE , "" }, {"0220", "01", "06", TRANSCODE_EXPADVICE , "" }, {"0220", "01", "13", TRANSCODE_EXPADVICE , "" }, {"0220", "01", "17", TRANSCODE_EXPADVICE , "" }, {"0220", "01", "41", TRANSCODE_EXPADVICE , "" }, {"0220", "22", "00", TRANSCODE_EXPADVICE , "" }, {"0220", "22", "02", TRANSCODE_EXPADVICE , "" }, {"0220", "22", "06", TRANSCODE_EXPADVICE , "" }, {"0220", "22", "13", TRANSCODE_EXPADVICE , "" }, {"0220", "22", "17", TRANSCODE_EXPADVICE , "" }, {"0220", "22", "41", TRANSCODE_EXPADVICE , "" }, {"0220", "02", "00", TRANSCODE_EXPADVICE , "" }, {"0220", "02", "02", TRANSCODE_EXPADVICE , "" }, {"0220", "02", "06", TRANSCODE_EXPADVICE , "" }, {"0220", "02", "13", TRANSCODE_EXPADVICE , "" }, {"0220", "02", "17", TRANSCODE_EXPADVICE , "" }, {"0220", "02", "41", TRANSCODE_EXPADVICE , "" }, {"0420", "03", "06", TRANSCODE_REVERSE , AP_TRANSCODE_CS_AUTH }, {"0420", "20", "06", TRANSCODE_REVERSE , AP_TRANSCODE_CS_CANCEL }, {"0420", "01", "02", TRANSCODE_REVERSE , AP_TRANSCODE_CS_WITHDRAW}, {"0420", "00", "00", TRANSCODE_REVERSE , AP_TRANSCODE_CS_CONSUME }, {"0420", "20", "00", TRANSCODE_REVERSE , AP_TRANSCODE_CS_CANCEL }, {"0420", "00", "06", TRANSCODE_REVERSE , AP_TRANSCODE_CS_AUTHSETTLE}, {"0422", "00", "00", TRANSCODE_EXPADVICE , "" }, {"0422", "00", "02", TRANSCODE_EXPADVICE , "" }, {"0422", "00", "06", TRANSCODE_EXPADVICE , "" }, {"0422", "00", "13", TRANSCODE_EXPADVICE , "" }, {"0422", "00", "17", TRANSCODE_EXPADVICE , "" }, {"0422", "00", "41", TRANSCODE_EXPADVICE , "" }, {"0422", "01", "00", TRANSCODE_EXPADVICE , "" }, {"0422", "01", "02", TRANSCODE_EXPADVICE , "" }, {"0422", "01", "06", TRANSCODE_EXPADVICE , "" }, {"0422", "01", "17", TRANSCODE_EXPADVICE , "" }, {"0422", "01", "13", TRANSCODE_EXPADVICE , "" }, {"0422", "01", "41", TRANSCODE_EXPADVICE , "" }, {"0422", "22", "00", TRANSCODE_EXPADVICE , "" }, {"0422", "22", "02", TRANSCODE_EXPADVICE , "" }, {"0422", "22", "06", TRANSCODE_EXPADVICE , "" }, {"0422", "22", "13", TRANSCODE_EXPADVICE , "" }, {"0422", "22", "17", TRANSCODE_EXPADVICE , "" }, {"0422", "22", "41", TRANSCODE_EXPADVICE , "" }, {"0422", "02", "00", TRANSCODE_EXPADVICE , "" }, {"0422", "02", "02", TRANSCODE_EXPADVICE , "" }, {"0422", "02", "06", TRANSCODE_EXPADVICE , "" }, {"0422", "02", "13", TRANSCODE_EXPADVICE , "" }, {"0422", "02", "17", TRANSCODE_EXPADVICE , "" }, {"0422", "02", "41", TRANSCODE_EXPADVICE , "" }, {"0520", "" , "" , AP_TRANSCODE_CS_SETTLE , "" }, {"0522", "" , "" , AP_TRANSCODE_CS_SETTLE , "" }, {"0620", "" , "" , TRANSCODE_ADMIN , "" }, {"0800", "" , "" , TRANSCODE_RESETKEY , "" }, {"0820", "" , "" , TRANSCODE_NETMAN , "" }, {NULL , NULL, NULL, NULL , NULL }}; RESULT RecordJournal(PCXMLSTRU pxmlstruReq, PCISO8583STRU piso8583stru){ UINT nSize; EXEC SQL BEGIN DECLARE SECTION; DSIJSTRU dsijstru; EXEC SQL END DECLARE SECTION; memset(&dsijstru, 0, sizeof(DSIJSTRU)); ASSERT_NORMAL(AP_DEMAND(AP_PATH_REQSEQNO, dsijstru.szReqSeqNo)); ASSERT_NORMAL(AP_DEMAND(AP_PATH_ORGREQTYPE, dsijstru.szOrgReqType)); ASSERT_NORMAL(AP_DEMAND(AP_PATH_SETTLEDATE, dsijstru.szSettleDate)); nSize = SIZE_TRACENO; ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_TRACENO, dsijstru.szTraceNo, &nSize)); nSize = SIZE_ACQID_MAX; ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_ACQID, dsijstru.szAcqId, &nSize)); nSize = SIZE_FORWARDID_MAX; ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_FORWARDID, dsijstru.szForwardId, &nSize)); EXEC SQL INSERT dsij VALUES(:dsijstru); ASSERT_SQL_NORMAL(); return NORMAL;}RESULT LocateTransCode(PISO8583STRU piso8583stru, PSTR pszTransCode, PSTR pszOrgTransCode){ char szMsgId[SIZE_MSGID + 1]; char szProcessCode[SIZE_PROCESSCODE + 1]; char szConditionCode[SIZE_CONDITIONCODE + 1]; char szTransType[SIZE_TRANSTYPE + 1]; UINT nSize, n = 0; bufclr(szMsgId); bufclr(szProcessCode); bufclr(szConditionCode); bufclr(szTransType); nSize = SIZE_MSGID; ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_MSGID, szMsgId, &nSize)); nSize = SIZE_PROCESSCODE; GetBitInIso8583(piso8583stru, BIT_PROCESSCODE, szProcessCode, &nSize); memcpy(szTransType, szProcessCode, SIZE_TRANSTYPE); nSize = SIZE_CONDITIONCODE; GetBitInIso8583(piso8583stru, BIT_CONDITIONCODE, szConditionCode, &nSize); while (transstru[n].pszMsgId != NULL) { if (strcmp(szMsgId, transstru[n].pszMsgId) == 0 && strcmp(szConditionCode, transstru[n].pszConditionCode) == 0 && strcmp(szTransType, transstru[n].pszTransType) == 0) { strcpy(pszTransCode, transstru[n].pszTransCode); strcpy(pszOrgTransCode, transstru[n].pszOrgTransCode); return NORMAL; } n++; } return INVALID;}RESULT GetTransCode(PISO8583STRU piso8583stru, PSTR pszTransCode){ char szTransCode[AP_LEN_TRANSCODE + 1]; ASSERT_NORMAL(LocateTransCode(piso8583stru, pszTransCode, szTransCode)); return NORMAL;}RESULT GetOrgTransCode(PISO8583STRU piso8583stru, PSTR pszTransCode){ char szTransCode[AP_LEN_TRANSCODE + 1]; ASSERT_NORMAL(LocateTransCode(piso8583stru, szTransCode, pszTransCode)); return NORMAL;}RESULT GetReqDateTime(PISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){ TIMESTRU timestru; char szTransmissDateTime[SIZE_TRANSMISSDATETIME + 1]; char szReqDate[AP_LEN_DATE + 1]; char szReqTime[AP_LEN_TIME + 1]; UINT nSize; bufclr(szTransmissDateTime); bufclr(szReqDate); bufclr(szReqTime); nSize = SIZE_TRANSMISSDATETIME; ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_TRANSMISSDATETIME, szTransmissDateTime, &nSize)); memcpy(szReqTime, &szTransmissDateTime[4], AP_LEN_TIME); timestru = GetTime(); sprintf(szReqDate, "%04d%4.4s", timestru.nYear, szTransmissDateTime); ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_REQDATE, szReqDate)); ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_REQTIME, szReqTime)); return NORMAL;}RESULT GetSettleDate(PISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){ TIMESTRU timestru; char szSettleDate[AP_LEN_DATE + 1]; UINT nSize; bufclr(szSettleDate); timestru = GetTime(); sprintf(szSettleDate, "%04d", timestru.nYear); nSize = SIZE_SETTLEDATE; ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_SETTLEDATE, szSettleDate + 4, &nSize)); ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_SETTLEDATE, szSettleDate)); return NORMAL;}RESULT GetAccNo(PISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){ char szPan[SIZE_PAN_MAX + 1]; UINT nSize; bufclr(szPan); nSize = SIZE_PAN_MAX; ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_PAN, szPan, &nSize)); ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_ACCNO, szPan)); return NORMAL;}RESULT GetMerchNo(PISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){ char szAcceptorId[SIZE_ACCEPTORID + 1]; UINT nSize; bufclr(szAcceptorId); nSize = SIZE_ACCEPTORID; ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_ACCEPTORID, szAcceptorId, &nSize)); ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_MERCHNO, szAcceptorId)); return NORMAL;}RESULT GetMerchType(PISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){ char szMerchType[SIZE_MERCHTYPE + 1]; UINT nSize; bufclr(szMerchType); nSize = SIZE_MERCHTYPE; ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_MERCHTYPE, szMerchType, &nSize)); ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_MERCHTYPE, szMerchType)); return NORMAL;}RESULT GetAccPwd(PISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq, PUCHAR pcKey){ char szEntryMode[SIZE_ENTRYMODE + 1]; char szAccPwd[AP_LEN_ACCPWD + 1]; char szPan[SIZE_PAN_MAX + 1]; UCHAR cSecurityCtrlInfo[SIZE_SECURITYCTRLINFO]; UCHAR cPin[SIZE_PIN]; UINT nSize; bufclr(szEntryMode); bufclr(szAccPwd); bufclr(szPan); bufclr(cSecurityCtrlInfo); bufclr(cPin); nSize = SIZE_ENTRYMODE; ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_ENTRYMODE, szEntryMode, &nSize)); if (szEntryMode[2] == '2') return NORMAL; DETECT(szEntryMode[2] == '1'); nSize = SIZE_PIN; ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_PIN, cPin, &nSize)); nSize = SIZE_SECURITYCTRLINFO; ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_SECURITYCTRLINFO, cSecurityCtrlInfo, &nSize));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -