📄 linkdsi.cpre
字号:
/* * This is a part of the Application Preconsole * - Service Provide - 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-29 Shuming Pang - create implementation file for * utility functions */ #include "ap.h"EXEC SQL INCLUDE sqlca;EXEC SQL INCLUDE "dsi.h";/* * Dsi linking function */RESULT LinkDsi(PISO8583STRU piso8583stru, PCSTR pszRespSeqNo){ EXEC SQL BEGIN DECLARE SECTION; DSIDSTRU dsidstru; EXEC SQL END DECLARE SECTION; char cMsg[SIZE_MSG_ISO8583]; UINT nSize; short sSize; unsigned long lRespCode; memset(&dsidstru, 0, sizeof(DSIDSTRU)); strcpy(dsidstru.szRespSeqNo, pszRespSeqNo); nSize = SIZE_RETRIEVALREFNO; GetBitInIso8583(piso8583stru, BIT_RETRIEVALREFNO, dsidstru.szSeqNo, &nSize); nSize = SIZE_MSGID; GetBitInIso8583(piso8583stru, BIT_MSGID, dsidstru.szMsgId, &nSize); nSize = SIZE_PROCESSCODE; GetBitInIso8583(piso8583stru, BIT_PROCESSCODE, dsidstru.szProcessCode, &nSize); nSize = SIZE_PAN_MAX; GetBitInIso8583(piso8583stru, BIT_PAN, dsidstru.szPan, &nSize); nSize = SIZE_TRANSAMT; GetBitInIso8583(piso8583stru, BIT_TRANSAMT, dsidstru.szTransAmt, &nSize); nSize = SIZE_TRANSMISSDATETIME; GetBitInIso8583(piso8583stru, BIT_TRANSMISSDATETIME, dsidstru.szTransmissDateTime, &nSize); nSize = SIZE_LOCALTRANSDATE; GetBitInIso8583(piso8583stru, BIT_LOCALTRANSDATE, dsidstru.szLocalTransDate, &nSize); nSize = SIZE_LOCALTRANSTIME; GetBitInIso8583(piso8583stru, BIT_LOCALTRANSTIME, dsidstru.szLocalTransTime, &nSize); nSize = SIZE_MERCHTYPE; GetBitInIso8583(piso8583stru, BIT_MERCHTYPE, dsidstru.szMerchType, &nSize); nSize = SIZE_ENTRYMODE; GetBitInIso8583(piso8583stru, BIT_ENTRYMODE, dsidstru.szEntryMode, &nSize); nSize = SIZE_CONDITIONCODE; GetBitInIso8583(piso8583stru, BIT_CONDITIONCODE, dsidstru.szConditionCode, &nSize); nSize = SIZE_ACQID_MAX; GetBitInIso8583(piso8583stru, BIT_ACQID, dsidstru.szAcqId, &nSize); nSize = SIZE_FORWARDID_MAX; GetBitInIso8583(piso8583stru, BIT_FORWARDID, dsidstru.szForwardId, &nSize); nSize = SIZE_TERMID; GetBitInIso8583(piso8583stru, BIT_TERMID, dsidstru.szTermId, &nSize); nSize = SIZE_ACCEPTORID; GetBitInIso8583(piso8583stru, BIT_ACCEPTORID, dsidstru.szAcceptorId, &nSize); nSize = SIZE_ACCEPTORNAME; GetBitInIso8583(piso8583stru, BIT_ACCEPTORNAME, dsidstru.szAcceptorName, &nSize); nSize = SIZE_CURRCODE; GetBitInIso8583(piso8583stru, BIT_CURRCODE, dsidstru.szCurrCode, &nSize); nSize = SIZE_ACQRESERVE_MAX; GetBitInIso8583(piso8583stru, BIT_ACQRESERVE, dsidstru.szAcqReserve, &nSize); bufclr(cMsg); nSize = sizeof(cMsg); ASSERT_NORMAL(ExportIso8583(piso8583stru, cMsg, &nSize)); if (strcmp(dsidstru.szSeqNo, "") != 0) { EXEC SQL INSERT dsid VALUES(:dsidstru); if (sqlca.sqlcode != SQLCODE_DUPKEY) ASSERT_SQL_NORMAL(); } /* * 向COMMUNICATION REGION提交交易。如果发送成功,而此后发生异常,都必须返回 * UNKNOWN ,以促使SPA 填写AP_RESPCODE_EXCEPTION ,并引发通知。 */ EXEC CICS ADDRESS EIB(dfheiptr); EXEC CICS LINK PROGRAM("SPDSI") COMMAREA(cMsg) LENGTH(sizeof(cMsg)) RESP(lRespCode); if (!VERIFY(lRespCode == DFHRESP(NORMAL))) return EXCEPTION; if (strncmp(cMsg, "EC", 2) == 0) { if (strncmp(cMsg + 2, AP_RESPCODE_EXCEPTION, 4) == 0) ASSERT_NORMAL(UNKNOWN); ASSERT_NORMAL(EXCEPTION); } if (!VERIFY_NORMAL(ImportIso8583(piso8583stru, cMsg, sizeof(cMsg)))) return UNKNOWN; nSize = SIZE_AUTHRESP; GetBitInIso8583(piso8583stru, BIT_AUTHRESP, dsidstru.szAuthResp, &nSize); nSize = SIZE_SETTLEDATE; VERIFY_NORMAL(GetBitInIso8583(piso8583stru, BIT_SETTLEDATE, dsidstru.szSettleDate, &nSize)); if (strcmp(dsidstru.szSeqNo, "") != 0) { EXEC SQL UPDATE dsid SET settledate = :dsidstru.szSettleDate, authresp = :dsidstru.szAuthResp WHERE seqno = :dsidstru.szSeqNo; VERIFY_SQL_NORMAL(); } return NORMAL;}/* End of this file */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -