📄 isic.cpre
字号:
/* * This is a part of the Application Preconsole * - Service Provide - ISI. * 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-09-24 ChenYu - create implementation file for * ISI manager transation. */#include <sybtesql.h>#include "ap.h"EXEC SQL INCLUDE "isi.h";void GetTransmissDateTime(PSTR pszTransmissDateTime){ TIMESTRU timestru; timestru = GetTime(); sprintf(pszTransmissDateTime, "%02d%02d%02d%02d%02d", timestru.nMon, timestru.nDay, timestru.nHour, timestru.nMin, timestru.nSec); }RESULT GetForwardId(PSTR pszForwardId){ char szSettleNo[LEN_SETTLENO + 1]; char szBankNo[LEN_BANKNO + 1]; bufclr(szSettleNo); bufclr(szBankNo); ASSERT_NORMAL(AP_DEMAND_CFG(PATH_SETTLENO, szSettleNo)); ASSERT_NORMAL(AP_DEMAND_CFG(PATH_BANKNO, szBankNo)); sprintf(pszForwardId, "63%4.4s%5.5s", szSettleNo, szBankNo); return NORMAL;}RESULT HandleSign(PCSTR pszCmd, PISO8583STRU piso8583stru){ char szTransmissDateTime[SIZE_TRANSMISSDATETIME + 1]; char szForwardId[SIZE_FORWARDID_MAX + 1]; char szRespCode[SIZE_RESPCODE + 1]; char szSeqNo[AP_LEN_SEQNO + 1]; UINT nSize; bufclr(szForwardId); ASSERT_NORMAL(GetForwardId(szForwardId)); bufclr(szTransmissDateTime); GetTransmissDateTime(szTransmissDateTime); bufclr(szSeqNo); ASSERT_NORMAL(ApScGetSeqNo("ISI", szSeqNo)); /* * 组装ISO8583请求报文。 */ ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_MSGID, "0800", SIZE_MSGID)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_TRANSMISSDATETIME, szTransmissDateTime, SIZE_TRANSMISSDATETIME)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_TRACENO, &szSeqNo[6], SIZE_TRACENO)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_FORWARDID, szForwardId, SIZE_FORWARDID_MAX)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_SERVICECODE, "100", SIZE_SERVICECODE)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_DESTID, "63000000000", SIZE_DESTID_MAX)); if (strcmp(pszCmd, "signon") == 0) ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_NETMANCODE, "001", SIZE_NETMANCODE)); else ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_NETMANCODE, "002", SIZE_NETMANCODE)); ASSERT_NORMAL(SetMac(piso8583stru, cAdminMac, BIT_MAC128)); ASSERT_NORMAL(LinkIsi(piso8583stru)); ASSERT_NORMAL(VerifyMac(piso8583stru, cAdminMac, BIT_MAC128)); return NORMAL;}RESULT HandleSendAdvice(PCSTR pszAdvice, PISO8583STRU piso8583stru){ char szTransmissDateTime[SIZE_TRANSMISSDATETIME + 1]; char szForwardId[SIZE_FORWARDID_MAX + 1]; char szRespCode[SIZE_RESPCODE + 1]; char szSeqNo[AP_LEN_SEQNO + 1]; UINT nSize; bufclr(szForwardId); ASSERT_NORMAL(GetForwardId(szForwardId)); bufclr(szTransmissDateTime); GetTransmissDateTime(szTransmissDateTime); bufclr(szSeqNo); ASSERT_NORMAL(ApScGetSeqNo("ISI", szSeqNo)); nSize = strlen(pszAdvice); nSize = min(400, nSize); /* * 组装ISO8583请求报文。 */ ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_MSGID, "0820", SIZE_MSGID)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_TRANSMISSDATETIME, szTransmissDateTime, SIZE_TRANSMISSDATETIME)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_TRACENO, &szSeqNo[6], SIZE_TRACENO)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_FORWARDID, szForwardId, SIZE_FORWARDID_MAX)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_ADDPRIV, pszAdvice, nSize)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_NETMANCODE, "060", SIZE_NETMANCODE)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_DESTID, "63000000000", SIZE_NETMANCODE)); ASSERT_NORMAL(LinkIsi(piso8583stru)); return NORMAL;}#define ASSURE_NORMAL(r) \ { \ if (!VERIFY_NORMAL(r)) \ { \ sprintf(pszCmd, "%s failed!", szCmd); \ DeleteIso8583(&iso8583stru); \ EXEC CICS RETURN; \ } \ }void main(){ ISO8583STRU iso8583stru; UINT nSize; char *pszCmd, szCmd[128 + 1]; char szRespCode[SIZE_RESPCODE + 1]; bufclr(szCmd); memset(&iso8583stru, 0, sizeof(ISO8583STRU)); EXEC CICS ADDRESS EIB(dfheiptr); EXEC CICS ADDRESS COMMAREA(pszCmd); if (!VERIFY_NULL(pszCmd)) EXEC CICS RETURN; sscanf(pszCmd, "%s", szCmd); ASSURE_NORMAL(CreateIso8583(&iso8583stru, ifistruIsi)) if (strcmp(szCmd, "signon") == 0 || strcmp(szCmd, "signoff") == 0) ASSURE_NORMAL(HandleSign(szCmd, &iso8583stru)) else if (strcmp(szCmd, "sendadvice") == 0) ASSURE_NORMAL(HandleSendAdvice(pszCmd + 10 + 1, &iso8583stru)) else { strcpy(pszCmd, "invalid command!"); DeleteIso8583(&iso8583stru); EXEC CICS RETURN; } nSize = SIZE_RESPCODE; bufclr(szRespCode); ASSURE_NORMAL(GetBitInIso8583(&iso8583stru, BIT_RESPCODE, szRespCode, &nSize)) ASSURE_NORMAL(strcmp(szRespCode, "00") == 0 ? NORMAL : EXCEPTION) sprintf(pszCmd, "%s succeeded!", szCmd); DeleteIso8583(&iso8583stru); EXEC CICS RETURN;}/* End of this file */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -