📄 converse.cpre
字号:
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 + -