📄 handle.cpre
字号:
bufclr(szTrace); nSize = SIZE_TRACE; ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_TRACE, szTrace, &nSize)); nSize = SIZE_TERMID; ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_TERMID, szTermId, &nSize)); nSize = SIZE_MERCHID; ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_MERCHID, szMerchId, &nSize)); nSize = SIZE_BATCHNO_MAX; ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_BATCHNO, szBatchNo, &nSize)); DETECT(nSize == SIZE_BATCHNO_MAX); EXEC SQL SELECT batchno INTO :szSysBatchNo FROM pos WHERE termid = :szTermId and merchid = :szMerchId; ASSERT_SQL_NORMAL(); AddNum(szSysBatchNo); EXEC SQL UPDATE pos SET batchno = :szSysBatchNo, trace = :szTrace WHERE termid = :szTermId and merchid = :szMerchId; ASSERT_SQL_NORMAL(); AddNum(szBatchNo); if (strcmp(szBatchNo, szSysBatchNo) != 0) SetBitInIso8583(piso8583stru, BIT_BATCHNO, szSysBatchNo, SIZE_BATCHNO); return NORMAL;}/* * ASSURE_NORMAL宏用来确保在处理请求ISO8583报文时某些操作成功。 * 必须注意,该宏在检测到错误时把错误信息反映到报文中,而函数返回正常! * 另外,如果错误即非INVALID,也不是EXCEPTION,将保持当前的应答码 * 不变。 */RESULT rTemp; #define ASSURE_NORMAL(r) \ { \ rTemp = (r); \ if (rTemp == EXCEPTION) \ VERIFY_NORMAL(FillRespIso8583(piso8583stru, "96")); \ if (rTemp == INVALID) \ VERIFY_NORMAL(FillRespIso8583(piso8583stru, "30")); \ if (!VERIFY_NORMAL(rTemp)) \ { \ VERIFY_NORMAL(SetMac(piso8583stru, cKey)); \ DeleteXml(&xmlstruReq); \ DeleteXml(&xmlstruResp); \ return NORMAL; \ } \ }RESULT HandleConsume(PISO8583STRU piso8583stru){ XMLSTRU xmlstruReq; XMLSTRU xmlstruResp; PXMLSTRU pxmlstruReq; PXMLSTRU pxmlstruResp; UCHAR cKey[SIZE_KEY]; pxmlstruReq = &xmlstruReq; pxmlstruResp = &xmlstruResp; memset(&xmlstruReq, 0, sizeof(xmlstruReq)); memset(&xmlstruResp, 0, sizeof(xmlstruResp)); ASSURE_NORMAL(CheckBatchNo(piso8583stru)) ASSURE_NORMAL(GetKey(piso8583stru, cKey)) ASSURE_NORMAL(VerifyMac(piso8583stru, cKey)) ASSURE_NORMAL(CreateReqXml(&xmlstruReq)) ASSURE_NORMAL(AP_INSERT_EXT(AP_PATH_MSGTYPE, AP_MSGTYPE_SUBMITREQ)) ASSURE_NORMAL(AP_INSERT_EXT(AP_PATH_TRANSCODE, AP_TRANSCODE_CS_CONSUME)) ASSURE_NORMAL(GetReqDateTime(&xmlstruReq)) ASSURE_NORMAL(GetReqId(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetReqSeqNoExt(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetAccNo(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetAccPwd(piso8583stru, &xmlstruReq, cKey)) ASSURE_NORMAL(GetBatchNoExt(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetVouchNo(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetMerchNo(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetExpDate(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetAmt(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(AP_INSERT_EXT(AP_PATH_TRACKVERIFY, "N")) if (IsEntryMode(piso8583stru, "021") || IsEntryMode(piso8583stru, "022")) { UpdateInXmlExt(&xmlstruReq, AP_PATH_TRACKVERIFY, "Y"); ASSURE_NORMAL(GetTrack2(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetTrack3(piso8583stru, &xmlstruReq)) } ASSURE_NORMAL(RecordJournal(&xmlstruReq)) ASSURE_NORMAL(ApCaSubmit(&xmlstruReq, &xmlstruResp)) VERIFY_NORMAL(UpdatePos(piso8583stru, &xmlstruResp)); SetBitInIso8583(piso8583stru, BIT_AMT, NULL, 0); SetBitInIso8583(piso8583stru, BIT_EXPDATE, NULL, 0); SetBitInIso8583(piso8583stru, BIT_ENTRYMODE, NULL, 0); SetBitInIso8583(piso8583stru, BIT_NII, NULL, 0); SetBitInIso8583(piso8583stru, BIT_TRACK2, NULL, 0); SetBitInIso8583(piso8583stru, BIT_TRACK3, NULL, 0); SetBitInIso8583(piso8583stru, BIT_FUNDTYPE, NULL, 0); SetBitInIso8583(piso8583stru, BIT_PIN, NULL, 0); SetBitInIso8583(piso8583stru, BIT_OPERATOR, NULL, 0); SetBitInIso8583(piso8583stru, BIT_VOUCHNOBATCHNO, NULL, 0); VERIFY_NORMAL(SetCertNo(piso8583stru, &xmlstruResp)); VERIFY_NORMAL(SetBal(piso8583stru, &xmlstruResp)); VERIFY_NORMAL(SetAuthCode(piso8583stru, &xmlstruResp)); if (ApIsRespCode(&xmlstruResp, AP_RESPCODE_ACCEPT)) { if (!VERIFY_NORMAL(SetDateTime(piso8583stru, &xmlstruResp)) || !VERIFY_NORMAL(SetHostTrace(piso8583stru, &xmlstruResp)) || !VERIFY_NORMAL(SetRespCode(piso8583stru, &xmlstruResp)) || !VERIFY_NORMAL(SetMac(piso8583stru, cKey))) { DeleteXml(&xmlstruReq); DeleteXml(&xmlstruResp); return EXCEPTION; } } else if (ApIsRespCode(&xmlstruResp, AP_RESPCODE_EXCEPTION)) { VERIFY_NORMAL(SetMac(piso8583stru, cKey)); DeleteXml(&xmlstruReq); DeleteXml(&xmlstruResp); return EXCEPTION; } else { VERIFY_NORMAL(SetDateTime(piso8583stru, &xmlstruResp)); VERIFY_NORMAL(SetHostTrace(piso8583stru, &xmlstruResp)); VERIFY_NORMAL(SetRespCode(piso8583stru, &xmlstruResp)); VERIFY_NORMAL(SetMac(piso8583stru, cKey)); } DeleteXml(&xmlstruReq); DeleteXml(&xmlstruResp); return NORMAL;}RESULT HandleQueryBal(PISO8583STRU piso8583stru){ XMLSTRU xmlstruReq; XMLSTRU xmlstruResp; PXMLSTRU pxmlstruReq; PXMLSTRU pxmlstruResp; UCHAR cKey[SIZE_KEY]; pxmlstruReq = &xmlstruReq; pxmlstruResp = &xmlstruResp; memset(&xmlstruReq, 0, sizeof(xmlstruReq)); memset(&xmlstruResp, 0, sizeof(xmlstruResp)); ASSURE_NORMAL(CheckBatchNo(piso8583stru)) ASSURE_NORMAL(GetKey(piso8583stru, cKey)) ASSURE_NORMAL(VerifyMac(piso8583stru, cKey)) ASSURE_NORMAL(CreateReqXml(&xmlstruReq)) ASSURE_NORMAL(AP_INSERT_EXT(AP_PATH_MSGTYPE, AP_MSGTYPE_SUBMITREQ)) ASSURE_NORMAL(AP_INSERT_EXT(AP_PATH_TRANSCODE, AP_TRANSCODE_CS_QUERYBAL)) ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_REQTYPE, AP_REQTYPE_POS)); ASSURE_NORMAL(GetReqDateTime(&xmlstruReq)) ASSURE_NORMAL(GetReqId(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetReqSeqNo(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetAccNo(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetAccPwd(piso8583stru, &xmlstruReq, cKey)) ASSURE_NORMAL(GetBatchNo(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetMerchNo(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetExpDate(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(AP_INSERT_EXT(AP_PATH_TRACKVERIFY, "N")) if (IsEntryMode(piso8583stru, "021") || IsEntryMode(piso8583stru, "022")) { UpdateInXmlExt(&xmlstruReq, AP_PATH_TRACKVERIFY, "Y"); ASSURE_NORMAL(GetTrack2(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetTrack3(piso8583stru, &xmlstruReq)) } ASSURE_NORMAL(RecordJournal(&xmlstruReq)) ASSERT_NORMAL(ApCaSubmit(&xmlstruReq,&xmlstruResp)); VERIFY_NORMAL(UpdatePos(piso8583stru, &xmlstruResp)); SetBitInIso8583(piso8583stru, BIT_EXPDATE, NULL, 0); SetBitInIso8583(piso8583stru, BIT_ENTRYMODE, NULL, 0); SetBitInIso8583(piso8583stru, BIT_NII, NULL, 0); SetBitInIso8583(piso8583stru, BIT_TRACK2, NULL, 0); SetBitInIso8583(piso8583stru, BIT_TRACK3, NULL, 0); SetBitInIso8583(piso8583stru, BIT_PIN, NULL, 0); SetBitInIso8583(piso8583stru, BIT_OPERATOR, NULL, 0); VERIFY_NORMAL(SetCertNo(piso8583stru, &xmlstruResp)); if (ApIsRespCode(&xmlstruResp, AP_RESPCODE_ACCEPT)) { if (!VERIFY_NORMAL(SetDateTime(piso8583stru, &xmlstruResp)) || !VERIFY_NORMAL(SetBal(piso8583stru, &xmlstruResp)) || !VERIFY_NORMAL(SetHostTrace(piso8583stru, &xmlstruResp)) || !VERIFY_NORMAL(SetRespCode(piso8583stru, &xmlstruResp)) || !VERIFY_NORMAL(SetMac(piso8583stru, cKey))) { DeleteXml(&xmlstruReq); DeleteXml(&xmlstruResp); return EXCEPTION; } } else if (ApIsRespCode(&xmlstruResp, AP_RESPCODE_EXCEPTION)) { VERIFY_NORMAL(SetMac(piso8583stru, cKey)); DeleteXml(&xmlstruReq); DeleteXml(&xmlstruResp); return EXCEPTION; } else { VERIFY_NORMAL(SetDateTime(piso8583stru, &xmlstruResp)); VERIFY_NORMAL(SetHostTrace(piso8583stru, &xmlstruResp)); VERIFY_NORMAL(SetRespCode(piso8583stru, &xmlstruResp)); VERIFY_NORMAL(SetMac(piso8583stru, cKey)); } DeleteXml(&xmlstruReq); DeleteXml(&xmlstruResp); return NORMAL;}RESULT HandleQueryStatus(PISO8583STRU piso8583stru){ return NORMAL;}RESULT HandleRefund(PISO8583STRU piso8583stru){ XMLSTRU xmlstruReq; XMLSTRU xmlstruResp; PXMLSTRU pxmlstruReq; PXMLSTRU pxmlstruResp; UCHAR cKey[SIZE_KEY]; pxmlstruReq = &xmlstruReq; pxmlstruResp = &xmlstruResp; memset(&xmlstruReq, 0, sizeof(xmlstruReq)); memset(&xmlstruResp, 0, sizeof(xmlstruResp)); ASSURE_NORMAL(CheckBatchNo(piso8583stru)) ASSURE_NORMAL(GetKey(piso8583stru, cKey)) ASSURE_NORMAL(VerifyMac(piso8583stru, cKey)) ASSURE_NORMAL(CreateReqXml(&xmlstruReq)) ASSURE_NORMAL(AP_INSERT_EXT(AP_PATH_MSGTYPE, AP_MSGTYPE_SUBMITREQ)) ASSURE_NORMAL(AP_INSERT_EXT(AP_PATH_TRANSCODE, AP_TRANSCODE_CS_REFUND)) ASSURE_NORMAL(GetReqDateTime(&xmlstruReq)) ASSURE_NORMAL(GetReqId(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetReqSeqNoExt(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetAccNo(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetBatchNoExt(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetVouchNo(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetOrgVouchNo(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetMerchNo(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetExpDate(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetAmt(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(AP_INSERT_EXT(AP_PATH_TRACKVERIFY, "N")) if (IsEntryMode(piso8583stru, "021") || IsEntryMode(piso8583stru, "022")) { UpdateInXmlExt(&xmlstruReq, AP_PATH_TRACKVERIFY, "Y"); ASSURE_NORMAL(GetTrack2(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetTrack3(piso8583stru, &xmlstruReq)) } ASSURE_NORMAL(RecordJournal(&xmlstruReq)) ASSURE_NORMAL(ApCaSubmit(&xmlstruReq, &xmlstruResp)) VERIFY_NORMAL(UpdatePos(piso8583stru, &xmlstruResp)); SetBitInIso8583(piso8583stru, BIT_AMT, NULL, 0); SetBitInIso8583(piso8583stru, BIT_EXPDATE, NULL, 0); SetBitInIso8583(piso8583stru, BIT_ENTRYMODE, NULL, 0); SetBitInIso8583(piso8583stru, BIT_NII, NULL, 0); SetBitInIso8583(piso8583stru, BIT_TRACK2, NULL, 0); SetBitInIso8583(piso8583stru, BIT_TRACK3, NULL, 0); SetBitInIso8583(piso8583stru, BIT_PIN, NULL, 0); SetBitInIso8583(piso8583stru, BIT_OPERATOR, NULL, 0); SetBitInIso8583(piso8583stru, BIT_ORGVOUCHNO, NULL, 0); SetBitInIso8583(piso8583stru, BIT_VOUCHNOBATCHNO, NULL, 0); VERIFY_NORMAL(SetCertNo(piso8583stru, &xmlstruResp)); VERIFY_NORMAL(SetBal(piso8583stru, &xmlstruResp)); if (ApIsRespCode(&xmlstruResp, AP_RESPCODE_ACCEPT)) { if (!VERIFY_NORMAL(SetDateTime(piso8583stru, &xmlstruResp)) || !VERIFY_NORMAL(SetHostTrace(piso8583stru, &xmlstruResp)) || !VERIFY_NORMAL(SetRespCode(piso8583stru, &xmlstruResp)) || !VERIFY_NORMAL(SetMac(piso8583stru, cKey))) { DeleteXml(&xmlstruReq); DeleteXml(&xmlstruResp); return EXCEPTION; } } else if (ApIsRespCode(&xmlstruResp, AP_RESPCODE_EXCEPTION)) { VERIFY_NORMAL(SetMac(piso8583stru, cKey)); DeleteXml(&xmlstruReq); DeleteXml(&xmlstruResp); return EXCEPTION; } else { VERIFY_NORMAL(SetDateTime(piso8583stru, &xmlstruResp)); VERIFY_NORMAL(SetHostTrace(piso8583stru, &xmlstruResp)); VERIFY_NORMAL(SetRespCode(piso8583stru, &xmlstruResp)); VERIFY_NORMAL(SetMac(piso8583stru, cKey)); } DeleteXml(&xmlstruReq); DeleteXml(&xmlstruResp); return NORMAL;}RESULT HandleAuth(PISO8583STRU piso8583stru){ XMLSTRU xmlstruReq; XMLSTRU xmlstruResp; PXMLSTRU pxmlstruReq; PXMLSTRU pxmlstruResp; UCHAR cKey[SIZE_KEY]; pxmlstruReq = &xmlstruReq; pxmlstruResp = &xmlstruResp; memset(&xmlstruReq, 0, sizeof(xmlstruReq)); memset(&xmlstruResp, 0, sizeof(xmlstruResp)); ASSURE_NORMAL(CheckBatchNo(piso8583stru)) ASSURE_NORMAL(GetKey(piso8583stru, cKey)) ASSURE_NORMAL(VerifyMac(piso8583stru, cKey)) ASSURE_NORMAL(CreateReqXml(&xmlstruReq)) ASSURE_NORMAL(AP_INSERT_EXT(AP_PATH_MSGTYPE, AP_MSGTYPE_SUBMITREQ)) ASSURE_NORMAL(AP_INSERT_EXT(AP_PATH_TRANSCODE, AP_TRANSCODE_CS_AUTH)) ASSURE_NORMAL(GetReqDateTime(&xmlstruReq)) ASSURE_NORMAL(GetReqId(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetReqSeqNoExt(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetAccNo(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetAccPwd(piso8583stru, &xmlstruReq, cKey)) ASSURE_NORMAL(GetBatchNoExt(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetVouchNo(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetMerchNo(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetExpDate(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetAmt(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(AP_INSERT_EXT(AP_PATH_TRACKVERIFY, "N")) if (IsEntryMode(piso8583stru, "021") || IsEntryMode(piso8583stru, "022")) { UpdateInXmlExt(&xmlstruReq, AP_PATH_TRACKVERIFY, "Y"); ASSURE_NORMAL(GetTrack2(piso8583stru, &xmlstruReq)) ASSURE_NORMAL(GetTrack3(piso8583stru, &xmlstruReq)) } ASSURE_NORMAL(RecordJournal(&xmlstruReq)) ASSURE_NORMAL(ApCaSubmit(&xmlstruReq, &xmlstruResp)) VERIFY_NORMAL(UpdatePos(piso8583stru, &xmlstruResp)); SetBitInIso8583(piso8583stru, BIT_AMT, NULL, 0); SetBitInIso8583(piso8583stru, BIT_EXPDATE, NULL, 0); SetBitInIso8583(piso8583stru, BIT_ENTRYMODE, NULL, 0); SetBitInIso8583(piso8583stru, BIT_NII, NULL, 0); SetBitInIso8583(piso8583stru, BIT_TRACK2, NULL, 0); SetBitInIso8583(piso8583stru, BIT_TRACK3, NULL, 0); SetBitInIso8583(piso8583stru, BIT_FUNDTYPE, NULL, 0); SetBitInIso8583(piso8583stru, BIT_PIN, NULL, 0); SetBitInIso8583(piso8583stru, BIT_OPERATOR, NULL, 0); SetBitInIso8583(piso8583stru, BIT_VOUCHNOBATCHNO, NULL, 0); VERIFY_NORMAL(SetCertNo(piso8583stru, &xmlstruResp)); VERIFY_NORMAL(SetBal(piso8583stru, &xmlstruResp)); if (ApIsRespCode(&xmlstruResp, AP_RESPCODE_ACCEPT)) { if (!VERIFY_NORMAL(SetDateTime(piso8583stru, &xmlstruResp)) || !VERIFY_NORMAL(SetHostTrace(piso8583stru, &xmlstruResp)) || !VERIFY_NORMAL(SetAuthCode(piso8583stru, &xmlstruResp)) || !VERIFY_NORMAL(SetRespCode(piso8583stru, &xmlstruResp)) || !VERIFY_NORMAL(SetMac(piso8583stru, cKey))) { DeleteXml(&xmlstruReq); DeleteXml(&xmlstruResp);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -