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

📄 handle.cpre

📁 商业银行前置系统
💻 CPRE
📖 第 1 页 / 共 5 页
字号:
/* * 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-05 ChenYu       - create implementation file for *                           ISI handling * 2002-01-26 ChenYu       - update function RecordJournal for record *                           traceno, acqid, forwordid in isij */#include "ap.h"#include "apca.h"EXEC SQL INCLUDE sqlca;EXEC SQL INCLUDE "isi.h";RESULT RecordJournal(PCXMLSTRU pxmlstruReq, PCISO8583STRU piso8583stru){    UINT nSize;    EXEC SQL BEGIN DECLARE SECTION;    ISIJSTRU isijstru;    EXEC SQL END DECLARE SECTION;    memset(&isijstru, 0, sizeof(ISIJSTRU));    ASSERT_NORMAL(AP_DEMAND(AP_PATH_REQSEQNO, isijstru.szReqSeqNo));    ASSERT_NORMAL(AP_DEMAND(AP_PATH_ORGREQTYPE, isijstru.szOrgReqType));    ASSERT_NORMAL(AP_DEMAND(AP_PATH_SETTLEDATE, isijstru.szSettleDate));    ASSERT_NORMAL(AP_DEMAND(AP_PATH_AGENT, isijstru.szAgent));    nSize = SIZE_TRACENO;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_TRACENO,                                  isijstru.szTraceNo, &nSize));    nSize = SIZE_ACQID_MAX;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_ACQID,                                  isijstru.szAcqId, &nSize));    nSize = SIZE_FORWARDID_MAX;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_FORWARDID,                                  isijstru.szForwardId, &nSize));    EXEC SQL INSERT isij VALUES(:isijstru);    if (sqlca.sqlcode == SQLCODE_DUPKEY)        return NORMAL;    ASSERT_SQL_NORMAL();    return NORMAL;}/* * 取冲正标识。 */BOOL IsReverse(PISO8583STRU piso8583stru){    char szMsgId[SIZE_MSGID + 1];    UINT nSize = SIZE_MSGID;    bufclr(szMsgId);        GetBitInIso8583(piso8583stru, BIT_MSGID, szMsgId, &nSize);        return strcmp(szMsgId, "0420") == 0;}RESULT FillRespIso8583(PISO8583STRU piso8583stru, PCSTR pszRespCode){    char szMsgId[SIZE_MSGID + 1];    UINT nSize = SIZE_MSGID;    bufclr(szMsgId);    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_MSGID, szMsgId, &nSize));    szMsgId[2]++;    SetBitInIso8583(piso8583stru, BIT_MSGID, szMsgId, SIZE_MSGID);    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_RESPCODE, pszRespCode,                                   SIZE_RESPCODE));    return NORMAL;}/* * ASSURE_NORMAL宏用来确保在处理请求ISO8583报文时某些操作成功。 * 必须注意,该宏在检测到错误时把错误信息反映到报文中,而函数返回正常! * 另外,如果错误即非INVALID,也不是EXCEPTION,将保持当前的应答码 * 不变。 */#define ASSURE_NORMAL(r) \    { \        RESULT rTemp = (r); \        if (rTemp == EXCEPTION) \            VERIFY_NORMAL(FillRespIso8583(piso8583stru, "96")); \        if (rTemp == INVALID) \            VERIFY_NORMAL(FillRespIso8583(piso8583stru, "30")); \        if (rTemp == MACERR) \            VERIFY_NORMAL(FillRespIso8583(piso8583stru, "Z2")); \        if (!VERIFY_NORMAL(rTemp)) \        { \            SetBitInIso8583(piso8583stru, BIT_ENTRYMODE, NULL, 0); \            SetBitInIso8583(piso8583stru, BIT_PINCAPTURECODE, NULL, 0); \            SetBitInIso8583(piso8583stru, BIT_TRACK2, NULL, 0); \            SetBitInIso8583(piso8583stru, BIT_TRACK3, NULL, 0); \              SetBitInIso8583(piso8583stru, BIT_ACCEPTORNAME, NULL, 0); \            SetBitInIso8583(piso8583stru, BIT_PIN, NULL, 0); \            SetBitInIso8583(piso8583stru, BIT_ORGDATA, NULL, 0); \        \            if (nBit > 0) \                VERIFY_NORMAL(SetMac(piso8583stru, cTransMac, nBit)); \        \            DeleteXml(&xmlstruReq); \            DeleteXml(&xmlstruResp); \            return NORMAL; \        } \    }#define RETURN_RESULT(r) \    { \        DeleteXml(&xmlstruReq); \        DeleteXml(&xmlstruResp); \        return (r); \    }#define INSERT_MSGTYPE(IsReverse) \    AP_INSERT_EXT(AP_PATH_MSGTYPE, IsReverse ? \                  AP_MSGTYPE_CANCELREQ : AP_MSGTYPE_SUBMITREQ)/* * 查询帐户余额。 */ RESULT HandleQueryBal(PISO8583STRU piso8583stru){    UINT nBit = 0;        XMLSTRU xmlstruReq, xmlstruResp;    PXMLSTRU pxmlstruReq, pxmlstruResp;    pxmlstruReq = &xmlstruReq;    pxmlstruResp = &xmlstruResp;        memset(&xmlstruReq, 0, sizeof(xmlstruReq));    memset(&xmlstruResp, 0, sizeof(xmlstruResp));    ASSURE_NORMAL(CreateXml(&xmlstruReq, FALSE, AP_PATH_ROOT, NULL))    /*     * ISO8583->XML域转换。     */    ASSURE_NORMAL(AP_INSERT_EXT(AP_PATH_MSGTYPE, AP_MSGTYPE_SUBMITREQ))    ASSURE_NORMAL(AP_INSERT_EXT(AP_PATH_TRANSCODE, AP_TRANSCODE_CS_QUERYBAL))    ASSURE_NORMAL(AP_INSERT_EXT(AP_PATH_REQID, AP_REQID_ISI))    ASSURE_NORMAL(AP_INSERT_EXT(AP_PATH_TRACKVERIFY, "N"))    ASSURE_NORMAL(GetReqDate(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetReqTime(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetReqSeqNo(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetAccNo(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetAccPwd(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetCurrType(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetTrack2(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetTrack3(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetExpDate(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetMerchNo(piso8583stru, pxmlstruReq))        ASSURE_NORMAL(GetMerchType(piso8583stru, pxmlstruReq))        ASSURE_NORMAL(GetSettleDate(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetOrgReqType(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetAgent(piso8583stru, pxmlstruReq))    /*     * 向后台提交请求。     */    ASSURE_NORMAL(RecordJournal(&xmlstruReq, piso8583stru))    ASSURE_NORMAL(ApCaSubmit(&xmlstruReq, &xmlstruResp))    /*     * 清理废弃ISO8583域。     */    SetBitInIso8583(piso8583stru, BIT_ENTRYMODE, NULL, 0);    SetBitInIso8583(piso8583stru, BIT_PINCAPTURECODE, NULL, 0);        SetBitInIso8583(piso8583stru, BIT_TRACK2, NULL, 0);        SetBitInIso8583(piso8583stru, BIT_TRACK3, NULL, 0);        SetBitInIso8583(piso8583stru, BIT_ACCEPTORNAME, NULL, 0);        SetBitInIso8583(piso8583stru, BIT_PIN, NULL, 0);        /*     * XML->ISO8583域转换。     */    VERIFY_NORMAL(SetRespCode(pxmlstruResp, piso8583stru));    VERIFY_NORMAL(SetAddResp(pxmlstruResp, piso8583stru));        if (ApIsRespCode(&xmlstruResp, AP_RESPCODE_ACCEPT))    {        if (!VERIFY_NORMAL(SetAddAmt(pxmlstruResp, piso8583stru)) ||            !VERIFY_NORMAL(SetIdNo(pxmlstruResp, piso8583stru)))            RETURN_RESULT(EXCEPTION)    }    else if (ApIsRespCode(&xmlstruResp, AP_RESPCODE_EXCEPTION))        RETURN_RESULT(EXCEPTION)                RETURN_RESULT(NORMAL)}/* * 查询帐户状态。 */RESULT HandleQueryStatus(PISO8583STRU piso8583stru){    UINT nBit = 0;        XMLSTRU xmlstruReq, xmlstruResp;    PXMLSTRU pxmlstruReq, pxmlstruResp;    pxmlstruReq = &xmlstruReq;    pxmlstruResp = &xmlstruResp;    memset(&xmlstruReq, 0, sizeof(xmlstruReq));    memset(&xmlstruResp, 0, sizeof(xmlstruResp));                ASSURE_NORMAL(CreateXml(&xmlstruReq, FALSE, AP_PATH_ROOT, NULL))    /*     * ISO8583->XML域转换。     */    ASSURE_NORMAL(AP_INSERT_EXT(AP_PATH_MSGTYPE, AP_MSGTYPE_SUBMITREQ))    ASSURE_NORMAL(AP_INSERT_EXT(AP_PATH_TRANSCODE, AP_TRANSCODE_CS_QUERYSTATUS))    ASSURE_NORMAL(AP_INSERT_EXT(AP_PATH_REQID, AP_REQID_ISI))    ASSURE_NORMAL(AP_INSERT_EXT(AP_PATH_TRACKVERIFY, "Y"))        ASSURE_NORMAL(GetReqDate(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetReqTime(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetReqSeqNo(piso8583stru, pxmlstruReq))        ASSURE_NORMAL(GetAccNo(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetCurrType(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetTrack2(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetTrack3(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetExpDate(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetMerchNo(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetMerchType(piso8583stru, pxmlstruReq))        ASSURE_NORMAL(GetSettleDate(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetOrgReqType(piso8583stru, pxmlstruReq))    ASSURE_NORMAL(GetAgent(piso8583stru, pxmlstruReq))    /*     * 向后台提交请求。     */    ASSURE_NORMAL(RecordJournal(&xmlstruReq, piso8583stru))    ASSURE_NORMAL(ApCaSubmit(&xmlstruReq, &xmlstruResp))    SetBitInIso8583(piso8583stru, BIT_ENTRYMODE, NULL, 0);        SetBitInIso8583(piso8583stru, BIT_PINCAPTURECODE, NULL, 0);        SetBitInIso8583(piso8583stru, BIT_TRACK2, NULL, 0);        SetBitInIso8583(piso8583stru, BIT_TRACK3, NULL, 0);        SetBitInIso8583(piso8583stru, BIT_ACCEPTORNAME, NULL, 0);        /*     * XML->ISO8583域转换。     */    VERIFY_NORMAL(SetRespCode(pxmlstruResp, piso8583stru));    VERIFY_NORMAL(SetAddResp(pxmlstruResp, piso8583stru));        if (ApIsRespCode(&xmlstruResp, AP_RESPCODE_ACCEPT))    {        if (!VERIFY_NORMAL(SetAddAmt(&xmlstruResp, piso8583stru)) ||            !VERIFY_NORMAL(SetIdNo(pxmlstruResp, piso8583stru)))            RETURN_RESULT(EXCEPTION)    }    if (ApIsRespCode(&xmlstruResp, AP_RESPCODE_EXCEPTION))        RETURN_RESULT(EXCEPTION)    RETURN_RESULT(NORMAL)}/* * 消费。 */ RESULT GetConsume(PXMLSTRU pxmlstruReq, PCISO8583STRU piso8583stru,                   BOOL bIsReverse){      ASSERT_NORMAL(INSERT_MSGTYPE(bIsReverse));    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_TRANSCODE, AP_TRANSCODE_CS_CONSUME));    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_REQID, AP_REQID_ISI));    ASSERT_NORMAL(GetReqDate(piso8583stru, pxmlstruReq));    ASSERT_NORMAL(GetReqTime(piso8583stru, pxmlstruReq));    ASSERT_NORMAL(GetAccNo(piso8583stru, pxmlstruReq));    ASSERT_NORMAL(GetCurrType(piso8583stru, pxmlstruReq));    ASSERT_NORMAL(GetAmt(piso8583stru, pxmlstruReq));    ASSERT_NORMAL(GetFee(piso8583stru, pxmlstruReq));    ASSERT_NORMAL(GetMerchNo(piso8583stru, pxmlstruReq));        ASSERT_NORMAL(GetMerchType(piso8583stru, pxmlstruReq));        ASSERT_NORMAL(GetOrgReqType(piso8583stru, pxmlstruReq));    ASSERT_NORMAL(GetSettleDate(piso8583stru, pxmlstruReq));    ASSERT_NORMAL(GetAgent(piso8583stru, pxmlstruReq));    if (!bIsReverse)    {        ASSERT_NORMAL(GetReqSeqNo(piso8583stru, pxmlstruReq));        ASSERT_NORMAL(GetAccPwd(piso8583stru, pxmlstruReq));        ASSERT_NORMAL(GetTrack2(piso8583stru, pxmlstruReq));        ASSERT_NORMAL(GetTrack3(piso8583stru, pxmlstruReq));        ASSERT_NORMAL(GetExpDate(piso8583stru, pxmlstruReq));        ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_TRACKVERIFY, "Y"));    }    else    {        ASSERT_NORMAL(GetReqSeqNoInReverse(piso8583stru, pxmlstruReq));        ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_TRACKVERIFY, "N"));    }            return NORMAL;}RESULT SetConsume(PISO8583STRU piso8583stru, PCXMLSTRU pxmlstruResp,                   BOOL bIsReverse){        SetBitInIso8583(piso8583stru, BIT_ENTRYMODE, NULL, 0);        SetBitInIso8583(piso8583stru, BIT_PINCAPTURECODE, NULL, 0);        SetBitInIso8583(piso8583stru, BIT_TRACK2, NULL, 0);        SetBitInIso8583(piso8583stru, BIT_TRACK3, NULL, 0);        SetBitInIso8583(piso8583stru, BIT_ACCEPTORNAME, NULL, 0);        SetBitInIso8583(piso8583stru, BIT_PIN, NULL, 0);    SetBitInIso8583(piso8583stru, BIT_ORGDATA, NULL, 0);        ASSERT_NORMAL(SetRespCode(pxmlstruResp, piso8583stru));    ASSERT_NORMAL(SetAddResp(pxmlstruResp, piso8583stru));            if (!bIsReverse)    {           ASSERT_NORMAL(SetExpDate(pxmlstruResp, piso8583stru));        ASSERT_NORMAL(SetAuthResp(pxmlstruResp, piso8583stru));        ASSERT_NORMAL(SetAddAmt(pxmlstruResp, piso8583stru));    }    ASSERT_NORMAL(SetMac(piso8583stru, cTransMac,                         bIsReverse ? BIT_MAC128 : BIT_MAC64));    return NORMAL;}

⌨️ 快捷键说明

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