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

📄 converse.cpre

📁 商业银行前置系统
💻 CPRE
📖 第 1 页 / 共 3 页
字号:
/* * This is a part of the Application Preconsole * - Service Provide - ISI. * Copyright (C) 2000-2000 ABC.SDC. * All rights reserved. * * This source code is only intended as a supplement to the * Application Preconsole Reference and related * electronic documentation provided with the library. * See these sources for detailed information regarding the * Application Preconsole product.  * * Update record: * 2001-08-08 ChenYu    - converse packet. */#include "ap.h"#include "apsc.h"EXEC SQL INCLUDE sqlca;EXEC SQL INCLUDE "isi.h";PCSTR pszRespCode[][2] = {    {"00", AP_RESPCODE_ACCEPT              }, /* 承兑或交易成功 */    {"01", AP_RESPCODE_CARD_REFISSUE       }, /* 查发卡方 */    {"02", AP_RESPCODE_CARD_REFISSUE       }, /* 查发卡方的特殊条件 */    {"03", AP_RESPCODE_MERCH_INVALID       }, /* 无效商户 */    {"04", AP_RESPCODE_CARD_CONFISCATE     }, /* 没收卡 */    {"05", AP_RESPCODE_REJECT              }, /* 不予承兑 */    {"06", AP_RESPCODE_SYSERR              }, /* 出错 */    {"07", AP_RESPCODE_CARD_CONFISCATE     }, /* 特殊条件下没收卡 */    {"09", AP_RESPCODE_ORGTRANS_INPROC     }, /* 请求正在处理中 */    {"12", AP_RESPCODE_REJECT              }, /* 无效交易 */    {"13", AP_RESPCODE_AMT_INVALID         }, /* 无效金额 */    {"14", AP_RESPCODE_CARDNO_INVALID      }, /* 无效卡号 */    {"15", AP_RESPCODE_CARD_NOTACCEPT      }, /* 无此发卡方 */    {"19", AP_RESPCODE_SERVICE_RETRY       }, /* 重新送入交易 */    {"20", AP_RESPCODE_REJECT              }, /* 无效应答 */    {"21", AP_RESPCODE_REJECT              }, /* 不作任何处理 */    {"22", AP_RESPCODE_REJECT              }, /* 怀疑操作有误 */    {"23", AP_RESPCODE_FEE_ERR             }, /* 不可接受的交易费 */    {"25", AP_RESPCODE_ORGTRANS_NOTEXIST   }, /* 未能找到文件上记录 */    {"30", AP_RESPCODE_SYSERR              }, /* 格式错误 */    {"31", AP_RESPCODE_CARD_NOTACCEPT      }, /* 交换中心不支持的银行 */    {"33", AP_RESPCODE_CARD_CONFISCATE     }, /* 过期的卡(没收卡) */    {"34", AP_RESPCODE_CARD_CONFISCATE     }, /* 有作弊嫌疑(没收卡) */    {"35", AP_RESPCODE_CARD_CONFISCATE     }, /* 与安保部门联系(没收卡)*/    {"36", AP_RESPCODE_CARD_CONFISCATE     }, /* 受限制的卡(没收卡)*/    {"37", AP_RESPCODE_CARD_CONFISCATE     }, /* 呼受理方安保部门(没收卡)*/    {"38", AP_RESPCODE_CARD_CONFISCATE     }, /* PIN输入次数超限(没收卡)*/    {"39", AP_RESPCODE_ACC_NOTEXIST        }, /* 无此信用卡帐户 */    {"40", AP_RESPCODE_SERVICE_NOTSUPPORT  }, /* 请求的功能尚不支持 */    {"41", AP_RESPCODE_CARD_CONFISCATE     }, /* 挂失卡(没收卡)*/    {"42", AP_RESPCODE_ACC_NOTEXIST        }, /* 无此帐户 */    {"43", AP_RESPCODE_CARD_CONFISCATE     }, /* 被窃卡(没收卡)*/    {"44", AP_RESPCODE_ACC_NOTEXIST        }, /* 无此投资帐户 */    {"51", AP_RESPCODE_ACC_BALLACK         }, /* 无足够的存款 */    {"52", AP_RESPCODE_ACC_NOTEXIST        }, /* 无此支票帐户 */    {"53", AP_RESPCODE_ACC_NOTEXIST        }, /* 无此储蓄卡帐户 */    {"54", AP_RESPCODE_CARD_EXPIRED        }, /* 过期的卡 */    {"55", AP_RESPCODE_ACCPWD_ERR          }, /* 不正确的PIN  */    {"56", AP_RESPCODE_ACC_NOTEXIST        }, /* 无此卡记录 */    {"57", AP_RESPCODE_SERVICE_NOTSUPPORT  }, /* 不允许持卡人进行的交易 */    {"58", AP_RESPCODE_SERVICE_NOTSUPPORT  }, /* 不允许终端进行的交易 */    {"59", AP_RESPCODE_REJECT              }, /* 有作弊嫌疑 */    {"60", AP_RESPCODE_REJECT              }, /* 与安保部门联系 */    {"61", AP_RESPCODE_AMT_OUTLMT          }, /* 超出取款金额限制 */    {"62", AP_RESPCODE_REJECT              }, /* 受限制的卡 */    {"63", AP_RESPCODE_REJECT              }, /* 违反安保规定 */    {"64", AP_RESPCODE_ORGTRANS_AMTERR     }, /* 原始金额不正确 */    {"65", AP_RESPCODE_WITHDRAWTIME_OUTLMT }, /* 超出取款次数限制 */    {"66", AP_RESPCODE_REJECT              }, /* 呼安保部门 */    {"67", AP_RESPCODE_CARD_CONFISCATE     }, /* 捕捉(没收卡)*/    {"68", AP_RESPCODE_REJECT              }, /* 收到的回答太迟 */    {"75", AP_RESPCODE_ACCPWD_TIMEOUTLMT   }, /* PIN 输入次数超限 */    {"90", AP_RESPCODE_SYS_INTERMIT        }, /* 日期切换正在处理 */    {"91", AP_RESPCODE_REJECT              }, /* 发卡方或交换中心不能操作 */    {"92", AP_RESPCODE_CARD_NOTACCEPT      }, /* 目标机构找不到或无法达到 */    {"93", AP_RESPCODE_REJECT              }, /* 交易违法、不能完成 */    {"94", AP_RESPCODE_DUPCREDITTRANS      }, /* 重复交易 */    {"95", AP_RESPCODE_SYSERR              }, /* 调节控制错 */    {"96", AP_RESPCODE_SYSERR              }, /* 系统异常、失效 */    {"97", AP_RESPCODE_REQID_INVALID       }, /* ATM/POS 终端号找不到 */    {"98", AP_RESPCODE_SYSERR              }, /* 交换中心收不到发卡方应答 */    {"99", AP_RESPCODE_ACCPWD_ERR          }, /* PIN 格式错 */    {"Z2", AP_RESPCODE_SYSERR              }, /* MAC鉴别失败 */    {"N1", AP_RESPCODE_SYSERR              }, /* 受理行未签到 */    {"N4", AP_RESPCODE_SYSERR              }, /* 受理行未签到 */    {"N6", AP_RESPCODE_SYSERR              }, /* 发卡行通讯失败 */    {NULL, NULL                            }};/* * 判断是否冲正请求。 */RESULT IsReverse(PCXMLSTRU pxmlstruReq, PBOOL pbIsReverse){    char szMsgType[AP_LEN_MSGTYPE + 1];    bufclr(szMsgType);    ASSERT_NORMAL(AP_DEMAND(AP_PATH_MSGTYPE, szMsgType));        *pbIsReverse = (strcmp(szMsgType, AP_MSGTYPE_CANCELREQ) == 0);    return NORMAL;}/* * 手工授权。 */BOOL IsManualAuth(PCXMLSTRU pxmlstruReq){    char szManualAuth[1 + 1];    bufclr(szManualAuth);     AP_DEMAND(AP_PATH_MANUALAUTH, szManualAuth);    return szManualAuth[0] == 'Y';}/* * 检查ISO8583返回码。 */BOOL IsRespCode(PCISO8583STRU piso8583stru, PCSTR pszRespCode){    char szRespCode[SIZE_RESPCODE + 1];    UINT nSize = SIZE_RESPCODE;    bufclr(szRespCode);    if (GetBitInIso8583(piso8583stru, BIT_RESPCODE, szRespCode,                        &nSize) != NORMAL)        return FALSE;            return strcmp(pszRespCode, szRespCode) == 0;}/* * 公共格式转换函数(XML->ISO8583)。 */RESULT GetPubInfo(PISO8583STRU piso8583stru, PCXMLSTRU pxmlstruReq){    ASSERT_NORMAL(GetPan(pxmlstruReq, piso8583stru));               /*  2 */    ASSERT_NORMAL(GetTransmissDateTime(pxmlstruReq, piso8583stru)); /*  7 */    ASSERT_NORMAL(GetLocalTransTime(pxmlstruReq, piso8583stru));    /* 12 */    ASSERT_NORMAL(GetLocalTransDate(pxmlstruReq, piso8583stru));    /* 13 */    ASSERT_NORMAL(GetAcqSettleDate(pxmlstruReq, piso8583stru));     /* 17 */    ASSERT_NORMAL(GetMerchType(pxmlstruReq, piso8583stru));         /* 18 */    ASSERT_NORMAL(GetEntryMode(pxmlstruReq, piso8583stru));         /* 22 */    ASSERT_NORMAL(GetConditionCode(pxmlstruReq, piso8583stru));     /* 25 */    ASSERT_NORMAL(GetAcqId(pxmlstruReq, piso8583stru));             /* 32 */    ASSERT_NORMAL(GetForwardId(pxmlstruReq, piso8583stru));         /* 33 */    ASSERT_NORMAL(GetServiceCode(pxmlstruReq, piso8583stru));       /* 40 */    ASSERT_NORMAL(GetTermId(pxmlstruReq, piso8583stru));            /* 41 */    ASSERT_NORMAL(GetAcceptorId(pxmlstruReq, piso8583stru));        /* 42 */    ASSERT_NORMAL(GetAcceptorName(pxmlstruReq, piso8583stru));      /* 43 */    ASSERT_NORMAL(GetCurrCode(pxmlstruReq, piso8583stru));          /* 49 */    return NORMAL;}/* * 获取冲正所需的原始数据。 */RESULT GetOrgInfo(PCSTR pszSeqNo, PISO8583STRU piso8583stru){    ISIDSTRU isidstru;        ASSERT_NORMAL(GetOrgDetail(pszSeqNo, &isidstru));    ASSERT_NORMAL(GetOrgPan(&isidstru, piso8583stru));    ASSERT_NORMAL(GetOrgProcessCode(&isidstru, piso8583stru));    ASSERT_NORMAL(GetOrgTransAmt(&isidstru, piso8583stru));    ASSERT_NORMAL(GetOrgSettleDate(&isidstru, piso8583stru));    ASSERT_NORMAL(GetOrgAcqSettleDate(&isidstru, piso8583stru));    ASSERT_NORMAL(GetOrgMerchType(&isidstru, piso8583stru));    ASSERT_NORMAL(GetOrgConditionCode(&isidstru, piso8583stru));    ASSERT_NORMAL(GetOrgTransFee(&isidstru, piso8583stru));    ASSERT_NORMAL(GetOrgAcqId(&isidstru, piso8583stru));    ASSERT_NORMAL(GetOrgForwardId(&isidstru, piso8583stru));    ASSERT_NORMAL(GetOrgAuthResp(&isidstru, piso8583stru));    ASSERT_NORMAL(GetOrgServiceCode(&isidstru, piso8583stru));    ASSERT_NORMAL(GetOrgEntryMode(&isidstru, piso8583stru));    ASSERT_NORMAL(GetOrgTermId(&isidstru, piso8583stru));    ASSERT_NORMAL(GetOrgAcceptorId(&isidstru, piso8583stru));    ASSERT_NORMAL(GetOrgAcceptorName(&isidstru, piso8583stru));    ASSERT_NORMAL(GetOrgAddResp(&isidstru, piso8583stru));    ASSERT_NORMAL(GetOrgCurrCode(&isidstru, piso8583stru));    ASSERT_NORMAL(GetOrgData(&isidstru, piso8583stru));    return NORMAL;}/* * 读ISID记录(读冲正或撤销或退货交易的原交易) */RESULT GetOrgDetail(PCSTR pszSeqNo, PISIDSTRU pisidstru){    EXEC SQL BEGIN DECLARE SECTION ;    char szSeqNo[AP_LEN_SEQNO + 1];    ISIDSTRU isidstru;    EXEC SQL END DECLARE SECTION ;    bufclr(szSeqNo);    memset(&isidstru, 0, sizeof(ISIDSTRU));    strcpy(szSeqNo, pszSeqNo);    EXEC SQL SELECT * INTO :isidstru FROM isid WHERE seqno = :szSeqNo;    ASSERT_SQL_NORMAL();    memcpy(pisidstru, &isidstru, sizeof(ISIDSTRU));     return NORMAL;}/* * 产生ISO8583报文的原始处理码。 */ RESULT GetOrgProcessCode(PISIDSTRU pisidstru, PISO8583STRU piso8583stru){    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_PROCESSCODE,                                  pisidstru->szProcessCode, SIZE_PROCESSCODE));    return NORMAL;}/* * 产生ISO8583报文的原始帐号。 */ RESULT GetOrgPan(PISIDSTRU pisidstru, PISO8583STRU piso8583stru){    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_PAN, pisidstru->szPan,                                  SIZE_PAN_MAX));    return NORMAL;}/* * 产生ISO8583报文的原始交易金额。 */ RESULT GetOrgTransAmt(PISIDSTRU pisidstru, PISO8583STRU piso8583stru){    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_TRANSAMT,                                  pisidstru->szTransAmt, SIZE_TRANSAMT));    return NORMAL;}/* * 产生ISO8583报文的原始清算日期。 */ RESULT GetOrgSettleDate(PISIDSTRU pisidstru, PISO8583STRU piso8583stru){    if (strlen(TrimString(pisidstru->szSettleDate)) == 0)        strcpy(pisidstru->szSettleDate, "0101");    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_SETTLEDATE,                                  pisidstru->szSettleDate, SIZE_SETTLEDATE));    return NORMAL;}/* * 产生ISO8583报文的原始受理方清算日期。 */ RESULT GetOrgAcqSettleDate(PISIDSTRU pisidstru, PISO8583STRU piso8583stru){    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_ACQSETTLEDATE,                                  pisidstru->szAcqSettleDate,                                   SIZE_ACQSETTLEDATE));    return NORMAL;}/* * 产生ISO8583报文的原始商户类型。 */ RESULT GetOrgMerchType(PISIDSTRU pisidstru, PISO8583STRU piso8583stru){    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_MERCHTYPE,                                  pisidstru->szMerchType, SIZE_MERCHTYPE));    return NORMAL;}/* * 产生ISO8583报文的原始输入方式码。 */ RESULT GetOrgEntryMode(PISIDSTRU pisidstru, PISO8583STRU piso8583stru){    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_ENTRYMODE,                                  pisidstru->szEntryMode, SIZE_ENTRYMODE));    return NORMAL;}/* * 产生ISO8583报文的原始服务点条件码。 */ RESULT GetOrgConditionCode(PISIDSTRU pisidstru, PISO8583STRU piso8583stru){    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_CONDITIONCODE,                                  pisidstru->szConditionCode,                                  SIZE_CONDITIONCODE));    return NORMAL;}/* * 产生ISO8583报文的原始手续费。 */ RESULT GetOrgTransFee(PISIDSTRU pisidstru, PISO8583STRU piso8583stru){    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_TRANSFEE,                                  pisidstru->szTransFee, SIZE_TRANSFEE));    return NORMAL;}/* * 产生ISO8583报文的原受理方机构代码。 */ RESULT GetOrgAcqId(PISIDSTRU pisidstru, PISO8583STRU piso8583stru){    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_ACQID, pisidstru->szAcqId,                                  SIZE_ACQID_MAX));    return NORMAL;}/* * 产生ISO8583报文的原发卡方机构代码。 */ RESULT GetOrgForwardId(PISIDSTRU pisidstru, PISO8583STRU piso8583stru){    if (strlen(TrimString(pisidstru->szForwardId)) == 0)        strcpy(pisidstru->szForwardId, "63000000000");    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_FORWARDID,                                  pisidstru->szForwardId, SIZE_FORWARDID_MAX));    return NORMAL;}/* * 产生ISO8583报文的原始授权码。 */ RESULT GetOrgAuthResp(PISIDSTRU pisidstru, PISO8583STRU piso8583stru){    if (strlen(TrimString(pisidstru->szAuthResp)) == 0)        strcpy(pisidstru->szAuthResp, "      ");     ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_AUTHRESP,                                  pisidstru->szAuthResp, SIZE_AUTHRESP));    return NORMAL;}/* * 产生ISO8583报文的原始服务限制码。 */ RESULT GetOrgServiceCode(PISIDSTRU pisidstru, PISO8583STRU piso8583stru){    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_SERVICECODE,                                  pisidstru->szServiceCode, SIZE_SERVICECODE));    return NORMAL;}/* * 产生ISO8583报文的原始终端号。 */ RESULT GetOrgTermId(PISIDSTRU pisidstru, PISO8583STRU piso8583stru){    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_TERMID,                                  pisidstru->szTermId, SIZE_TERMID));    return NORMAL;}/* * 产生ISO8583报文的原受卡方标识码(商户号)。 */ RESULT GetOrgAcceptorId(PISIDSTRU pisidstru, PISO8583STRU piso8583stru){    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_ACCEPTORID,                                  pisidstru->szAcceptorId, SIZE_ACCEPTORID));    return NORMAL;}/* * 产生ISO8583报文的原受卡方名称。 */ RESULT GetOrgAcceptorName(PISIDSTRU pisidstru, PISO8583STRU piso8583stru){    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_ACCEPTORNAME,                                  pisidstru->szAcceptorName, SIZE_ACCEPTORNAME));    return NORMAL;}/* * 产生ISO8583报文的原始发卡方流水号。 */ RESULT GetOrgAddResp(PISIDSTRU pisidstru, PISO8583STRU piso8583stru){    if (strlen(TrimString(pisidstru->szAddResp)) == 0)        InitString(pisidstru->szAddResp, '0', SIZE_ADDRESP_MAX);    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_ADDRESP,                                  pisidstru->szAddResp, SIZE_ADDRESP_MAX));    return NORMAL;}/* * 产生ISO8583报文的原货币代码。 */ RESULT GetOrgCurrCode(PISIDSTRU pisidstru, PISO8583STRU piso8583stru){    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_CURRCODE,                                  pisidstru->szCurrCode, SIZE_CURRCODE));    return NORMAL;}/* * 原始数据元。 */ RESULT GetOrgData(PISIDSTRU pisidstru, PISO8583STRU piso8583stru){    char szOrgData[SIZE_ORGDATA + 1];    bufclr(szOrgData);    memcpy(&szOrgData[0], pisidstru->szMsgId, SIZE_MSGID);    memcpy(&szOrgData[4], pisidstru->szProcessCode, SIZE_PROCESSCODE);    memcpy(&szOrgData[10], pisidstru->szAcqSettleDate, SIZE_ACQSETTLEDATE);    memcpy(&szOrgData[14], pisidstru->szSeqNo, AP_LEN_SEQNO);    memcpy(&szOrgData[26], &pisidstru->szAcqId[1], 10);        if (strlen(TrimString(pisidstru->szTraceNo)) == 0)        memset(&szOrgData[36], '0', SIZE_TRACENO);    else        memcpy(&szOrgData[36], pisidstru->szTraceNo, SIZE_TRACENO);    ASSERT_NORMAL(SetBitInIso8583(piso8583stru, BIT_ORGDATA, szOrgData,                                   SIZE_ORGDATA));    return NORMAL;}/* * ISO8583->XML转换函数。 *//* * 根据ISO8583报文产生XML报文的帐户类型。 */ RESULT SetAccType(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruResp){    char szAccType[AP_LEN_ACCTYPE + 1];    char szAddAmt[SIZE_ADDAMT_MAX + 1];    UINT nSize = SIZE_ADDAMT_MAX;        bufclr(szAddAmt);    bufclr(szAccType);        ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_ADDAMT, szAddAmt, &nSize));    if (memcmp(szAddAmt, "30", 2) == 0)        strcpy(szAccType, AP_ACCTYPE_CREDITCARD);    else        strcpy(szAccType, AP_ACCTYPE_DEBITCARD);                    ASSERT_NORMAL(AP_INSERT(AP_PATH_ACCTYPE, szAccType));    return NORMAL;}/* * 根据ISO8583报文产生XML报文的可用余额。 */RESULT SetAvailBal(PCISO8583STRU piso8583stru, PXMLSTRU pxmlstruResp){    char szAvailBal[AP_LEN_BAL + 1];    char szAddAmt[SIZE_ADDAMT_MAX + 1];    UINT nSize = SIZE_ADDAMT_MAX;        bufclr(szAddAmt);    bufclr(szAvailBal);    ASSERT_NORMAL(GetBitInIso8583(piso8583stru, BIT_ADDAMT, szAddAmt, &nSize));        memcpy(szAvailBal, &szAddAmt[28], 12);    sprintf(szAvailBal, "%19.2lf",            atof(szAvailBal) / 100.0 * (szAddAmt[27] == 'D' ? -1.0 : 1.0));    ASSERT_NORMAL(AP_INSERT(AP_PATH_AVAILBAL, szAvailBal));

⌨️ 快捷键说明

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