📄 dsic.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-27 Shuming Pang - create implementation file for * dsi command transaction */#include <sybtesql.h>#include "ap.h"#include "apsc.h"#include "apsp.h"EXEC SQL INCLUDE sqlca;EXEC SQL INCLUDE "dsi.h";EXEC SQL INCLUDE "dsiext.h";RESULT GetCommonInfo(PISO8583STRU piso8583stru){ char szArea[AP_LEN_AREA + 1]; char szForwardId[SIZE_FORWARDID_MAX + 1]; char szSeqNo[AP_LEN_SEQNO + 1]; char szTransmissDateTime[SIZE_TRANSMISSDATETIME + 1]; TIMESTRU timestru; bufclr(szArea); bufclr(szForwardId); bufclr(szSeqNo); bufclr(szTransmissDateTime); ASSERT_NORMAL(ApGetArea(AP_REQID_DSI, szArea)); strcpy(szForwardId, AP_INST_ABC); strcat(szForwardId, szArea); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_FORWARDID, szForwardId, strlen(szForwardId))); timestru = GetTime(); sprintf(szTransmissDateTime, "%02d%02d%02d%02d%02d", timestru.nMon, timestru.nDay, timestru.nHour, timestru.nMin, timestru.nSec); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_TRANSMISSDATETIME, szTransmissDateTime, SIZE_TRANSMISSDATETIME)); ASSERT_NORMAL(ApScGetSeqNo("DSI", szSeqNo)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_TRACENO, szSeqNo + 6, SIZE_TRACENO)); return NORMAL;}RESULT SendAdviceFee(PSTR pszCmd, PISO8583STRU piso8583stru){ char szDestId[SIZE_DESTID_MAX + 1]; char szAcqId[SIZE_ACQID_MAX + 1]; char szAccNo[SIZE_PAN_MAX + 1]; char szTransAmt[SIZE_TRANSAMT + 1]; char szCurrCode[SIZE_CURRCODE + 1]; char szReasonCode[SIZE_REASONCODE + 1]; char szAddPriv[255 + 1]; char *pszMsg; UINT n, nSize; bufclr(szDestId); bufclr(szAcqId); bufclr(szAccNo); bufclr(szTransAmt); bufclr(szCurrCode); bufclr(szReasonCode); bufclr(szAddPriv); DETECT_NULL(pszMsg = strchr(pszCmd, ' ')); pszMsg++; sscanf(pszMsg, "%s %s %s %s %s", szDestId, szAccNo, szTransAmt, szCurrCode, szReasonCode); for (n = 0; n < 5; n++) pszMsg = strchr(pszMsg, ' ') + 1; DETECT(strlen(pszMsg) < sizeof(szAddPriv) - 2); strcpy(szAddPriv, "03"); strcpy(szAddPriv + 2, pszMsg); ASSERT_NORMAL(GetCommonInfo(piso8583stru)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_MSGID, "0220", SIZE_MSGID)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_PROCESSCODE, atof(szTransAmt) < 0 ? "190000" : "290000", SIZE_PROCESSCODE)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_PAN, szAccNo, strlen(szAccNo))); sprintf(szTransAmt, "%012d", atoi(szTransAmt)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_TRANSAMT, szTransAmt, SIZE_TRANSAMT)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_CURRCODE, szCurrCode, SIZE_CURRCODE)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_RESERVEPRIV, szReasonCode, SIZE_REASONCODE)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_ADDPRIV, szAddPriv, strlen(szAddPriv))); nSize = SIZE_ACQID_MAX; GetBitInIso8583(piso8583stru, BIT_FORWARDID, szAcqId, &nSize); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_ACQID, szAcqId, strlen(szAcqId))); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_DESTID, szDestId, strlen(szDestId))); ASSERT_NORMAL(LinkDsi(piso8583stru, "")); return NORMAL; }RESULT SendAdviceText(PSTR pszCmd, PISO8583STRU piso8583stru){ char szDestId[SIZE_DESTID_MAX + 1]; char szAddPriv[SIZE_ADDPRIV_MAX + 1]; char *pszMsg; DETECT_NULL(pszMsg = strchr(pszCmd, ' ')); pszMsg++; bufclr(szDestId); sscanf(pszMsg, "%8s", szDestId); DETECT_NULL(pszMsg = strchr(pszMsg + strlen(szDestId), ' ')); pszMsg++; ASSERT_NORMAL(GetCommonInfo(piso8583stru)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_MSGID, "0620", SIZE_MSGID)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_NETMANCODE, "800", SIZE_NETMANCODE)); DETECT(strlen(pszMsg) <= SIZE_ADDPRIV_MAX - 2); strcpy(szAddPriv, "01"); strcat(szAddPriv, pszMsg); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_ADDPRIV, szAddPriv, strlen(szAddPriv))); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_DESTID, szDestId, strlen(szDestId))); ASSERT_NORMAL(LinkDsi(piso8583stru, "")); return NORMAL; }RESULT SignOn(PISO8583STRU piso8583stru){ ASSERT_NORMAL(GetCommonInfo(piso8583stru)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_MSGID, "0820", SIZE_MSGID)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_NETMANCODE, "001", SIZE_NETMANCODE)); ASSERT_NORMAL(LinkDsi(piso8583stru, "")); return NORMAL;}RESULT SignOff(PISO8583STRU piso8583stru){ ASSERT_NORMAL(GetCommonInfo(piso8583stru)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_MSGID, "0820", SIZE_MSGID)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_NETMANCODE, "002", SIZE_NETMANCODE)); ASSERT_NORMAL(LinkDsi(piso8583stru, "")); return NORMAL;}RESULT NetTest(PISO8583STRU piso8583stru){ ASSERT_NORMAL(GetCommonInfo(piso8583stru)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_MSGID, "0820", SIZE_MSGID)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_NETMANCODE, "301", SIZE_NETMANCODE)); ASSERT_NORMAL(LinkDsi(piso8583stru, "")); return NORMAL;}RESULT ApplyPinKey(PISO8583STRU piso8583stru){ ASSERT_NORMAL(GetCommonInfo(piso8583stru)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_MSGID, "0820", SIZE_MSGID)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_NETMANCODE, "101", SIZE_NETMANCODE)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_SECURITYCTRLINFO, "1000000000000000", SIZE_SECURITYCTRLINFO)); ASSERT_NORMAL(LinkDsi(piso8583stru, "")); return NORMAL;}RESULT ApplyMacKey(PISO8583STRU piso8583stru){ ASSERT_NORMAL(GetCommonInfo(piso8583stru)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_MSGID, "0820", SIZE_MSGID)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_NETMANCODE, "101", SIZE_NETMANCODE)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_SECURITYCTRLINFO, "2000000000000000", SIZE_SECURITYCTRLINFO)); ASSERT_NORMAL(LinkDsi(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(SetSmId()) ASSURE_NORMAL(CreateIso8583(&iso8583stru, ifistruDsi)) if (strcmp(szCmd, "signon") == 0) ASSURE_NORMAL(SignOn(&iso8583stru)) else if (strcmp(szCmd, "signoff") == 0) ASSURE_NORMAL(SignOff(&iso8583stru)) else if (strcmp(szCmd, "nettest") == 0) ASSURE_NORMAL(NetTest(&iso8583stru)) else if (strcmp(szCmd, "applypinkey") == 0) ASSURE_NORMAL(ApplyPinKey(&iso8583stru)) else if (strcmp(szCmd, "applymackey") == 0) ASSURE_NORMAL(ApplyMacKey(&iso8583stru)) else if (strcmp(szCmd, "sendadvicefee") == 0) ASSURE_NORMAL(SendAdviceFee(pszCmd, &iso8583stru)) else if (strcmp(szCmd, "sendadvicetext") == 0) ASSURE_NORMAL(SendAdviceText(pszCmd, &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) if (strcmp(szCmd, "signon") == 0) { EXEC SQL UPDATE dsi SET status = "Y"; ASSURE_NORMAL(VERIFY_SQL_NORMAL() ? NORMAL : EXCEPTION) } if (strcmp(szCmd, "signoff") == 0) { EXEC SQL UPDATE dsi SET status = "N"; ASSURE_NORMAL(VERIFY_SQL_NORMAL() ? 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 + -