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

📄 converse.cpre

📁 商业银行前置系统
💻 CPRE
📖 第 1 页 / 共 2 页
字号:
/* * This is a part of the Application Preconsole * - Channel Access - 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-08-08 ChenYu        - converse for CA. */#include "ap.h"EXEC SQL INCLUDE sqlca;EXEC SQL INCLUDE "isi.h";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_ACCVOUCH_NOTEXIST  , "40"}, /* 请求的功能尚不支持 */    {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  , "75"}, /* 允许的输入PIN次数超限  */    {AP_RESPCODE_WITHDRAWTIME_OUTLMT, "65"}, /* 超出取款次数限制  */    {AP_RESPCODE_AMT_OUTLMT         , "61"}, /* 超出取款金额限制 */    {AP_RESPCODE_ORGTRANS_NOTEXIST  , "25"}, /* 未能找到文件上记录 */    {AP_RESPCODE_ORGTRANS_CANCELED  , "N8"}, /* 未能找到文件上记录 */    {NULL                           , NULL}};/* * 根据ISO8583报文产生XML报文的交易日期。 */RESULT GetReqDate(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szReqDate[AP_LEN_DATE + 1];    TIMESTRU timestru;    UINT nSize;    bufclr(szReqDate);    timestru = GetTime();    sprintf(szReqDate, "%04d", timestru.nYear);    nSize = SIZE_LOCALTRANSDATE;    if (GetBitInIso8583(piso8583stru, BIT_LOCALTRANSDATE, &szReqDate[4],                        &nSize) != NORMAL)    {        sprintf(&szReqDate[4], "%02d%02d", timestru.nMon, timestru.nDay);    }        ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_REQDATE, szReqDate));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的交易时间。 */RESULT GetReqTime(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szReqTime[AP_LEN_TIME + 1];    TIMESTRU timestru;    UINT nSize;    bufclr(szReqTime);    nSize = SIZE_LOCALTRANSTIME;    if (GetBitInIso8583(piso8583stru, BIT_LOCALTRANSTIME, szReqTime,                        &nSize) != NORMAL)    {        timestru = GetTime();        sprintf(szReqTime, "%02d%02d%02d",                timestru.nHour, timestru.nMin, timestru.nSec);    }        ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_REQTIME, szReqTime));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的请求流水号。 */RESULT GetReqSeqNo(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szTraceNo[SIZE_TRACENO + 1];    char szSettleDate[SIZE_SETTLEDATE + 1];    char szReqSeqNo[AP_LEN_SEQNO + 1];    UINT nSize;    bufclr(szTraceNo);    bufclr(szReqSeqNo);    bufclr(szSettleDate);    nSize = SIZE_TRACENO;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_TRACENO, szTraceNo,                                  &nSize));                                      nSize = SIZE_SETTLEDATE;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_SETTLEDATE, szSettleDate,                                  &nSize));        memcpy(&szReqSeqNo[0], "00", 2);    memcpy(&szReqSeqNo[2], szSettleDate, SIZE_SETTLEDATE);    memcpy(&szReqSeqNo[6], szTraceNo, SIZE_TRACENO);    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_REQSEQNO, szReqSeqNo));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的请求流水号(对帐请求报文专用)。 */RESULT GetReqSeqNoInSettle(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szTraceNo[SIZE_TRACENO + 1];    char szTransmissDateTime[SIZE_TRANSMISSDATETIME + 1];    char szReqSeqNo[AP_LEN_SEQNO + 1];    UINT nSize;    bufclr(szTraceNo);    bufclr(szReqSeqNo);    bufclr(szTransmissDateTime);    nSize = SIZE_TRACENO;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_TRACENO, szTraceNo,                                  &nSize));        nSize = SIZE_TRANSMISSDATETIME;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_TRANSMISSDATETIME,                                  szTransmissDateTime, &nSize));        memcpy(&szReqSeqNo[0], "00", 2);    memcpy(&szReqSeqNo[2], szTransmissDateTime, 4);    memcpy(&szReqSeqNo[6], szTraceNo, SIZE_TRACENO);    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_REQSEQNO, szReqSeqNo));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的帐号。 */RESULT GetAccNo(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szPan[SIZE_PAN_MAX + 1], *pszAccNo;    UINT nSize;    bufclr(szPan);    pszAccNo = szPan;    nSize = SIZE_PAN_MAX;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_PAN, szPan, &nSize));        while (*pszAccNo != 0 && *pszAccNo == '0')        ++pszAccNo;    if (!VERIFY(strlen(pszAccNo) >= 12))        return INVALID;    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_ACCNO, pszAccNo));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的密码(把ISO8583密码转为XML明文)。 */RESULT GetAccPwd(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szAccPwd[AP_LEN_ACCPWD + 1], szPan[SIZE_PAN_MAX + 1], *pszPan;    char szEntryMode[SIZE_ENTRYMODE + 1];    UCHAR cPin[SIZE_PIN], cPik[SIZE_KEY];    UINT nSize;    bufclr(szEntryMode);    bufclr(szAccPwd);    bufclr(szPan);    bufclr(cPik);    bufclr(cPin);    pszPan = szPan;    nSize = SIZE_ENTRYMODE;    if (!VERIFY_NORMAL(GetBitInIso8583(piso8583stru, BIT_ENTRYMODE, szEntryMode,				       &nSize)))        szEntryMode[2] = '1';    if (szEntryMode[2] == '2')        return NORMAL;    nSize = SIZE_PAN_MAX;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_PAN, szPan, &nSize));        while (*pszPan != 0 && *pszPan == '0')        ++pszPan;    if (!VERIFY(strlen(pszPan) >= 12))        return INVALID;    nSize = SIZE_PIN;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_PIN, cPin, &nSize));        ASSERT_NORMAL(GetKey("PIK", (PUCHAR)cPik, NULL));    ASSERT_NORMAL(Ansix98(cPin, szAccPwd, AP_LEN_ACCPWD, cPik, pszPan, FALSE));        ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_ACCPWD, szAccPwd));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的货币代码。 */RESULT GetCurrType(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szCurrCode[SIZE_CURRCODE + 1];    UINT nSize = SIZE_CURRCODE;    bufclr(szCurrCode);    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_CURRCODE, szCurrCode,                                  &nSize));        ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_CURRTYPE, szCurrCode));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的对帐货币代码。 */RESULT GetCurrTypeInSettle(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szSettleCurrCode[SIZE_SETTLECURRCODE + 1];    UINT nSize = SIZE_SETTLECURRCODE;    bufclr(szSettleCurrCode);    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_SETTLECURRCODE,                                   szSettleCurrCode, &nSize));        ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_CURRTYPE, szSettleCurrCode));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的第二磁道。 */RESULT GetTrack2(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szTrack2[SIZE_TRACK2_MAX + 1];    char szEntryMode[SIZE_ENTRYMODE + 1];    UINT nSize;    bufclr(szTrack2);    bufclr(szEntryMode);    nSize = SIZE_ENTRYMODE;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_ENTRYMODE, szEntryMode,                                  &nSize));        if (szEntryMode[1] == '1')        return NORMAL;    else    {        nSize = SIZE_TRACK2_MAX;        ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_TRACK2, szTrack2,                                      &nSize));                                              if (!VERIFY(nSize == SIZE_TRACK2_MAX))            return INVALID;    }        ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_TRACK2, szTrack2));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的第三磁道。 */RESULT GetTrack3(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szTrack3[SIZE_TRACK3_MAX + 1];    char szEntryMode[SIZE_ENTRYMODE + 1];    UINT nSize;    bufclr(szTrack3);    bufclr(szEntryMode);    nSize = SIZE_ENTRYMODE;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_ENTRYMODE, szEntryMode,                                  &nSize));        if (szEntryMode[1] == '1')        return NORMAL;    else    {        nSize = SIZE_TRACK3_MAX;        ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_TRACK3, szTrack3,                                      &nSize));                                              if (!VERIFY(nSize == SIZE_TRACK3_MAX))            return INVALID;    }        ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_TRACK3, szTrack3));    return NORMAL;}/* * 根据ISO8583报文的第二磁道产生XML报文的有效期段。 */RESULT GetExpDate(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szTrack2[SIZE_TRACK2_MAX + 1], szExpDate[AP_LEN_EXPDATE + 1];    char *pcSign;    UINT nSize = SIZE_TRACK2_MAX;    bufclr(szTrack2);    bufclr(szExpDate);    if (GetBitInIso8583(piso8583stru, BIT_TRACK2, szTrack2, &nSize) == NORMAL ||        (pcSign = strchr(szTrack2, '=')) != NULL)        memcpy(szExpDate, pcSign + 1, AP_LEN_EXPDATE);    if (!ApCsIsValidExpDate(szExpDate))        strcpy(szExpDate, "9912");    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_EXPDATE, szExpDate));    return NORMAL;}/* * 产生XML报文的商户代码。 */RESULT GetMerchNo(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szAcceptorId[SIZE_ACCEPTORID + 1];    UINT nSize = SIZE_ACCEPTORID;    bufclr(szAcceptorId);    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_ACCEPTORID, szAcceptorId,                                  &nSize));                                      ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_MERCHNO, szAcceptorId));    return NORMAL;}/* * 产生XML报文的商户类型。 */RESULT GetMerchType(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szMerchType[SIZE_MERCHTYPE + 1];    UINT nSize = SIZE_MERCHTYPE;    bufclr(szMerchType);    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_MERCHTYPE, szMerchType,                                  &nSize));        ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_MERCHTYPE, szMerchType));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的清算日期。 */RESULT GetSettleDate(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szSettleDate[AP_LEN_DATE + 1];    TIMESTRU timestru;    UINT nSize = SIZE_SETTLEDATE;    bufclr(szSettleDate);    timestru = GetTime();    sprintf(szSettleDate, "%04d", timestru.nYear);    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_SETTLEDATE,                                  &szSettleDate[4], &nSize));        ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_SETTLEDATE, szSettleDate));    return NORMAL;}/* * 根据ISO8583报文产生XML报文原请求类型。 */RESULT GetOrgReqType(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szOrgReqType[AP_LEN_REQTYPE + 1];    char szServiceCode[SIZE_SERVICECODE + 1];    UINT nSize;    bufclr(szOrgReqType);    bufclr(szServiceCode);    /*     * 注意:     * 服务限制码定义为:     * 测试环境:011-POS 001-ATM 101-TERM     * 生产环境:010-POS 000-ATM 100-TERM     */    nSize = SIZE_SERVICECODE;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_SERVICECODE,                                  szServiceCode, &nSize));        if (strcmp(szServiceCode, SERVICECODE_ATM) == 0)        strcpy(szOrgReqType, AP_REQTYPE_ATM);            else if (strcmp(szServiceCode, SERVICECODE_POS) == 0)        strcpy(szOrgReqType, AP_REQTYPE_POS);            else if (strcmp(szServiceCode, SERVICECODE_TERM) == 0)        strcpy(szOrgReqType, AP_REQTYPE_TERM);        else        ASSERT_NORMAL(INVALID);    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_ORGREQTYPE, szOrgReqType));    return NORMAL;}/* * 根据ISO8583对帐报文产生XML对帐报文帐户类型。 */RESULT GetAccTypeInSettle(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szAgent[1 + 1];    char szAccType[AP_LEN_ACCTYPE + 1];    char szServiceCode[SIZE_SERVICECODE + 1];    UINT nSize = SIZE_SERVICECODE;    bufclr(szServiceCode);    bufclr(szAgent);    bufclr(szAccType);    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_SERVICECODE,                                  szServiceCode, &nSize));    switch (szServiceCode[2])    {    case SETTLE_DEBITCARD:        strcpy(szAccType, AP_ACCTYPE_DEBITCARD);        strcpy(szAgent, "N");        break;            case SETTLE_CREDITCARD:

⌨️ 快捷键说明

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