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

📄 handle.cpre

📁 商业银行前置系统
💻 CPRE
📖 第 1 页 / 共 5 页
字号:
/* * This is a part of the Application Preconsole * - Channel Access - POS. * 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-03 HuangRunLang  - create implemention file for *                            transaction handling */#include "ap.h"#include "apca.h"EXEC SQL INCLUDE sqlca;EXEC SQL INCLUDE "pos.h";EXEC SQL INCLUDE "posext.h";extern char szConvKeyTime[LEN_CONVKEYTIME + 1];/* * Types and structures defined in this file */typedef struct tagTRANSSTRU{    PCSTR pszMsgId;    PCSTR pszTransType;    PCSTR pszTransCode;} TRANSSTRU;typedef TRANSSTRU *       PTRANSSTRU;typedef const TRANSSTRU   CTRANSSTRU;typedef const TRANSSTRU * PCTRANSSTRU;/* * Variables declared in this file */PCSTR pszRespCode[][2] = {    {AP_RESPCODE_ACCEPT            , "00"}, /* 批准或成功地完成 */    {AP_RESPCODE_REJECT            , "12"}, /* 无效交易 */    {AP_RESPCODE_SYSERR            , "96"}, /* 系统故障 */    {AP_RESPCODE_LOGERR            , "96"}, /* 系统故障 */    {AP_RESPCODE_SYS_INTERMIT      , "91"}, /* 发卡方或交换中心不能操作 */    {AP_RESPCODE_SERVICE_INTERMIT  , "91"}, /* 发卡方或交换中心不能操作 */    {AP_RESPCODE_SERVICE_NOTSUPPORT, "57"}, /* 不允许持卡人进行的交易 */    {AP_RESPCODE_REQID_INVALID     , "89"}, /* 无效终端 */    {AP_RESPCODE_ACC_NOTEXIST      , "14"}, /* 无效卡号 */    {AP_RESPCODE_ACC_LOST          , "41"}, /* 挂失卡(没收卡) */    {AP_RESPCODE_ACC_BALLACK       , "51"}, /* 无足够的存款 */    {AP_RESPCODE_ACCPWD_ERR        , "55"}, /* 不正确的PIN */    {AP_RESPCODE_ACCPWD_TIMEOUTLMT , "38"}, /* 超过允许的PIN试输入(没收卡) */    {AP_RESPCODE_AMT_INVALID       , "13"}, /* 无效金额 */    {AP_RESPCODE_ORGTRANS_NOTEXIST , "25"}, /* 未能找到文件上记录 */    {AP_RESPCODE_ORGTRANS_CANCELED , "86"}, /* 原交易已改变 */    {AP_RESPCODE_ORGTRANS_AMTERR   , "64"}, /* 原始金额不正确 */    {AP_RESPCODE_SETTLE_NOTEQUAL   , "95"}, /* 结算不平 */    {AP_RESPCODE_CARD_REFISSUE     , "01"}, /* 请查询银行方 */    {AP_RESPCODE_CARD_CONFISCATE   , "04"}, /* 没收卡 */    {AP_RESPCODE_CARD_NOTACCEPT    , "15"}, /* 无此发卡方 */    {AP_RESPCODE_CARD_EXPIRED      , "54"}, /* 过期的卡 */    {AP_RESPCODE_CARDNO_INVALID    , "14"}, /* 无效卡号 */    {AP_RESPCODE_AUTH_NOTEXIST     , "25"}, /* 未能找到文件上记录 */    {AP_RESPCODE_MERCH_INVALID     , "03"}, /* 无效商户 */    {NULL                          , NULL}};TRANSSTRU transstru[] = {    {"0100", "31", AP_TRANSCODE_CS_QUERYBAL   },    {"0100", "39", AP_TRANSCODE_CS_QUERYSTATUS},    {"0100", "38", AP_TRANSCODE_CS_AUTH       },    {"0200", "00", AP_TRANSCODE_CS_CONSUME    },    {"0200", "02", AP_TRANSCODE_CS_CANCEL     },    {"0200", "17", AP_TRANSCODE_CS_AUTHSETTLE },    {"0200", "20", AP_TRANSCODE_CS_REFUND     },    {"0200", "18", TRANSCODE_ADJUST           },    {"0800", "92", TRANSCODE_INIT             },    {"0500", "92", TRANSCODE_SETTLE           },    {"0500", "96", TRANSCODE_SETTLE2          },    {"0300", ""  , TRANSCODE_UPLOAD           },    {NULL  , NULL, NULL                       }};RESULT RecordJournal(PCXMLSTRU pxmlstruReq){    EXEC SQL BEGIN DECLARE SECTION;    POSJSTRU posjstru;    EXEC SQL END DECLARE SECTION;        ASSERT_NORMAL(AP_DEMAND(AP_PATH_REQID, posjstru.szReqId));    ASSERT_NORMAL(AP_DEMAND(AP_PATH_REQSEQNO, posjstru.szReqSeqNo));    AP_DEMAND(AP_PATH_VOUCHNO, posjstru.szVouchNo);    ASSERT_NORMAL(AP_DEMAND(AP_PATH_BATCHNO, posjstru.szBatchNo));        EXEC SQL INSERT posj VALUES(:posjstru);        if (sqlca.sqlcode == SQLCODE_DUPKEY)        return NORMAL;            ASSERT_SQL_NORMAL();    return NORMAL;}RESULT GetTransCodeInUpLoad(PISO8583STRU piso8583stru, PSTR pszTransCode){    char szProcessCode[SIZE_PROCESSCODE + 1];    char szTransType[SIZE_TRANSTYPE + 1];    UINT nSize, n;    bufclr(szProcessCode);    bufclr(szTransType);    nSize = SIZE_PROCESSCODE;    GetBitInIso8583(piso8583stru, BIT_PROCESSCODE, szProcessCode, &nSize);    memcpy(szTransType, szProcessCode, SIZE_TRANSTYPE);        n = 0;    while (transstru[n].pszMsgId != NULL)    {        if (strcmp(szTransType, transstru[n].pszTransType) == 0)        {            strcpy(pszTransCode, transstru[n].pszTransCode);            return NORMAL;        }        n++;    }    return INVALID;}RESULT GetTransCodeInReverse(PISO8583STRU piso8583stru, PSTR pszTransCode){    char szMsgId[SIZE_MSGID + 1];    char szProcessCode[SIZE_PROCESSCODE + 1];    char szTransType[SIZE_TRANSTYPE + 1];    UINT nSize, n;    bufclr(szMsgId);    bufclr(szProcessCode);    bufclr(szTransType);    nSize = SIZE_MSGID;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_MSGID, szMsgId, &nSize));    nSize = SIZE_PROCESSCODE;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_PROCESSCODE,                                  szProcessCode, &nSize));        memcpy(szTransType, szProcessCode, SIZE_TRANSTYPE);        if (strcmp(szMsgId, "0400") == 0)    {        if (strcmp(szTransType, "38") == 0)        {            strcpy(pszTransCode, AP_TRANSCODE_CS_AUTH);            return NORMAL;        }        else            strcpy(szMsgId, "0200");    }    n = 0;    while (transstru[n].pszMsgId != NULL)    {        if (strcmp(szMsgId, transstru[n].pszMsgId) == 0 &&            strcmp(szTransType, transstru[n].pszTransType) == 0)        {            strcpy(pszTransCode, transstru[n].pszTransCode);            return NORMAL;        }        n++;    }    return INVALID;}RESULT GetTransCode(PISO8583STRU piso8583stru, PSTR pszTransCode){    char szMsgId[SIZE_MSGID + 1];    char szProcessCode[SIZE_PROCESSCODE + 1];    char szTransType[SIZE_TRANSTYPE + 1];    UINT nSize, n;    bufclr(szMsgId);    bufclr(szProcessCode);    bufclr(szTransType);    nSize = SIZE_MSGID;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_MSGID, szMsgId, &nSize));    nSize = SIZE_PROCESSCODE;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_PROCESSCODE,                                  szProcessCode, &nSize));    memcpy(szTransType, szProcessCode, SIZE_TRANSTYPE);        if (strcmp(szMsgId, "0300") == 0)    {        strcpy(pszTransCode, TRANSCODE_UPLOAD);        return NORMAL;    }    n = 0;    while (transstru[n].pszMsgId != NULL)    {        if (strcmp(szMsgId, transstru[n].pszMsgId) == 0 &&            strcmp(szTransType, transstru[n].pszTransType) == 0)        {            strcpy(pszTransCode, transstru[n].pszTransCode);            return NORMAL;        }        n++;    }    return INVALID;}RESULT GetReqDateTime(PXMLSTRU pxmlstruReq){    TIMESTRU timestru;    char szReqDate[AP_LEN_DATE + 1];             char szReqTime[AP_LEN_TIME + 1];             bufclr(szReqDate);    bufclr(szReqTime);    timestru = GetTime();    sprintf(szReqTime, "%02d%02d%02d",            timestru.nHour, timestru.nMin, timestru.nSec);    sprintf(szReqDate, "%04d%02d%02d",            timestru.nYear, timestru.nMon, timestru.nDay);                            ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_REQDATE,szReqDate));    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_REQTIME,szReqTime));    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 szMerchId[SIZE_MERCHID + 1];    UINT nSize;    bufclr(szMerchId);    nSize = SIZE_MERCHID;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_MERCHID, szMerchId,                                   &nSize));    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_MERCHNO, szMerchId));    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 cPin[SIZE_PIN];    UINT nSize;    bufclr(szEntryMode);    bufclr(szAccPwd);    bufclr(szPan);    bufclr(cPin);        nSize = SIZE_ENTRYMODE;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_ENTRYMODE, szEntryMode,                                  &nSize));        if (szEntryMode[2] != '1')        return NORMAL;    nSize = SIZE_PIN;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_PIN, cPin, &nSize));    nSize = SIZE_PAN_MAX;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_PAN, szPan, &nSize));    ASSERT_NORMAL(Ansix98(cPin, szAccPwd, AP_LEN_ACCPWD, pcKey, szPan, FALSE));    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_ACCPWD, szAccPwd));    return NORMAL;}RESULT GetCurrType(PISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szFundType[SIZE_FUNDTYPE + 1];    UINT nSize;    bufclr(szFundType);        nSize = SIZE_FUNDTYPE;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_FUNDTYPE, szFundType,                                  &nSize));    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_CURRTYPE, szFundType));    return NORMAL;}RESULT GetAmt(PISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szAmt[AP_LEN_AMT + 1], szPosAmt[SIZE_AMT + 1];    UINT nSize;    bufclr(szAmt);    bufclr(szPosAmt);    nSize = SIZE_AMT;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_AMT, szPosAmt, &nSize));    sprintf(szAmt, "%19.2lf", atof(szPosAmt) / 100);    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_AMT, szAmt));    return NORMAL;}RESULT GetExpDate(PISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szTrack2[SIZE_TRACK2_MAX + 1];    char szExpDate[SIZE_EXPDATE + 1];    char szEntryMode[SIZE_ENTRYMODE + 1];    UINT nSize;    char *pcSign;    bufclr(szTrack2);    bufclr(szExpDate);    bufclr(szEntryMode);        nSize = SIZE_ENTRYMODE;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_ENTRYMODE, szEntryMode,                                  &nSize));    if (memcmp(szEntryMode, "01", 2) == 0)    {        nSize = SIZE_EXPDATE;        ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_EXPDATE, szExpDate,                                      &nSize));        if (strcmp(szExpDate, "0000") == 0)            strcpy(szExpDate, "9912");            ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_EXPDATE, szExpDate));        return NORMAL;    }    DETECT(memcmp(szEntryMode, "02", 2) == 0);            /*     * 按照联网联合关于磁条的规范,所有银行卡都必须使用第二磁道,所以     * 如果输入模式是刷卡,则必定包含第二磁道信息。     */         nSize = SIZE_TRACK2_MAX;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_TRACK2, szTrack2, &nSize));    DETECT_NULL(pcSign = strchr(szTrack2, 'D'));        memcpy(szExpDate, pcSign + 1, SIZE_EXPDATE);        if (!ApCsIsValidExpDate(szExpDate))        strcpy(szExpDate, "9912");        ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_EXPDATE, szExpDate));    return NORMAL;}RESULT GetTrack2(PISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szTrack2[SIZE_TRACK2_MAX + 1];    char szEntryMode[SIZE_ENTRYMODE + 1];    UINT n, nSize;        bufclr(szTrack2);    bufclr(szEntryMode);        nSize = SIZE_ENTRYMODE;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_ENTRYMODE, szEntryMode,                                  &nSize));    if (memcmp(szEntryMode, "01", 2) == 0)        return NORMAL;    DETECT(memcmp(szEntryMode, "02", 2) == 0);    nSize = SIZE_TRACK2_MAX;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_TRACK2, szTrack2, &nSize));    for (n = 0; n < nSize; n++)        if (szTrack2[n] == 'D')            szTrack2[n] = '=';    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_TRACK2, szTrack2));    return NORMAL;}RESULT GetTrack3(PISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szTrack3[SIZE_TRACK3_MAX + 1];    char szEntryMode[SIZE_ENTRYMODE + 1];    UINT n, nSize;    

⌨️ 快捷键说明

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