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

📄 handle.cpre

📁 商业银行前置系统
💻 CPRE
📖 第 1 页 / 共 5 页
字号:
/* * This is a part of the Application Preconsole * - Channel Access - 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-12 Cheng WeiHong    - create implementation file for  *                               handling * 2001-09-30 R.Cao            - simplify logic */#include "ap.h"#include "apca.h"EXEC SQL INCLUDE sqlca;EXEC SQL INCLUDE "dsi.h";EXEC SQL INCLUDE "dsiext.h";/* * Types and structures defined in this file */typedef struct tagTRANSSTRU{    PCSTR pszMsgId;    PCSTR pszTransType;    PCSTR pszConditionCode;    PCSTR pszTransCode;    PCSTR pszOrgTransCode;} TRANSSTRU;typedef TRANSSTRU *       PTRANSSTRU;typedef const TRANSSTRU   CTRANSSTRU;typedef const TRANSSTRU * PCTRANSSTRU;/* * Variables declared in this file */extern UINT nReqSeqNo;PCSTR pszRespCode[][2] = {     {AP_RESPCODE_ACCEPT              , "00"}, /* 承兑或交易成功 */    {AP_RESPCODE_REJECT              , "93"}, /* 交易违法、不能完成 */    {AP_RESPCODE_LOGERR              , "96"}, /* 系统异常、失效 */    {AP_RESPCODE_SYSERR              , "96"}, /* 系统异常、失效 */    {AP_RESPCODE_MSG_DUPSEQNO        , "94"}, /* 重复交易 */        {AP_RESPCODE_SYS_INTERMIT        , "91"}, /* 发卡方或交换中心不能操作 */    {AP_RESPCODE_SERVICE_INTERMIT    , "91"}, /* 发卡方或交换中心不能操作 */    {AP_RESPCODE_SERVICE_NOTSUPPORT  , "40"}, /* 请求的功能尚不支持 */        {AP_RESPCODE_ACC_NOTEXIST        , "14"}, /* 无效卡号 */    {AP_RESPCODE_ACC_LOST            , "41"}, /* 挂失卡(没收卡)*/    {AP_RESPCODE_ACC_BALLACK         , "51"}, /* 无足够的存款 */    {AP_RESPCODE_ACCPWD_ERR          , "55"}, /* 不正确的PIN  */    {AP_RESPCODE_AMT_OUTLMT          , "61"}, /* 超出取款金额限制 */    {AP_RESPCODE_ORGTRANS_NOTEXIST   , "25"}, /* 未能找到文件上记录 */    {AP_RESPCODE_ORGTRANS_CANCELED   , "25"}, /* 未能找到文件上记录 */    {AP_RESPCODE_CARDNO_INVALID      , "14"}, /* 无效卡号 */    {AP_RESPCODE_CARD_NOTACCEPT      , "15"}, /* 无此发卡方 */    {AP_RESPCODE_CARD_CONFISCATE     , "04"}, /* 没收卡 */    {AP_RESPCODE_CARD_EXPIRED        , "54"}, /* 过期卡 */    {AP_RESPCODE_CARD_REFISSUE       , "01"}, /* 查发卡方 */    {AP_RESPCODE_WITHDRAWTIME_OUTLMT , "65"}, /* 超出取款次数限制 */    {AP_RESPCODE_REFUNDAMT_OUTLMT    , "13"}, /* 无效金额 */    {AP_RESPCODE_AUTHSETTLEAMT_OUTLMT, "13"}, /* 无效金额 */    {AP_RESPCODE_MERCH_INVALID       , "03"}, /* 无效商户 */    {AP_RESPCODE_ACCPWD_TIMEOUTLMT   , "38"}, /* 密码错误次数超限 */    {NULL                            , NULL}};TRANSSTRU transstru[] = {    {"0100", "03", "06", AP_TRANSCODE_CS_AUTH      , ""                      },    {"0100", "20", "06", AP_TRANSCODE_CS_CANCEL    , AP_TRANSCODE_CS_AUTH    },        {"0100", "31", "00", AP_TRANSCODE_CS_QUERYBAL  , ""                      },    {"0200", "30", "02", AP_TRANSCODE_CS_QUERYBAL  , ""                      },    {"0200", "01", "02", AP_TRANSCODE_CS_WITHDRAW  , ""                      },    {"0200", "00", "06", AP_TRANSCODE_CS_AUTHSETTLE, ""                      },    {"0200", "00", "00", AP_TRANSCODE_CS_CONSUME   , ""                      },    {"0200", "20", "06", AP_TRANSCODE_CS_CANCEL    , AP_TRANSCODE_CS_AUTHSETTLE},    {"0200", "20", "00", AP_TRANSCODE_CS_CANCEL    , AP_TRANSCODE_CS_CONSUME },    {"0220", "20", "00", AP_TRANSCODE_CS_REFUND    , ""                      },    {"0220", "00", "00", TRANSCODE_AUTHSETTLE      , ""                      },    {"0220", "19", ""  , TRANSCODE_FEE             , ""                      },    {"0220", "29", ""  , TRANSCODE_FEE             , ""                      },    {"0220", "00", "13", TRANSCODE_EXPADVICE       , ""                      },    {"0220", "00", "17", TRANSCODE_EXPADVICE       , ""                      },    {"0220", "00", "41", TRANSCODE_EXPADVICE       , ""                      },    {"0220", "01", "00", TRANSCODE_EXPADVICE       , ""                      },    {"0220", "01", "02", TRANSCODE_EXPADVICE       , ""                      },    {"0220", "01", "06", TRANSCODE_EXPADVICE       , ""                      },    {"0220", "01", "13", TRANSCODE_EXPADVICE       , ""                      },    {"0220", "01", "17", TRANSCODE_EXPADVICE       , ""                      },    {"0220", "01", "41", TRANSCODE_EXPADVICE       , ""                      },    {"0220", "22", "00", TRANSCODE_EXPADVICE       , ""                      },    {"0220", "22", "02", TRANSCODE_EXPADVICE       , ""                      },    {"0220", "22", "06", TRANSCODE_EXPADVICE       , ""                      },    {"0220", "22", "13", TRANSCODE_EXPADVICE       , ""                      },    {"0220", "22", "17", TRANSCODE_EXPADVICE       , ""                      },    {"0220", "22", "41", TRANSCODE_EXPADVICE       , ""                      },        {"0220", "02", "00", TRANSCODE_EXPADVICE       , ""                      },    {"0220", "02", "02", TRANSCODE_EXPADVICE       , ""                      },    {"0220", "02", "06", TRANSCODE_EXPADVICE       , ""                      },    {"0220", "02", "13", TRANSCODE_EXPADVICE       , ""                      },    {"0220", "02", "17", TRANSCODE_EXPADVICE       , ""                      },    {"0220", "02", "41", TRANSCODE_EXPADVICE       , ""                      },        {"0420", "03", "06", TRANSCODE_REVERSE         , AP_TRANSCODE_CS_AUTH    },    {"0420", "20", "06", TRANSCODE_REVERSE         , AP_TRANSCODE_CS_CANCEL  },    {"0420", "01", "02", TRANSCODE_REVERSE         , AP_TRANSCODE_CS_WITHDRAW},    {"0420", "00", "00", TRANSCODE_REVERSE         , AP_TRANSCODE_CS_CONSUME },    {"0420", "20", "00", TRANSCODE_REVERSE         , AP_TRANSCODE_CS_CANCEL  },    {"0420", "00", "06", TRANSCODE_REVERSE         , AP_TRANSCODE_CS_AUTHSETTLE},    {"0422", "00", "00", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "00", "02", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "00", "06", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "00", "13", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "00", "17", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "00", "41", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "01", "00", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "01", "02", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "01", "06", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "01", "17", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "01", "13", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "01", "41", TRANSCODE_EXPADVICE       , ""                      },            {"0422", "22", "00", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "22", "02", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "22", "06", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "22", "13", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "22", "17", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "22", "41", TRANSCODE_EXPADVICE       , ""                      },                {"0422", "02", "00", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "02", "02", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "02", "06", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "02", "13", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "02", "17", TRANSCODE_EXPADVICE       , ""                      },    {"0422", "02", "41", TRANSCODE_EXPADVICE       , ""                      },             {"0520", ""  , ""  , AP_TRANSCODE_CS_SETTLE    , ""                      },    {"0522", ""  , ""  , AP_TRANSCODE_CS_SETTLE    , ""                      },        {"0620", ""  , ""  , TRANSCODE_ADMIN           , ""                      },    {"0800", ""  , ""  , TRANSCODE_RESETKEY        , ""                      },    {"0820", ""  , ""  , TRANSCODE_NETMAN          , ""                      },    {NULL  , NULL, NULL, NULL                      , NULL                    }};  RESULT RecordJournal(PCXMLSTRU pxmlstruReq, PCISO8583STRU piso8583stru){    UINT nSize;        EXEC SQL BEGIN DECLARE SECTION;    DSIJSTRU dsijstru;    EXEC SQL END DECLARE SECTION;    memset(&dsijstru, 0, sizeof(DSIJSTRU));        ASSERT_NORMAL(AP_DEMAND(AP_PATH_REQSEQNO, dsijstru.szReqSeqNo));    ASSERT_NORMAL(AP_DEMAND(AP_PATH_ORGREQTYPE, dsijstru.szOrgReqType));    ASSERT_NORMAL(AP_DEMAND(AP_PATH_SETTLEDATE, dsijstru.szSettleDate));        nSize = SIZE_TRACENO;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_TRACENO,                                  dsijstru.szTraceNo, &nSize));    nSize = SIZE_ACQID_MAX;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_ACQID,                                  dsijstru.szAcqId, &nSize));    nSize = SIZE_FORWARDID_MAX;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_FORWARDID,                                  dsijstru.szForwardId, &nSize));    EXEC SQL INSERT dsij VALUES(:dsijstru);        ASSERT_SQL_NORMAL();    return NORMAL;}RESULT LocateTransCode(PISO8583STRU piso8583stru, PSTR pszTransCode,                       PSTR pszOrgTransCode){    char szMsgId[SIZE_MSGID + 1];    char szProcessCode[SIZE_PROCESSCODE + 1];    char szConditionCode[SIZE_CONDITIONCODE + 1];    char szTransType[SIZE_TRANSTYPE + 1];    UINT nSize, n = 0;    bufclr(szMsgId);    bufclr(szProcessCode);    bufclr(szConditionCode);    bufclr(szTransType);    nSize = SIZE_MSGID;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_MSGID, szMsgId, &nSize));        nSize = SIZE_PROCESSCODE;    GetBitInIso8583(piso8583stru, BIT_PROCESSCODE, szProcessCode, &nSize);    memcpy(szTransType, szProcessCode, SIZE_TRANSTYPE);        nSize = SIZE_CONDITIONCODE;    GetBitInIso8583(piso8583stru, BIT_CONDITIONCODE, szConditionCode, &nSize);    while (transstru[n].pszMsgId != NULL)    {       if (strcmp(szMsgId, transstru[n].pszMsgId) == 0 &&           strcmp(szConditionCode, transstru[n].pszConditionCode) == 0 &&           strcmp(szTransType, transstru[n].pszTransType) == 0)       {           strcpy(pszTransCode, transstru[n].pszTransCode);           strcpy(pszOrgTransCode, transstru[n].pszOrgTransCode);           return NORMAL;       }       n++;    }    return INVALID;}RESULT GetTransCode(PISO8583STRU piso8583stru, PSTR pszTransCode){    char szTransCode[AP_LEN_TRANSCODE + 1];        ASSERT_NORMAL(LocateTransCode(piso8583stru, pszTransCode, szTransCode));    return NORMAL;}RESULT GetOrgTransCode(PISO8583STRU piso8583stru, PSTR pszTransCode){    char szTransCode[AP_LEN_TRANSCODE + 1];        ASSERT_NORMAL(LocateTransCode(piso8583stru, szTransCode, pszTransCode));    return NORMAL;}RESULT GetReqDateTime(PISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    TIMESTRU timestru;    char szTransmissDateTime[SIZE_TRANSMISSDATETIME + 1];    char szReqDate[AP_LEN_DATE + 1];    char szReqTime[AP_LEN_TIME + 1];    UINT nSize;        bufclr(szTransmissDateTime);    bufclr(szReqDate);    bufclr(szReqTime);    nSize = SIZE_TRANSMISSDATETIME;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_TRANSMISSDATETIME,                                   szTransmissDateTime, &nSize));        memcpy(szReqTime, &szTransmissDateTime[4], AP_LEN_TIME);    timestru = GetTime();    sprintf(szReqDate, "%04d%4.4s", timestru.nYear, szTransmissDateTime);    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_REQDATE, szReqDate));    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_REQTIME, szReqTime));    return NORMAL;}RESULT GetSettleDate(PISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    TIMESTRU timestru;    char szSettleDate[AP_LEN_DATE + 1];    UINT nSize;        bufclr(szSettleDate);    timestru = GetTime();    sprintf(szSettleDate, "%04d", timestru.nYear);    nSize = SIZE_SETTLEDATE;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_SETTLEDATE,                                  szSettleDate + 4, &nSize));    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_SETTLEDATE, szSettleDate));    return NORMAL;}RESULT GetAccNo(PISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szPan[SIZE_PAN_MAX + 1];    UINT nSize;        bufclr(szPan);    nSize = SIZE_PAN_MAX;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_PAN, szPan, &nSize));    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_ACCNO, szPan));    return NORMAL;}RESULT GetMerchNo(PISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szAcceptorId[SIZE_ACCEPTORID + 1];    UINT nSize;        bufclr(szAcceptorId);    nSize = SIZE_ACCEPTORID;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_ACCEPTORID,                                  szAcceptorId, &nSize));    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_MERCHNO, szAcceptorId));    return NORMAL;}RESULT GetMerchType(PISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szMerchType[SIZE_MERCHTYPE + 1];    UINT nSize;        bufclr(szMerchType);    nSize = SIZE_MERCHTYPE;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_MERCHTYPE,                                  szMerchType, &nSize));    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_MERCHTYPE, szMerchType));    return NORMAL;}RESULT GetAccPwd(PISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq, PUCHAR pcKey){    char szEntryMode[SIZE_ENTRYMODE + 1];    char szAccPwd[AP_LEN_ACCPWD + 1];     char szPan[SIZE_PAN_MAX + 1];    UCHAR cSecurityCtrlInfo[SIZE_SECURITYCTRLINFO];    UCHAR cPin[SIZE_PIN];    UINT nSize;    bufclr(szEntryMode);    bufclr(szAccPwd);    bufclr(szPan);    bufclr(cSecurityCtrlInfo);    bufclr(cPin);        nSize = SIZE_ENTRYMODE;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_ENTRYMODE, szEntryMode,                                  &nSize));        if (szEntryMode[2] == '2')        return NORMAL;    DETECT(szEntryMode[2] == '1');        nSize = SIZE_PIN;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_PIN, cPin, &nSize));    nSize = SIZE_SECURITYCTRLINFO;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_SECURITYCTRLINFO,                                  cSecurityCtrlInfo, &nSize));    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -