⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dsic.cpre

📁 商业银行前置系统
💻 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 + -