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