📄 converse.cpre
字号:
if (AP_DEMAND(AP_PATH_MERCHTYPE, szMerchType) != NORMAL) { ASSERT_NORMAL(AP_DEMAND(AP_PATH_REQTYPE, szReqType)); if (strcmp(szReqType, AP_REQTYPE_DSI) == 0) ASSERT_NORMAL(AP_DEMAND(AP_PATH_ORGREQTYPE, szReqType)); if (strcmp(szReqType, AP_REQTYPE_TERM) == 0) strcpy(szMerchType, "6010"); else if (strcmp(szReqType, AP_REQTYPE_ATM) == 0) strcpy(szMerchType, "6011"); else ASSERT_NORMAL(INVALID); } ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_MERCHTYPE, szMerchType, SIZE_MERCHTYPE)); return NORMAL;}/* * 产生ISO8583报文的服务点输入方式。 */ RESULT GetEntryMode(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){ char szEntryMode[SIZE_ENTRYMODE + 1]; char szTrackVerify[1 + 1]; char szAccPwd[AP_LEN_ACCPWD + 1]; bufclr(szEntryMode); bufclr(szTrackVerify); if (AP_DEMAND(AP_PATH_TRACKVERIFY, szTrackVerify) != NORMAL) szTrackVerify[0] = 'N'; if (szTrackVerify[0] == 'Y') memcpy(szEntryMode, "02", 2); else memcpy(szEntryMode, "01", 2); if (AP_DEMAND(AP_PATH_ACCPWD, szAccPwd) == NORMAL) memcpy(&szEntryMode[2], "1", 1); else memcpy(&szEntryMode[2], "2", 1); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_ENTRYMODE, szEntryMode, SIZE_ENTRYMODE)); return NORMAL;}/* * 产生ISO8583报文的服务点条件码。 */ RESULT GetConditionCode(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){ char szConditionCode[SIZE_CONDITIONCODE + 1]; char szTransCode[AP_LEN_TRANSCODE + 1]; char szReqType[AP_LEN_REQTYPE + 1]; bufclr(szTransCode); bufclr(szReqType); bufclr(szConditionCode); ASSERT_NORMAL(AP_DEMAND(AP_PATH_REQTYPE, szReqType)); if (strcmp(szReqType, AP_REQTYPE_DSI) == 0) ASSERT_NORMAL(AP_DEMAND(AP_PATH_ORGREQTYPE, szReqType)); ASSERT_NORMAL(AP_DEMAND(AP_PATH_TRANSCODE, szTransCode)); if (strcmp(szTransCode, AP_TRANSCODE_CS_CANCEL) == 0) ASSERT_NORMAL(AP_DEMAND(AP_PATH_ORGTRANSCODE, szTransCode)); if (strcmp(szReqType, AP_REQTYPE_ATM) == 0) strcpy(szConditionCode, "02"); else if (strcmp(szTransCode, AP_TRANSCODE_CS_AUTH) == 0 || strcmp(szTransCode, AP_TRANSCODE_CS_AUTHSETTLE) == 0) strcpy(szConditionCode, "06"); else strcpy(szConditionCode, "00"); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_CONDITIONCODE, szConditionCode, SIZE_CONDITIONCODE)); return NORMAL;}/* * 产生ISO8583报文的接受PIN最大长度。 */ RESULT GetPinCaptureCode(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){ ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_PINCAPTURECODE, "06", SIZE_PINCAPTURECODE)); return NORMAL;}/* * 产生ISO8583报文的手续费。 */ RESULT GetTransFee(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){ char szFee[AP_LEN_FEE + 1]; double dFee; bufclr(szFee); if (AP_DEMAND(AP_PATH_FEE, szFee) != NORMAL) dFee = 0.0; else dFee = atof(szFee) * 100.0; szFee[0] = 'C'; sprintf(&szFee[1], "%08.0lf", dFee); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_TRANSFEE, szFee, SIZE_TRANSFEE)); return NORMAL;}/* * 产生ISO8583报文的受理方机构标识。 */RESULT GetAcqId(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){ char szAcqId[SIZE_ACQID_MAX + 1]; char szSettleNo[LEN_SETTLENO + 1]; char szBankNo[LEN_BANKNO + 1]; ASSERT_NORMAL(AP_DEMAND_CFG(PATH_SETTLENO, szSettleNo)); ASSERT_NORMAL(AP_DEMAND_CFG(PATH_BANKNO, szBankNo)); bufclr(szAcqId); sprintf(szAcqId, "63%4.4s%5.5s", szSettleNo, szBankNo); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_ACQID, szAcqId, SIZE_ACQID_MAX)); return NORMAL;}/* * 产生ISO8583报文的发卡方机构代码。 */ RESULT GetForwardId(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){ ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_FORWARDID, "63000000000", SIZE_FORWARDID_MAX)); return NORMAL;}/* * 产生ISO8583报文的第二磁道。 */RESULT GetTrack2(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){ char szTrack2[AP_LEN_TRACK2 + 1]; char szTrackVerify[1 + 1]; bufclr(szTrack2); bufclr(szTrackVerify); AP_DEMAND(AP_PATH_TRACKVERIFY, szTrackVerify); if (szTrackVerify[0] == 'Y') ASSERT_NORMAL(AP_DEMAND(AP_PATH_TRACK2, szTrack2)); else InitString(szTrack2, '0', AP_LEN_TRACK2); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_TRACK2, szTrack2, strlen(szTrack2))); return NORMAL;}/* * 产生ISO8583报文的第三磁道。 */RESULT GetTrack3(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){ char szTrack3[AP_LEN_TRACK3 + 1]; char szTrackVerify[1 + 1]; bufclr(szTrack3); bufclr(szTrackVerify); AP_DEMAND(AP_PATH_TRACKVERIFY, szTrackVerify); if (szTrackVerify[0] == 'Y') ASSERT_NORMAL(AP_DEMAND(AP_PATH_TRACK3, szTrack3)); else InitString(szTrack3, '0', AP_LEN_TRACK3); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_TRACK3, szTrack3, strlen(szTrack3))); return NORMAL;}/* * 产生ISO8583报文的受理方流水号。 */RESULT GetRetrievalRefNo(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){ char szSeqNo[AP_LEN_SEQNO + 1]; bufclr(szSeqNo); ASSERT_NORMAL(AP_DEMAND(AP_PATH_SEQNO, szSeqNo)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_RETRIEVALREFNO, szSeqNo, SIZE_RETRIEVALREFNO)); return NORMAL;}/* * 产生ISO8583报文的服务限制码。 */ RESULT GetServiceCode(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){ char szReqType[AP_LEN_REQTYPE + 1]; char szServiceCode[SIZE_SERVICECODE + 1]; bufclr(szReqType); bufclr(szServiceCode); /* * 注意服务限制码定义为: * 测试环境:011-POS 001-ATM 101-TERM * 生产环境:010-POS 000-ATM 100-TERM */ if (IsManualAuth(pxmlstruReq)) { ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_SERVICECODE, SERVICECODE_POS, SIZE_SERVICECODE)); return NORMAL; } ASSERT_NORMAL(AP_DEMAND(AP_PATH_REQTYPE, szReqType)); /* * 根据请求类型填写ISO8584的40域,如果请求来至区域中心,只能根据交易码进行 * 区分,如果为撤消交易,必须根据原交易码。 */ if (strcmp(szReqType, AP_REQTYPE_DSI) == 0) { char szTransCode[AP_LEN_TRANSCODE + 1]; bufclr(szTransCode); ASSERT_NORMAL(AP_DEMAND(AP_PATH_TRANSCODE, szTransCode)); if (strcmp(szTransCode, AP_TRANSCODE_CS_CANCEL) == 0) { bufclr(szTransCode); ASSERT_NORMAL(AP_DEMAND(AP_PATH_ORGTRANSCODE, szTransCode)); } if (strcmp(szTransCode, AP_TRANSCODE_CS_CONSUME) == 0 || strcmp(szTransCode, AP_TRANSCODE_CS_REFUND) == 0 || strcmp(szTransCode, AP_TRANSCODE_CS_AUTH) == 0 || strcmp(szTransCode, AP_TRANSCODE_CS_AUTHSETTLE) == 0) strcpy(szServiceCode, SERVICECODE_POS); else strcpy(szServiceCode, SERVICECODE_ATM); } else if (strcmp(szReqType, AP_REQTYPE_POS) == 0) strcpy(szServiceCode, SERVICECODE_POS); else if (strcmp(szReqType, AP_REQTYPE_ATM) == 0) strcpy(szServiceCode, SERVICECODE_ATM); else if (strcmp(szReqType, AP_REQTYPE_TERM) == 0) strcpy(szServiceCode, SERVICECODE_TERM); else ASSERT_NORMAL(INVALID); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_SERVICECODE, szServiceCode, SIZE_SERVICECODE)); return NORMAL;}/* * 产生ISO8583报文的受理方终端号。 */ RESULT GetTermId(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){ char szReqId[AP_LEN_ID + 1]; bufclr(szReqId); ASSERT_NORMAL(AP_DEMAND(AP_PATH_REQID, szReqId)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_TERMID, szReqId, SIZE_TERMID)); return NORMAL;}/* * 产生ISO8583报文的商户代码。 */ RESULT GetAcceptorId(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){ char szMerchNo[AP_LEN_MERCHNO + 1]; bufclr(szMerchNo); if (AP_DEMAND(AP_PATH_MERCHNO, szMerchNo) != NORMAL) InitString(szMerchNo, ' ', SIZE_ACCEPTORID); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_ACCEPTORID, szMerchNo, SIZE_ACCEPTORID)); return NORMAL;}/* * 产生ISO8583报文的受理方名称。 */ RESULT GetAcceptorName(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){ char szMerchName[AP_LEN_MERCHNAME + 1]; char szArea[AP_LEN_AREA + 1]; char szCountryCode[LEN_COUNTRYCODE + 1]; char szDistrictCode[LEN_DISTRICTCODE + 1]; char szAcceptorName[SIZE_ACCEPTORNAME + 1]; UINT nLen; bufclr(szMerchName); bufclr(szArea); bufclr(szCountryCode); bufclr(szDistrictCode); InitString(szAcceptorName, ' ', SIZE_ACCEPTORNAME); ASSERT_NORMAL(AP_DEMAND(AP_PATH_AREA, szArea)); ASSERT_NORMAL(AP_DEMAND_CFG(PATH_COUNTRYCODE, szCountryCode)); ASSERT_NORMAL(AP_DEMAND_CFG(PATH_DISTRICTCODE, szDistrictCode)); memcpy(&szAcceptorName[0], szCountryCode, LEN_COUNTRYCODE); memcpy(&szAcceptorName[3], szDistrictCode, LEN_DISTRICTCODE); memcpy(&szAcceptorName[3 + 2], szArea, 3); if (AP_DEMAND(AP_PATH_MERCHNAME, szMerchName) == NORMAL) { nLen = strlen(szMerchName); memcpy(&szAcceptorName[3 + 2 + 3], szMerchName, min(nLen, 32)); } ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_ACCEPTORNAME, szAcceptorName, SIZE_ACCEPTORNAME)); return NORMAL;}/* * 产生ISO8583报文的货币代码。 */ RESULT GetCurrCode(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){ char szCurrType[AP_LEN_CURRTYPE + 1]; bufclr(szCurrType); if (AP_DEMAND(AP_PATH_CURRTYPE, szCurrType) != NORMAL) strcpy(szCurrType, "156"); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_CURRCODE, szCurrType, SIZE_CURRCODE)); return NORMAL;}/* * 产生ISO8583报文的密码。(把XML密码的明文转为ISO8583的密文) */ RESULT GetPin(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){ char szAccPwd[AP_LEN_ACCPWD + 1], szAccNo[AP_LEN_ACCNO + 1]; UCHAR cPin[SIZE_PIN], cPik[SIZE_KEY]; bufclr(szAccPwd); bufclr(szAccNo); bufclr(cPin); bufclr(cPik); if (AP_DEMAND(AP_PATH_ACCPWD, szAccPwd) != NORMAL) memset(szAccPwd, '0', AP_LEN_ACCPWD); ASSERT_NORMAL(AP_DEMAND(AP_PATH_ACCNO, szAccNo)); ASSERT_NORMAL(GetKey("PIK", cPik, NULL)); ASSERT_NORMAL(Ansix98(cPin, szAccPwd, AP_LEN_ACCPWD, cPik, szAccNo, TRUE)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_PIN, cPin, SIZE_PIN)); return NORMAL;}/* * 产生ISO8583报文的证件号码。 */ RESULT GetIdNo(PCXMLSTRU pxmlstruReq, 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); AP_DEMAND(AP_PATH_CERTTYPE, szCertType); AP_DEMAND(AP_PATH_CERTNO, szCertNo); AP_DEMAND(AP_PATH_ACCNAME, szAccName); memcpy(szIdNo, szCertType, strlen(szCertType)); memcpy(&szIdNo[1], szCertNo, strlen(szCertNo)); nLen = strlen(szAccName); memcpy(&szIdNo[20 + 1], szAccName, min(20, nLen)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_IDNO, szIdNo, SIZE_IDNO_MAX)); return NORMAL;}/* * 产生ISO8583报文的新密码。(把XML新密码的明文转为ISO8583的密文) */ RESULT GetNewPin(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){ char szAccNewPwd[AP_LEN_ACCPWD + 1], szAccNo[AP_LEN_ACCNO + 1]; UCHAR cNewPin[SIZE_PIN], cPik[SIZE_KEY]; bufclr(szAccNewPwd); bufclr(szAccNo); bufclr(cNewPin); bufclr(cPik); ASSERT_NORMAL(AP_DEMAND(AP_PATH_ACCNEWPWD, szAccNewPwd)); ASSERT_NORMAL(AP_DEMAND(AP_PATH_ACCNO, szAccNo)); ASSERT_NORMAL(GetKey("PIK", cPik, NULL)); ASSERT_NORMAL(Ansix98(cNewPin, szAccNewPwd, AP_LEN_ACCPWD, cPik, szAccNo, TRUE)); ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_NEWPIN, cNewPin, SIZE_PIN)); return NORMAL;}/* * 产生ISO8583报文的对帐结果码。 */ RESULT GetSettleCode(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){ char szRespCode[AP_LEN_RESPCODE + 1]; char szSettleCode[1 + 1]; bufclr(szRespCode); bufclr(szSettleCode); ASSERT_NORMAL(AP_DEMAND(AP_PATH_RESPCODE, szRespCode)); if (strcmp(szRespCode, AP_RESPCODE_ACCEPT) == 0) szSettleCode[0] = '1'; else if (strcmp(szRespCode, AP_RESPCODE_SETTLE_NOTEQUAL) == 0) szSettleCode[0] = '2'; else szSettleCode[0] = '3'; ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_SETTLECODE, szSettleCode, SIZE_SETTLECODE)); return NORMAL;}RESULT GetReason(PCXMLSTRU pxmlstruReq, PISO8583STRU piso8583stru){ ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_REASON, "9020", SIZE_REASON)); return NORMAL;}/* End of this file */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -