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

📄 converse.cpre

📁 商业银行前置系统
💻 CPRE
📖 第 1 页 / 共 2 页
字号:
        strcpy(szAccType, AP_ACCTYPE_CREDITCARD);        strcpy(szAgent, "N");        break;            case SETTLE_OTHERCARD:        strcpy(szAccType, AP_ACCTYPE_OTHERCARD);        strcpy(szAgent, "Y");        break;            default:        ASSERT_NORMAL(INVALID);    }        ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_AGENT, szAgent));    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_ACCTYPE, szAccType));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的交易金额。 */RESULT GetAmt(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szTransAmt[SIZE_TRANSAMT + 1], szAmt[AP_LEN_AMT + 1];    UINT nSize = SIZE_TRANSAMT;    bufclr(szTransAmt);    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_TRANSAMT, szTransAmt,                                  &nSize));        bufclr(szAmt);    sprintf(szAmt, "%19.2lf", atof(szTransAmt) / 100.0);        ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_AMT, szAmt));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的手续费。 */RESULT GetFee(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szTransFee[SIZE_TRANSFEE + 1], szFee[AP_LEN_FEE + 1];    UINT nSize = SIZE_TRANSFEE;    double dFee;    bufclr(szTransFee);    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_TRANSFEE, szTransFee,                                  &nSize));                                      dFee = atof(&szTransFee[1]) / 100.0;        if (szFee[0] == 'D')        dFee *= -1.0;    bufclr(szFee);    sprintf(szFee, "%19.2lf", dFee);    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_FEE, szFee));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的原受理方流水号(冲正交易)。 */RESULT GetReqSeqNoInReverse(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    UINT nSize;    char szReqSeqNo[AP_LEN_SEQNO + 1];    char szOrgData[SIZE_ORGDATA + 1], szSettleDate[SIZE_SETTLEDATE + 1];    bufclr(szReqSeqNo);    bufclr(szOrgData);    bufclr(szSettleDate);    nSize = SIZE_ORGDATA;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_ORGDATA, szOrgData,                                  &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], &szOrgData[36], SIZE_TRACENO);    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_REQSEQNO, szReqSeqNo));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的原受理方流水号。 */RESULT GetOrgReqSeqNo(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    UINT nSize;    char szOrgReqSeqNo[AP_LEN_SEQNO + 1];    char szOrgData[SIZE_ORGDATA + 1], szSettleDate[SIZE_SETTLEDATE + 1];    bufclr(szOrgReqSeqNo);    bufclr(szOrgData);    bufclr(szSettleDate);    nSize = SIZE_ORGDATA;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_ORGDATA, szOrgData,                                  &nSize));    nSize = SIZE_SETTLEDATE;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_SETTLEDATE, szSettleDate,                                  &nSize));    memcpy(&szOrgReqSeqNo[0], "00", 2);    memcpy(&szOrgReqSeqNo[2], szSettleDate, SIZE_SETTLEDATE);    memcpy(&szOrgReqSeqNo[6], &szOrgData[36], SIZE_TRACENO);    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_ORGREQSEQNO, szOrgReqSeqNo));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的原响应流水号。 */RESULT GetOrgRespSeqNo(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    UINT nSize;    char szRespSeqNo[AP_LEN_SEQNO + 1];    bufclr(szRespSeqNo);    nSize = AP_LEN_SEQNO;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_ADDRESP, szRespSeqNo,                                  &nSize));    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_ORGRESPSEQNO, szRespSeqNo));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的新密码(把ISO8583密码转为XML明文)。 */RESULT GetAccNewPwd(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szAccNewPwd[AP_LEN_ACCPWD + 1];    char szPan[SIZE_PAN_MAX + 1];    UCHAR cNewPin[SIZE_PIN], cPik[SIZE_KEY];    UINT nSize;    bufclr(szAccNewPwd);    bufclr(szPan);    bufclr(cPik);    bufclr(cNewPin);    nSize = SIZE_PAN_MAX;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_PAN, szPan, &nSize));    nSize = SIZE_PIN;    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_NEWPIN, cNewPin, &nSize));    ASSERT_NORMAL(GetKey("PIK", (PUCHAR)cPik, NULL));        ASSERT_NORMAL(Ansix98(cNewPin, szAccNewPwd, AP_LEN_ACCPWD, cPik, szPan,                          FALSE));    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_ACCNEWPWD, szAccNewPwd));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的授权号。 */RESULT GetAuthCode(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szAuthResp[SIZE_AUTHRESP + 1];    UINT nSize = SIZE_AUTHRESP;    bufclr(szAuthResp);    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_AUTHRESP, szAuthResp,                                  &nSize));    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_AUTHCODE, szAuthResp));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的代理标识。 */RESULT GetAgent(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    char szAgent[1 + 1];    char szAcqId[SIZE_ACQID_MAX + 1];    UINT nSize = SIZE_ACQID_MAX;    bufclr(szAgent);    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_ACQID, szAcqId, &nSize));        if (memcmp(szAcqId, "639998", 6) == 0)        szAgent[0] = 'Y';    else        szAgent[0] = 'N';    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_AGENT, szAgent));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的证件名称、类别、帐户名。 */RESULT GetCertInfo(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruReq){    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, AP_LEN_CERTTYPE);    memcpy(szCertNo,  &szIdNo[1], AP_LEN_CERTNO);    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_CERTTYPE, szCertType));    ASSERT_NORMAL(AP_INSERT_EXT(AP_PATH_CERTNO, szCertNo));    return NORMAL;}/* * XML->ISO8583 *//* * 根据XML报文产生ISO8583有效期段。 */RESULT SetExpDate(PCXMLSTRU pxmlstruResp, PISO8583STRU piso8583stru){    char szExpDate[AP_LEN_EXPDATE + 1];    bufclr(szExpDate);    if (AP_DEMAND_EXT(AP_PATH_EXPDATE, szExpDate) != NORMAL ||        !ApCsIsValidExpDate(szExpDate))        strcpy(szExpDate, "9912");            ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_EXPDATE, szExpDate,                                  SIZE_EXPDATE));    return NORMAL;}/* * 产生ISO8583报文的应答码。 */RESULT SetRespCode(PCXMLSTRU pxmlstruResp, PISO8583STRU piso8583stru){    char szRespCode[AP_LEN_RESPCODE + 1];    UINT n = 0;    bufclr(szRespCode);    ASSERT_NORMAL(AP_DEMAND_EXT(AP_PATH_RESPCODE, szRespCode));    while (pszRespCode[n][0] != NULL)    {        if (strcmp(pszRespCode[n][0], szRespCode) == 0)        {            strcpy(szRespCode, pszRespCode[n][1]);            break;        }        n++;    }    if (pszRespCode[n][0] == NULL)        strcpy(szRespCode, "93");    ASSERT_NORMAL(FillRespIso8583(piso8583stru, szRespCode));    return NORMAL;}/* * 产生ISO8583报文的附加响应数据。 */RESULT SetAddResp(PCXMLSTRU pxmlstruResp, PISO8583STRU piso8583stru){    char szRespSeqNo[AP_LEN_SEQNO + 1];    bufclr(szRespSeqNo);    ASSERT_NORMAL(AP_DEMAND_EXT(AP_PATH_RESPSEQNO, szRespSeqNo));    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_ADDRESP, szRespSeqNo,                                  AP_LEN_SEQNO));    return NORMAL;}/* * 产生ISO8583报文的授权码。 */RESULT SetAuthResp(PCXMLSTRU pxmlstruResp, PISO8583STRU piso8583stru){    char szAuthCode[AP_LEN_AUTHCODE + 1];    bufclr(szAuthCode);    if (AP_DEMAND_EXT(AP_PATH_AUTHCODE, szAuthCode) != NORMAL)        strcpy(szAuthCode, "      ");            ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_AUTHRESP, szAuthCode,                                  SIZE_AUTHRESP));    return NORMAL;}/* * 产生ISO8583报文的实际余额。 */RESULT SetAddAmt(PCXMLSTRU pxmlstruResp, PISO8583STRU piso8583stru){    char szAccType[AP_LEN_ACCTYPE + 1];    char szCurrType[AP_LEN_CURRTYPE + 1];    char szBal[AP_LEN_BAL + 1], szAvailBal[AP_LEN_BAL + 1];    char szAddAmt[SIZE_ADDAMT_MAX + 1];    char *pcSign;    bufclr(szAccType);    bufclr(szCurrType);    bufclr(szBal);    bufclr(szAvailBal);    InitString(szAddAmt, '0', SIZE_ADDAMT_MAX);    if (!ApIsRespCode(pxmlstruResp, AP_RESPCODE_ACCEPT))    {        InitString(szAddAmt, ' ', SIZE_ADDAMT_MAX);        ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_ADDAMT, szAddAmt,                                      SIZE_ADDAMT_MAX));        return NORMAL;    }    ASSERT_NORMAL(AP_DEMAND_EXT(AP_PATH_ACCTYPE, szAccType));    ASSERT_NORMAL(AP_DEMAND_EXT(AP_PATH_CURRTYPE, szCurrType));    ASSERT_NORMAL(AP_DEMAND_EXT(AP_PATH_BAL, szBal));    ASSERT_NORMAL(AP_DEMAND_EXT(AP_PATH_AVAILBAL, szAvailBal));    /*     * 组装帐户类型。     */    if (strcmp(szAccType, AP_ACCTYPE_CREDITCARD) == 0 ||        strcmp(szAccType, AP_ACCTYPE_LOANCARD) == 0)    {        memcpy(szAddAmt, "30", 2);        memcpy(&szAddAmt[20], "30", 2);    }    else    {        memcpy(szAddAmt, "10", 2);        memcpy(&szAddAmt[20], "10", 2);    }    /*     * 组装数量类型。     */    memcpy(&szAddAmt[2], "01", 2);    memcpy(&szAddAmt[22], "02", 2);    /*     * 组装货币代码。     */    memcpy(&szAddAmt[4], szCurrType, 3);    memcpy(&szAddAmt[24], szCurrType, 3);    /*     * 组装余额符号。     */    if ((pcSign = strchr(szBal, '-')) != NULL)    {        *pcSign = '0';        szAddAmt[7] = 'D';    }    else        szAddAmt[7] = 'C';    if ((pcSign = strchr(szAvailBal, '-')) != NULL)    {        *pcSign = '0';        szAddAmt[27] = 'D';    }    else        szAddAmt[27] = 'C';    sprintf(szBal, "%012.0lf", atof(szBal) * 100.0);    memcpy(&szAddAmt[8], szBal, 12);    sprintf(szAvailBal,"%012.0lf", atof(szAvailBal) * 100.0);    memcpy(&szAddAmt[28], szAvailBal, 12);    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_ADDAMT, szAddAmt,                                  SIZE_ADDAMT_MAX));    return NORMAL;}/* * 产生ISO8583报文的对帐结果码。 */RESULT SetSettleCode(PCXMLSTRU pxmlstruResp, PISO8583STRU piso8583stru){    char szSettleCode[SIZE_SETTLECODE + 1];    bufclr(szSettleCode);    if (ApIsRespCode(pxmlstruResp, AP_RESPCODE_ACCEPT))        szSettleCode[0] = '1';            else if (ApIsRespCode(pxmlstruResp, AP_RESPCODE_SETTLE_NOTEQUAL))        szSettleCode[0] = '2';            else        szSettleCode[0] = '3';    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_SETTLECODE, szSettleCode,                                  SIZE_SETTLECODE));    return NORMAL;}/* * 产生ISO8583报文的证件号码。即便无法从应答XML中查找到所需的域值,也必须给 * 交换中心返回合法的证件号码域。 */RESULT SetIdNo(PCXMLSTRU pxmlstruResp, PISO8583STRU piso8583stru){    char szCertType[AP_LEN_CERTTYPE + 1], szCertNo[AP_LEN_CERTNO + 1];    char szAccName[AP_LEN_ACCNAME + 1];    char szIdNo[SIZE_IDNO_MAX + 1];    UINT nLen;    bufclr(szCertType);    bufclr(szCertNo);    bufclr(szAccName);        InitString(szIdNo, ' ', SIZE_IDNO_MAX);    if (AP_DEMAND_EXT(AP_PATH_CERTTYPE, szCertType) == NORMAL)        memcpy(szIdNo, szCertType, strlen(szCertType));            if (AP_DEMAND_EXT(AP_PATH_CERTNO, szCertNo) == NORMAL)        memcpy(&szIdNo[1], szCertNo, strlen(szCertNo));            if (AP_DEMAND_EXT(AP_PATH_ACCNAME, szAccName) == NORMAL)    {        nLen = strlen(szAccName);        memcpy(&szIdNo[21], szAccName, min(20, nLen));    }    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_IDNO, szIdNo,                                  SIZE_IDNO_MAX));    return NORMAL;}/* End of this file */

⌨️ 快捷键说明

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