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

📄 converse.cpre

📁 商业银行前置系统
💻 CPRE
📖 第 1 页 / 共 3 页
字号:
    return NORMAL;}/* * 根据ISO8583报文产生XML报文的帐面余额。 */  RESULT SetBal(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruResp){    char szBal[AP_LEN_BAL + 1];    char szAddAmt[SIZE_ADDAMT_MAX + 1];    UINT nSize = SIZE_ADDAMT_MAX;        bufclr(szAddAmt);    bufclr(szBal);    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_ADDAMT, szAddAmt, &nSize));    memcpy(szBal, &szAddAmt[8], 12);    sprintf(szBal, "%19.2lf",            atof(szBal) / 100.0 * (szAddAmt[7] == 'D' ? -1.0 : 1.0));    ASSERT_NORMAL(AP_INSERT(AP_PATH_BAL, szBal));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的有效期段。 */RESULT SetExpDate(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruResp){    char szExpDate[SIZE_EXPDATE + 1];    UINT nSize = SIZE_EXPDATE;        bufclr(szExpDate);    if (GetBitInIso8583(piso8583stru, BIT_EXPDATE, szExpDate, &nSize) != NORMAL)        strcpy(szExpDate, "9912");            ASSERT_NORMAL(AP_INSERT(AP_PATH_EXPDATE, szExpDate));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的交易响应代码。 */ RESULT SetRespCode(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruResp){    UINT n = 0, nSize;    char szRespCode[SIZE_RESPCODE + 1];    bufclr(szRespCode);    nSize = SIZE_RESPCODE;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_RESPCODE, szRespCode,                                  &nSize));    while (pszRespCode[n][0] != NULL)    {        if (strcmp(szRespCode, pszRespCode[n][0]) == 0)        {            ASSERT_NORMAL(AP_UPDATE(AP_PATH_RESPCODE, pszRespCode[n][1]));            return NORMAL;        }        n++;    }    ASSERT_NORMAL(AP_UPDATE(AP_PATH_RESPCODE, AP_RESPCODE_REJECT));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的授权号。 */ RESULT SetAuthCode(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruResp){    char szAuthResp[SIZE_AUTHRESP + 1];    UINT nSize = SIZE_AUTHRESP;        bufclr(szAuthResp);        ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_AUTHRESP, szAuthResp,                                  &nSize));    ASSERT_NORMAL(AP_INSERT(AP_PATH_AUTHCODE, szAuthResp));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的手续费。 */ RESULT SetFee(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruResp){    char szFee[AP_LEN_FEE + 1];    UINT nSize = SIZE_TRANSFEE;    double dFee;        bufclr(szFee);        ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_TRANSFEE, szFee, &nSize));    dFee = atof(&szFee[1]) / 100.00;        if (szFee[0] == 'D')        dFee *= -1.00;            sprintf(szFee, "%19.2lf", dFee);        ASSERT_NORMAL(AP_INSERT(AP_PATH_FEE, szFee));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的清算日期。 */ RESULT SetSettleDate(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruResp){    char szSettleDate[AP_LEN_DATE + 1];    TIMESTRU timestru;    UINT nSize = SIZE_SETTLEDATE;        timestru = GetTime();    bufclr(szSettleDate);        sprintf(szSettleDate, "%04d", timestru.nYear);     ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_SETTLEDATE,                                  &szSettleDate[4], &nSize));    ASSERT_NORMAL(AP_INSERT(AP_PATH_SETTLEDATE, szSettleDate));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的证件名称、类别、帐户名。 */ RESULT SetCertInfo(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruResp){    char szCertType[AP_LEN_CERTTYPE + 1], szCertNo[AP_LEN_CERTNO + 1];    char szIdNo[SIZE_IDNO_MAX + 1];    UINT nSize = SIZE_IDNO_MAX;        bufclr(szCertType);    bufclr(szCertNo);    bufclr(szIdNo);        ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_IDNO, szIdNo, &nSize));        memcpy(szCertType, szIdNo, 1);    memcpy(szCertNo,  &szIdNo[1], AP_LEN_CERTNO);        ASSERT_NORMAL(AP_INSERT(AP_PATH_CERTTYPE, szCertType));    ASSERT_NORMAL(AP_INSERT(AP_PATH_CERTNO, szCertNo));    return NORMAL;}RESULT SetAccName(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruResp){    char szAccName[AP_LEN_ACCNAME + 1];    char szIdNo[SIZE_IDNO_MAX + 1];    UINT nSize = SIZE_IDNO_MAX;        bufclr(szAccName);    bufclr(szIdNo);        ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_IDNO, szIdNo, &nSize));        memcpy(szAccName, &szIdNo[21], 20);    ASSERT_NORMAL(AP_INSERT(AP_PATH_ACCNAME, szAccName));        return NORMAL;}/* * 根据ISO8583报文产生XML报文的货币代码。 */RESULT SetCurrType(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruResp){    char szCurrCode[SIZE_CURRCODE + 1];    UINT nSize = SIZE_CURRCODE;        bufclr(szCurrCode);        ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_CURRCODE, szCurrCode, &nSize));        ASSERT_NORMAL(AP_INSERT(AP_PATH_CURRTYPE, szCurrCode));    return NORMAL;}/* * 登记ISID交易明细。 */RESULT RecordDetail(PCISO8583STRU piso8583stru, PCSTR pszRespSeqNo,                    PCSTR pszSeqNo){    EXEC SQL BEGIN DECLARE SECTION ;    ISIDSTRU isidstru;    EXEC SQL END DECLARE SECTION ;    UINT nSize;    memset(&isidstru, 0, sizeof(ISIDSTRU));        strcpy(isidstru.szRespSeqNo, pszRespSeqNo);    strcpy(isidstru.szSeqNo, pszSeqNo);    nSize = SIZE_MSGID;    GetBitInIso8583(piso8583stru, BIT_MSGID, isidstru.szMsgId, &nSize);        nSize = SIZE_PROCESSCODE;    GetBitInIso8583(piso8583stru, BIT_PROCESSCODE, isidstru.szProcessCode,                    &nSize);        nSize = SIZE_ACQSETTLEDATE;    GetBitInIso8583(piso8583stru, BIT_ACQSETTLEDATE, isidstru.szAcqSettleDate,                    &nSize);        nSize = SIZE_LOCALTRANSTIME;    GetBitInIso8583(piso8583stru, BIT_LOCALTRANSTIME,                    isidstru.szLocalTransTime, &nSize);        nSize = SIZE_LOCALTRANSDATE;    GetBitInIso8583(piso8583stru, BIT_LOCALTRANSDATE,                    isidstru.szLocalTransDate, &nSize);        nSize = SIZE_ACQID_MAX;    GetBitInIso8583(piso8583stru, BIT_ACQID, isidstru.szAcqId, &nSize);        nSize = SIZE_FORWARDID_MAX;    GetBitInIso8583(piso8583stru, BIT_FORWARDID, isidstru.szForwardId, &nSize);        nSize = SIZE_PAN_MAX;    GetBitInIso8583(piso8583stru, BIT_PAN, isidstru.szPan, &nSize);        nSize = SIZE_TRANSAMT;    GetBitInIso8583(piso8583stru, BIT_TRANSAMT, isidstru.szTransAmt, &nSize);        nSize = SIZE_TRANSFEE;    if (GetBitInIso8583(piso8583stru, BIT_TRANSFEE, isidstru.szTransFee,                        &nSize) != NORMAL)        strcpy(isidstru.szTransFee, "C00000000");    nSize = SIZE_MERCHTYPE;    GetBitInIso8583(piso8583stru, BIT_MERCHTYPE, isidstru.szMerchType, &nSize);    nSize = SIZE_ENTRYMODE;    GetBitInIso8583(piso8583stru, BIT_ENTRYMODE, isidstru.szEntryMode, &nSize);    nSize = SIZE_CONDITIONCODE;    GetBitInIso8583(piso8583stru, BIT_CONDITIONCODE, isidstru.szConditionCode,                    &nSize);                        nSize = SIZE_SERVICECODE;    GetBitInIso8583(piso8583stru, BIT_SERVICECODE, isidstru.szServiceCode,                     &nSize);        nSize = SIZE_TERMID;    GetBitInIso8583(piso8583stru, BIT_TERMID, isidstru.szTermId, &nSize);        nSize = SIZE_ACCEPTORID;    GetBitInIso8583(piso8583stru, BIT_ACCEPTORID, isidstru.szAcceptorId,                    &nSize);                        nSize = SIZE_ACCEPTORNAME;    GetBitInIso8583(piso8583stru, BIT_ACCEPTORNAME, isidstru.szAcceptorName,                    &nSize);        nSize = SIZE_CURRCODE;    GetBitInIso8583(piso8583stru, BIT_CURRCODE, isidstru.szCurrCode, &nSize);    EXEC SQL INSERT INTO isid VALUES (:isidstru);    ASSERT_SQL_NORMAL();    return NORMAL;}/* * 根据应答报文修改ISID交易明细。 */RESULT UpdateDetail(PCISO8583STRU piso8583stru, PCSTR pszSeqNo){    EXEC SQL BEGIN DECLARE SECTION ;    char szTraceNo[SIZE_TRACENO + 1];    char szTransFee[SIZE_TRANSFEE + 1];    char szSettleDate[SIZE_SETTLEDATE + 1];    char szForwardId[SIZE_FORWARDID_MAX + 1];    char szAddResp[SIZE_ADDRESP_MAX + 1];    char szAuthResp[SIZE_AUTHRESP + 1];    char szRespCode[SIZE_RESPCODE + 1];    char szSeqNo[AP_LEN_SEQNO + 1];    EXEC SQL END DECLARE SECTION ;    UINT nSize;        bufclr(szTraceNo);    bufclr(szTransFee);    bufclr(szSettleDate);    bufclr(szForwardId);    bufclr(szAddResp);    bufclr(szAuthResp);    bufclr(szRespCode);    bufclr(szSeqNo);    strcpy(szSeqNo, pszSeqNo);        nSize = SIZE_TRACENO;    GetBitInIso8583(piso8583stru, BIT_TRACENO, szTraceNo, &nSize);    nSize = SIZE_SETTLEDATE;    GetBitInIso8583(piso8583stru, BIT_SETTLEDATE, szSettleDate, &nSize);        nSize = SIZE_TRANSFEE;    GetBitInIso8583(piso8583stru, BIT_TRANSFEE, szTransFee, &nSize);    nSize = SIZE_FORWARDID_MAX;    GetBitInIso8583(piso8583stru, BIT_FORWARDID, szForwardId, &nSize);        nSize = SIZE_ADDRESP_MAX;    GetBitInIso8583(piso8583stru, BIT_ADDRESP, szAddResp, &nSize);        nSize = SIZE_AUTHRESP;    GetBitInIso8583(piso8583stru, BIT_AUTHRESP, szAuthResp, &nSize);        nSize = SIZE_RESPCODE;    GetBitInIso8583(piso8583stru, BIT_RESPCODE, szRespCode, &nSize);    EXEC SQL UPDATE isid             SET traceno = :szTraceNo, settledate = :szSettleDate,                 transfee = :szTransFee, forwardid = :szForwardId,                 addresp = :szAddResp, authresp = :szAuthResp,                 respcode = :szRespCode             WHERE seqno = :szSeqNo;    ASSERT_SQL_NORMAL();    return NORMAL;}/* * XML->ISO8583转换函数。 *//* * 产生ISO8583报文的帐号。 */ RESULT GetPan(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){    char szAccNo[AP_LEN_ACCNO + 1], szTmpAccNo[AP_LEN_ACCNO + 1];    char szPan[SIZE_PAN_MAX + 1];    UINT nLen;    bufclr(szAccNo);     bufclr(szTmpAccNo);         InitString(szPan, '0', SIZE_PAN_MAX);              ASSERT_NORMAL(AP_DEMAND(AP_PATH_ACCNO, szAccNo));    TrimString(szAccNo);    nLen = strlen(szAccNo);        if (nLen == 16 &&         (memcmp(szAccNo, "53591", 5) == 0 ||         memcmp(szAccNo, "49102", 5) == 0))    {        strcpy(szTmpAccNo, "63");        strcat(szTmpAccNo, szAccNo);                nLen += 2;    }    else        strcpy(szTmpAccNo, szAccNo);            memcpy(&szPan[SIZE_PAN_MAX - nLen], szTmpAccNo, nLen);    #ifdef TEST    memcpy(szPan, "1030004999999999", 16);#endif    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_PAN, szPan, SIZE_PAN_MAX));    return NORMAL;}/* * 产生ISO8583报文的交易金额。 */  RESULT GetTransAmt(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){    char szAmt[AP_LEN_AMT + 1];        bufclr(szAmt);    ASSERT_NORMAL(AP_DEMAND(AP_PATH_AMT, szAmt));    sprintf(szAmt, "%012.0lf", atof(szAmt) * 100.0);    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_TRANSAMT, szAmt,                                  SIZE_TRANSAMT));    return NORMAL;}/* * 产生ISO8583报文的授权码。 */  RESULT GetAuthResp(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){    char szAuthCode[AP_LEN_AUTHCODE + 1];        bufclr(szAuthCode);    ASSERT_NORMAL(AP_DEMAND(AP_PATH_AUTHCODE, szAuthCode));    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_AUTHRESP, szAuthCode,                                  SIZE_AUTHRESP));    return NORMAL;}/* * 产生ISO8583报文的交易传输时间。 */ RESULT GetTransmissDateTime(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){    char szTransmissDateTime[SIZE_TRANSMISSDATETIME + 1];    char szReqDate[AP_LEN_DATE + 1], szReqTime[AP_LEN_TIME + 1];    bufclr(szReqDate);    bufclr(szReqTime);    bufclr(szTransmissDateTime);        ASSERT_NORMAL(AP_DEMAND(AP_PATH_REQDATE, szReqDate));    ASSERT_NORMAL(AP_DEMAND(AP_PATH_REQTIME, szReqTime));    memcpy(szTransmissDateTime, &szReqDate[4], 4);    memcpy(&szTransmissDateTime[4], szReqTime, 6);         ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_TRANSMISSDATETIME,                                  szTransmissDateTime, SIZE_TRANSMISSDATETIME));    return NORMAL;}/* * 产生ISO8583报文的受理方所在地时间。 */ RESULT GetLocalTransTime(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){    char szReqTime[AP_LEN_TIME + 1];        bufclr(szReqTime);        ASSERT_NORMAL(AP_DEMAND(AP_PATH_REQTIME, szReqTime));            ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_LOCALTRANSTIME, szReqTime,                                  SIZE_LOCALTRANSTIME));    return NORMAL;}/* * 产生ISO8583报文的受理方所在地日期。 */ RESULT GetLocalTransDate(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){    char szReqDate[AP_LEN_DATE + 1];    bufclr(szReqDate);    ASSERT_NORMAL(AP_DEMAND(AP_PATH_REQDATE, szReqDate));        ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_LOCALTRANSDATE,                                  &szReqDate[4], SIZE_LOCALTRANSDATE));    return NORMAL;}/* * 产生ISO8583报文的代理结算日期。 */ RESULT GetAcqSettleDate(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){    TIMESTRU timestru;    char szAcqSettleDate[SIZE_ACQSETTLEDATE + 1];        bufclr(szAcqSettleDate);        timestru = GetTime();    sprintf(szAcqSettleDate, "%02d%02d", timestru.nMon, timestru.nDay);        ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_ACQSETTLEDATE,                                  szAcqSettleDate, SIZE_ACQSETTLEDATE));    return NORMAL;}/* * 产生ISO8583报文的商户类型。 */ RESULT GetMerchType(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){    char szMerchType[AP_LEN_MERCHTYPE + 1];    char szReqType[AP_LEN_REQTYPE + 1];        bufclr(szMerchType);    bufclr(szReqType);

⌨️ 快捷键说明

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