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

📄 agentauth.cpre

📁 商业银行前置系统
💻 CPRE
字号:
/* * This is a part of the Application Preconsole * - Service Provide - Internal Switch Interface. * Copyright (C) 2001-2001 ChenYu 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-10-09 ChenYu      - create implementation file for agent *                          authorization */#include "ap.h"EXEC SQL INCLUDE sqlca;EXEC SQL INCLUDE "isi.h";/* * Types and structures defined in this file */EXEC SQL BEGIN DECLARE SECTION;/* * 代授权登记表。 */typedef struct tagAGENTAUTHREGSTRU{    char szAccNo[AP_LEN_ACCNO + 1];     /* 卡号 */    char szDate[AP_LEN_DATE + 1];       /* 交易日期 */    int nTime;                          /* 交易次数 */    double dTotalAmt;                   /* 累计金额 */} AGENTAUTHREGSTRU;typedef AGENTAUTHREGSTRU *       PAGENTAUTHREGSTRU;typedef const AGENTAUTHREGSTRU   CAGENTAUTHREGSTRU;typedef const AGENTAUTHREGSTRU * PCAGENTAUTHREGSTRU;EXEC SQL END DECLARE SECTION ;#define GOLDCARD   'G'#define NORMALCARD 'N'#define RETURN_RESP(szRespCode) \    { \        AP_UPDATE(AP_PATH_RESPCODE, szRespCode); \        return; \    }#define ASSURE(b) \    { \        if (!VERIFY(b)) \            RETURN_RESP(AP_RESPCODE_SYSERR) \    }#define ASSURE_NORMAL(r) \    { \        RESULT rTemp; \        rTemp = (r); \        if (rTemp == EXCEPTION) \            AP_UPDATE(AP_PATH_RESPCODE, AP_RESPCODE_SYSERR); \        if (rTemp == INVALID) \            AP_UPDATE(AP_PATH_RESPCODE, AP_RESPCODE_LOGERR); \        if (!VERIFY_NORMAL(rTemp)) \            return; \    }/* * 检查信用卡是否可以联网交易。 */BOOL IsAgentAuth(PCXMLSTRU pxmlstruReq){    char szAgentAuth[1 + 1];    bufclr(szAgentAuth);    AP_DEMAND_CFG(PATH_AGENTAUTH, szAgentAuth);        return szAgentAuth[0] == 'Y';}/* * 产生授权号。 */void CreateAuthCode(PSTR pszAuthCode){    srand((UINT)time(NULL));    sprintf(pszAuthCode, "%06ld", (rand() * 97) % 1000000);} /* * 插入代授权交易到ISID表。 */RESULT RecordAgentAuthDetail(PCXMLSTRU pxmlstruReq, PCXMLSTRU pxmlstruResp){    EXEC SQL BEGIN DECLARE SECTION;    ISIDSTRU isidstru;    EXEC SQL END DECLARE SECTION;    char szMsgType[AP_LEN_MSGTYPE + 1];    char szReqDate[AP_LEN_DATE + 1];    char szAmt[AP_LEN_AMT + 1];     memset(&isidstru, 0, sizeof(ISIDSTRU));    bufclr(szReqDate);    bufclr(szAmt);    bufclr(szMsgType);    ASSERT_NORMAL(AP_DEMAND_EXT(AP_PATH_RESPSEQNO, isidstru.szRespSeqNo));    ASSERT_NORMAL(AP_DEMAND_EXT(AP_PATH_AUTHCODE, isidstru.szAuthResp));    ASSERT_NORMAL(AP_DEMAND(AP_PATH_MSGTYPE, szMsgType));    ASSERT_NORMAL(AP_DEMAND(AP_PATH_REQID, isidstru.szTermId));    ASSERT_NORMAL(AP_DEMAND(AP_PATH_ACCNO, isidstru.szPan));    ASSERT_NORMAL(AP_DEMAND(AP_PATH_SEQNO, isidstru.szSeqNo));    ASSERT_NORMAL(AP_DEMAND(AP_PATH_REQDATE, szReqDate));    ASSERT_NORMAL(AP_DEMAND(AP_PATH_REQTIME, isidstru.szLocalTransTime));    ASSERT_NORMAL(AP_DEMAND(AP_PATH_AMT, szAmt));    ASSERT_NORMAL(AP_DEMAND(AP_PATH_TRANSCODE, isidstru.szProcessCode));    sprintf(isidstru.szTransAmt, "%012.0lf", atof(szAmt) * 100.0);    strcpy(isidstru.szMsgId, "0150");       /* 0150 暂时表示代授权 */    if (strcmp(szMsgType, AP_MSGTYPE_CANCELREQ) == 0)        strcpy(isidstru.szMsgId, "0420");      strcat(isidstru.szProcessCode, "50");   /* xxxx50 暂时表示代授权 */        strcpy(isidstru.szTraceNo, "000000");    strcpy(isidstru.szSettleDate, "0000");    strcpy(isidstru.szAcqSettleDate, "0000");        strcpy(isidstru.szLocalTransDate, &szReqDate[4]);    strcpy(isidstru.szAcqId, "00000000000");    strcpy(isidstru.szForwardId, "00000000000");    strcpy(isidstru.szAddResp, "000000000000");    strcpy(isidstru.szRespCode, "00");    EXEC SQL INSERT INTO isid VALUES (:isidstru);       ASSERT_SQL_NORMAL();    return NORMAL;}void AgentAuth(PCXMLSTRU pxmlstruReq, PXMLSTRU pxmlstruResp){    EXEC SQL BEGIN DECLARE SECTION;    AGENTAUTHREGSTRU agentauthregstru;    char szAccNo[AP_LEN_ACCNO + 1];    char szTransCode[AP_LEN_TRANSCODE + 1];    char szMsgType[AP_LEN_MSGTYPE + 1];    char szAmt[AP_LEN_AMT + 1];    char szAuthCode[AP_LEN_AUTHCODE + 1];    char szCardType[1 + 1];    char szExpDate[AP_LEN_EXPDATE + 1];    char szReqDate[AP_LEN_DATE + 1];    double dTotalAmt, dAmt;    int nTime;    EXEC SQL END DECLARE SECTION;    char szYearMon[6 + 1];    TIMESTRU timestru;    bufclr(szAccNo);    bufclr(szTransCode);    bufclr(szMsgType);    bufclr(szAmt);    bufclr(szAuthCode);    bufclr(szCardType);    bufclr(szReqDate);    bufclr(szExpDate);    AP_UPDATE(AP_PATH_RESPCODE, AP_RESPCODE_SYS_INTERMIT);    ASSURE_NORMAL(AP_DEMAND(AP_PATH_ACCNO, szAccNo))    ASSURE_NORMAL(AP_DEMAND(AP_PATH_TRANSCODE, szTransCode))    ASSURE_NORMAL(AP_DEMAND(AP_PATH_MSGTYPE, szMsgType))    ASSURE_NORMAL(AP_DEMAND(AP_PATH_AMT, szAmt))    ASSURE_NORMAL(AP_DEMAND(AP_PATH_REQDATE, szReqDate))    ASSURE_NORMAL(AP_DEMAND(AP_PATH_EXPDATE, szExpDate))    if (strcmp(szTransCode, AP_TRANSCODE_CS_AUTHSETTLE) == 0)        RETURN_RESP(AP_RESPCODE_ACCEPT)    if (szAccNo[6] == '4' || szAccNo[6] == '5')        szCardType[0] = GOLDCARD;    else        szCardType[0] = NORMALCARD;    /*     * 检查交易代授权允许。     */    if (strcmp(szTransCode, AP_TRANSCODE_CS_CONSUME) != 0 &&        strcmp(szTransCode, AP_TRANSCODE_CS_AUTH) != 0 &&        strcmp(szTransCode, AP_TRANSCODE_CS_CANCEL) != 0)        RETURN_RESP(AP_RESPCODE_SYS_INTERMIT)    /*     * 有效期检查。     */    bufclr(szYearMon);    timestru = GetTime();    sprintf(szYearMon, "%04d%02d", timestru.nYear, timestru.nMon);    if (!ApCsIsValidExpDate(szExpDate) || strcmp(&szYearMon[2], szExpDate) > 0)        RETURN_RESP(AP_RESPCODE_CARD_EXPIRED)    /*     * 读帐户交易累计记录。     */    EXEC SQL SELECT time, totalamt INTO :nTime, :dTotalAmt FROM agentauthreg             WHERE accno = :szAccNo AND date = :szReqDate;                 if (sqlca.sqlcode == SQLCODE_NOTFOUND)    {        nTime = 0;        dTotalAmt = 0.0;    }    else         ASSURE(VERIFY_SQL_NORMAL())    dAmt = atof(szAmt);    if (strcmp(szTransCode, AP_TRANSCODE_CS_CANCEL) == 0)    {        if (strcmp(szMsgType, AP_MSGTYPE_CANCELREQ) == 0)        {            nTime++;            dTotalAmt += dAmt;        }        else        {            nTime--;            dTotalAmt -= dAmt;        }    }    else if (strcmp(szMsgType, AP_MSGTYPE_CANCELREQ) == 0)    {        nTime--;        dTotalAmt -= dAmt;    }    else    {        nTime++;        dTotalAmt += dAmt;        /*         * 代授权次数检查。         */            if (nTime > 3)            RETURN_RESP(AP_RESPCODE_AGENTAUTHTIME_OUTLMT)        /*         * 代授权金额检查。         */            if (!(szCardType[0] == GOLDCARD && dTotalAmt <= 5000 ) &&            !(szCardType[0] == NORMALCARD && dTotalAmt <= 3000))            RETURN_RESP(AP_RESPCODE_AMT_OUTLMT)        /*         * 产生代授权码。         */        CreateAuthCode(szAuthCode);        ASSURE_NORMAL(AP_INSERT(AP_PATH_AUTHCODE, szAuthCode))        ASSURE_NORMAL(RecordAgentAuthDetail(pxmlstruReq, pxmlstruResp))    }    /*     * 更新代授权登记表。     */    EXEC SQL UPDATE agentauthreg SET time = :nTime, totalamt = :dTotalAmt             WHERE accno = :szAccNo AND date = :szReqDate;    if (sqlca.sqlcode == SQLCODE_NOTFOUND)    {        memset(&agentauthregstru, 0, sizeof(AGENTAUTHREGSTRU));        strcpy(agentauthregstru.szAccNo, szAccNo);        strcpy(agentauthregstru.szDate, szReqDate);                agentauthregstru.nTime = nTime;        agentauthregstru.dTotalAmt = dTotalAmt;                EXEC SQL INSERT INTO agentauthreg VALUES(:agentauthregstru);            }    ASSURE(VERIFY_SQL_NORMAL())    AP_UPDATE(AP_PATH_RESPCODE, AP_RESPCODE_ACCEPT);}/* End of this file */

⌨️ 快捷键说明

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