📄 cmscheck.sqc
字号:
** 返回结果:int ** 0 ---- 成功(是) ** -1 ---- 失败*******************************************************/int cmsApiChkAcctStatusIsOK( pstCmsAcctM )struct cmsacctm * pstCmsAcctM; /* 卡账户对照表 */{ /* 定义 局部变量 */ int iRtn; /* 函数返回值 */ sprintf( g_acTrcMsg, "cmsApiChkAcctStatusIsOK begin " ); TRCLOG2 /* 检查卡内帐户状态是否正常 */ /* 不是正常 */ if ( pstCmsAcctM->status[ BIT1_LEN ] != NORMAL_STS ) { strcpy( g_acRspCode, "CMS1A8" ); pubCrtRspInfo( pstCmsAcctM->cardno, pstCmsAcctM->acctseqno ); ERRLOG return FAILED; } sprintf( g_acTrcMsg, "cmsApiChkAcctStatusIsOK end " ); TRCLOG2 return SUCCESS;}/******************************************************* ** 函数名称:cmsApiChkIsNameCard ** 中文名称:检查卡号是否为记名卡 ** 功能描述:已知某卡卡片信息,判断卡是否是记名卡 ** 输入参数: ** pstCmsCardInfo ---- 卡片信息表 ** 输出参数:无 ** 返回结果:int ** 0 ---- 成功(是) ** -1 ---- 失败*******************************************************/int cmsApiChkIsNameCard( pstCmsCardInfo )struct cmscardinfo * pstCmsCardInfo; /* 卡片信息表 */{ /* 定义 局部变量 */ int iRtn; /* 函数返回值 */ sprintf( g_acTrcMsg, "cmsApiChkIsNameCard begin " ); TRCLOG2 /* 检查卡是否为记名卡 */ /* 不是记名卡 */ if ( pstCmsCardInfo->markflg[ BIT1_LEN ] != REGNAMECARD ) { strcpy( g_acRspCode, "CMS1B3" ); pubCrtRspInfo( pstCmsCardInfo->cardno ); ERRLOG return FAILED; } sprintf( g_acTrcMsg, "cmsApiChkIsNameCard end " ); TRCLOG2 return SUCCESS;}/******************************************************* ** 函数名称:cmsApiChkIsUnnameCard ** 中文名称:检查卡号是否为非记名卡 ** 功能描述:已知某卡卡片信息,判断卡是否是非记名卡 ** 输入参数: ** pstCmsCardInfo ---- 卡片信息表 ** 输出参数:无 ** 返回结果:int ** 0 ---- 成功(是) ** -1 ---- 失败*******************************************************/int cmsApiChkIsUnnameCard( pstCmsCardInfo )struct cmscardinfo * pstCmsCardInfo; /* 卡片信息表 */{ /* 定义 局部变量 */ int iRtn; /* 函数返回值 */ sprintf( g_acTrcMsg, "cmsApiChkIsUnnameCard begin " ); TRCLOG2 /* 检查卡是否为记名卡 */ /* 不是非记名卡 */ if ( pstCmsCardInfo->markflg[ BIT1_LEN ] == REGNAMECARD ) { strcpy( g_acRspCode, "CMS1C4" ); pubCrtRspInfo( pstCmsCardInfo->cardno ); ERRLOG return FAILED; } sprintf( g_acTrcMsg, "cmsApiChkIsUnnameCard end " ); TRCLOG2 return SUCCESS;}/******************************************************* ** 函数名称:cmsApiChkCardKindIsMainCard ** 中文名称:检查卡片种类是否为主卡卡片种类 ** 功能描述:已知某种卡片种类,判断卡片种类是否为主卡卡片种类 ** 输入参数: ** pstCmsCardKind ---- 卡片种类表 ** 输出参数:无 ** 返回结果:int ** 0 ---- 成功(是) ** -1 ---- 失败*******************************************************/int cmsApiChkCardKindIsMainCard( pstCmsCardKind )struct cmscardkind * pstCmsCardKind; /* 卡片种类表 */{ /* 定义 局部变量 */ int iRtn; /* 函数返回值 */ sprintf( g_acTrcMsg, "cmsApiChkCardKindIsMainCard begin " ); TRCLOG2 /* 检查卡片种类是否为主卡卡片种类 */ if ( pstCmsCardKind->cardflg[ BIT1_LEN ] != ALL_CARD) { if ( pstCmsCardKind->cardflg[ BIT1_LEN ] != MAIN_CARD ) { strcpy( g_acRspCode, "CMS1B4" ); pubCrtRspInfo( pstCmsCardKind->cardkind ); ERRLOG return FAILED; } } sprintf( g_acTrcMsg, "cmsApiChkCardKindIsMainCard end " ); TRCLOG2 return SUCCESS;}/******************************************************* ** 函数名称:cmsApiChkCardKindIsSubMainCard ** 中文名称:检查卡片种类是否为附卡卡片种类 ** 功能描述:已知某种卡片种类,判断卡片种类是否为附卡卡片种类 ** 输入参数: ** pstCmsCardKind ---- 卡片种类表 ** 输出参数:无 ** 返回结果:int ** 0 ---- 成功(是) ** -1 ---- 失败*******************************************************/int cmsApiChkCardKindIsSubMainCard( pstCmsCardKind )struct cmscardkind * pstCmsCardKind; /* 卡片种类表 */{ /* 定义 局部变量 */ int iRtn; /* 函数返回值 */ sprintf( g_acTrcMsg, "cmsApiChkCardKindIsSubMainCard begin " ); TRCLOG2 /* 检查卡片种类是否为附卡卡片种类 */ if ( pstCmsCardKind->cardflg[ BIT1_LEN ] != ALL_CARD) { if ( pstCmsCardKind->cardflg[ BIT1_LEN ] != SUBMAIN_CARD ) { strcpy( g_acRspCode, "CMS1B5" ); pubCrtRspInfo( pstCmsCardKind->cardkind ); ERRLOG return FAILED; } } sprintf( g_acTrcMsg, "cmsApiChkCardKindIsSubMainCard end " ); TRCLOG2 return SUCCESS;}/******************************************************* ** 函数名称:cmsApiChkCardNormal ** 中文名称:检查卡状态和密码 ** 功能描述:检查卡状态和密码 ** 输入参数: ** pstPubcom ---- 公共数据 ** pcCardNo ---- 卡号 ** pcPasswd ---- 密码 ** pcTrack2 ---- 二磁道 ** pcTrack3 ---- 三磁道 ** dAmount ---- 发生额 ** pcCcy ---- 币种 ** pcTranType ---- 交易类型 ** "001":本行借记卡开主帐户 ** "002":本行借记卡正常销户 ** "003":本行借记卡存款 ** "004":本行借记卡取款 ** "005":本行借记卡转本行借记卡 ** "006":本行借记卡消费 ** "007":本行借记卡退货 ** "008":圈存 ** "009":圈提 ** "010":本行借记卡贷款发放 ** "011":本行借记卡贷款还款 ** "012":中间业务 ** "013":本行借记卡预授权 ** "014":本行借记卡预授权完成 ** "015":本行借记卡修改密码 ** "016":本行借记卡查询 ** "017":撤消 ** "018":冲正 ** "019":撤消冲正 ** "020":本行借记卡存款确认 ** "021":本行借记卡挂失 ** "022":本行贷记卡预借现金 ** "023":本行借记卡转银联卡 ** "024":银联卡转本行借记卡 ** "025":本行借记卡开多帐户 ** "026":本行借记卡保号换卡 ** "027":本行借记卡申请副卡 ** "028":本行借记卡挂失销户 ** "029":本行借记卡转本行贷记卡 ** "030":本行贷记卡转本行借记卡 ** "031":本行贷记卡转本行贷记卡 ** "032":银联卡转银联卡 ** "033":本行借记卡自助缴费 ** "034":本行贷记卡存款 ** "035":本行贷记卡消费 ** "036":银联卡存款 ** "037":银联卡取款 ** "038":本行贷记卡预授权 ** "039":本行贷记卡预授权完成 ** "040":本行贷记卡修改密码 ** "041":本行贷记卡查询 ** "042":本行贷记卡存款确认 ** "043":本行贷记卡挂失 ** "097":转出(中间业务代收业务赋此项) ** "098":转入(中间业务代付业务赋此项) ** "099":其他(中间业务和外围做其他业务时赋此项) ** pcTranFlag ---- 交易标志 ** "0":正常 ** "1":抹账 ** pcChkPwdFlg ---- 检查密码标志 ** "0":不检查 ** "1":检查 ** pcChkTrkFlg ---- 检查磁道标志 ** "0":不检查 ** "1":检查 ** pcMid ---- 商户代码 ** pcMctmcc ---- 商户类型 ** pcMode ---- 交易类型 "1":取款 "2":存款 "3":消费 "4":转出 "5":转入 "6":其他 ** 输出参数:无 ** 返回结果:int ** 0 ---- 成功(是) ** -1 ---- 失败*******************************************************/int cmsApiChkCardNormal( pstPubcom, pcCardNo, pcPasswd, pcTrack2, pcTrack3, \ dAmount, pcCcy, pcTranType, pcTranFlag, pcChkPwdFlg, pcChkTrkFlg, \ pcMid, pcMctmcc, pcMode )PUBCOM * pstPubcom;char * pcCardNo;char * pcPasswd;char * pcTrack2;char * pcTrack3;double dAmount;char * pcCcy;char * pcTranType;char * pcTranFlag;char * pcChkPwdFlg;char * pcChkTrkFlg;char * pcMid;char * pcMctmcc;char * pcMode;{ /*定义局部变量*/ struct cmscardinfo stCmsCardInfo; /* 卡片信息表 */ struct cmscardkind stCmsCardKind; /* 卡片种类表 */ struct cmscardinitparam stCmsCardInit; /* 卡片初始化参数表 */ char acCardStat[ BIT21_LEN ][BIT11_LEN]; /* 卡状态检查标志 */ char acCheckFlag[ BIT8_LEN + 1 ]; /* 检查卡片种类标志 */ char acMode[ FLAG_LEN + 1 ]; char acTranFlag[ FLAG_LEN + 1 ]; int iRtn; /* 函数返回值 */ int iNumx; /* 数组计数器 */ int iNumy; /* 数组计数器 */ int i, ifound=0; int (*nppfunc)( char *, char *, char * ); strcpy( g_acTrcMsg, "api卡正常检查处理开始.." ); TRCLOG2 sprintf( g_acTrcMsg, "卡号[%s]密码[%s]", pcCardNo, pcPasswd ); TRCLOG1 sprintf( g_acTrcMsg, "金额[%.2lf]币种[%s]", dAmount, pcCcy ); TRCLOG1 sprintf( g_acTrcMsg, "类型[%s]标志[%s]", pcTranType, pcTranFlag ); TRCLOG1 sprintf( g_acTrcMsg, "密码[%s]磁道[%s]", pcChkPwdFlg, pcChkTrkFlg ); TRCLOG1 sprintf( g_acTrcMsg, "Mid[%s] pcMode[%s]", pcMid, pcMode ); TRCLOG2 memset( acMode, 0x00, sizeof( acMode ) ); memset( acTranFlag, 0x00, sizeof( acTranFlag ) ); strcpy( acMode, pcMode ); strcpy( acTranFlag, pcTranFlag ); /* 初始化 */ memset( &stCmsCardInfo, 0x00, sizeof( struct cmscardinfo ) ); memset( &stCmsCardKind, 0x00, sizeof( struct cmscardkind ) ); memset( &stCmsCardInit, 0x00, sizeof( struct cmscardinitparam ) ); memset( acCheckFlag, 0x00, sizeof( acCheckFlag ) ); /* 获取卡片信息表 */ strcpy( stCmsCardInfo.cardno, pcCardNo ); iRtn = pubReadCmscardinfo( &stCmsCardInfo ); if ( iRtn ) { if ( SQLCODE == SQLNOTFOUND ) { strcpy(g_acRspCode,"CMS302"); pubCrtRspInfo( pcCardNo ); } ERRLOG return FAILED; } /* 获取卡片种类表 */ strcpy( stCmsCardKind.cardkind, stCmsCardInfo.cardkind ); iRtn = pubReadCmscardkind( &stCmsCardKind ); if ( iRtn ) { if( SQLCODE == SQLNOTFOUND ) sprintf( g_acRspMsg, "卡片种类[%s]不存在", stCmsCardInfo.cardkind ); ERRLOG return FAILED; } /* 获取卡片初始化参数表 */ strcpy( stCmsCardInit.cardidkind, stCmsCardKind.cardidkind ); iRtn = pubReadCmscardinitparam( &stCmsCardInit ); if ( iRtn ) { if( SQLCODE == SQLNOTFOUND ) sprintf( g_acRspMsg, "卡片初始化参数[%s]不存在", stCmsCardInit.cardidkind ); ERRLOG return FAILED; } /* 检查卡片种类(全部属性)API是否为启用标志、检查卡种交易类型 */ /* 检查业务发生地、是否是记名卡 */ acCheckFlag[ BIT1_LEN ] = CHECK_YES; /* 检查启用标志 */ acCheckFlag[ BIT2_LEN ] = CHECK_YES; /* 检查卡种交易类型 */ acCheckFlag[ BIT3_LEN ] = CHECK_YES; /* 检查业务发生地 */ acCheckFlag[ BIT4_LEN ] = CHECK_NO; /* 不检查发卡对象 单/个 */ acCheckFlag[ BIT5_LEN ] = CHECK_NO; /* 不检查记名标志 */ acCheckFlag[ BIT6_LEN ] = CHECK_NO; /* 不检查挂失标志 */ if ( !strcmp( pcTranType, LOGCONSUME ) || !strcmp( pcTranType, LOGCONPREAUTH ) || !strcmp( pcTranType, LOGRETURNGOODS ) || !strcmp( pcTranType, LOGPREAUTH ) ) acCheckFlag[ BIT7_LEN ] = CHECK_YES; else acCheckFlag[ BIT7_LEN ] = CHECK_NO; iRtn = cmsApiChkCardKind( &stCmsCardKind, acCheckFlag, pcTranType, pstPubcom->acChannelId, CZEROS, CZEROS, CZEROS, pcMid ); if ( iRtn ) { ERRLOG return FAILED; } if ( pcTranFlag[ BIT1_LEN ] != FLAG_NORMAL ) { return SUCCESS; } /* 检查卡片状态 */ switch ( stCmsCardInfo.crdsts[ BIT1_LEN ] ) { /* 正常 */ case CARDOKSTS: break; /* 已销卡 */ case CARDCCSTS: /* 卡已经销卡 */ strcpy( g_acRspCode, "CMS192" ); pubCrtRspInfo( stCmsCardInfo.cardno ); ERRLOG return FAILED; break; /* 未制卡 */ case CARDKCSTS: if ( stCmsCardInfo.cardstat[ BIT14_LEN ] != BIT14_CARDBHAPLY ) { /* 卡未制卡 */ strcpy( g_acRspCode, "CMS193" ); pubCrtRspInfo( stCmsCardInfo.cardno ); ERRLOG return FAILED; } break; /* 未发卡 */ case CARDNGSTS: if ( stCmsCardInfo.cardstat[ BIT14_LEN ] != BIT14_CARDBHAPLY ) { /* 卡未发卡 */ strcpy( g_acRspCode, "CMS1D4" ); pubCrtRspInfo( stCmsCardInfo.cardno ); ERRLOG return FAILED; } break; } /* 卡检查状态数组除首位外全置为不检查 */ for ( iNumx = 0; iNumx < BIT21_LEN; iNumx ++ ) for ( iNumy = 0; iNumy < BIT11_LEN; iNumy ++ ) { if ( iNumy == 0 ) acCardStat[iNumx][iNumy] = CHECK_YES; else acCardStat[iNumx][iNumy] = CHECK_NO; } /* 按交易类型设置卡状态的检查acCardStat */ if ( !strcmp( pcTranType, LOGDEPOSIT ) /* 存款 */ || !strcmp( pcTranType, LOGTRANSFERIN ) /* 转入 */ || !strcmp( pcTranType, LOGOPENOTHACCT ) /* 开户 */ || !strcmp( pcTranType, LOGAGENTDEPOSIT ) /* 代付 */ || acMode[BIT1_LEN] == MODE_DEPOSIT || acMode[BIT1_LEN] == MODE_TRANSFERIN ) { acCardStat[ BIT2_LEN ] [ BIT2_LEN ] = CHECK_YES; acCardStat[ BIT2_LEN ] [ BIT3_LEN ] = CHECK_YES; acCardStat[ BIT3_LEN ] [ BIT2_LEN ] = CHECK_YES; acCardStat[ BIT3_LEN ] [ BIT3_LEN ] = CHECK_YES; acCardStat[ BIT5_LEN ] [ BIT2_LEN ] = CHECK_YES; acCardStat[ BIT6_LEN ] [ BIT2_LEN ] = CHECK_YES; acCardStat[ BIT7_LEN ] [ BIT2_LEN ] = CHECK_YES; acCardStat[ BIT9_LEN ] [ BIT2_LEN ] = CHECK_YES; acCardStat[ BIT12_LEN ] [ BIT2_LEN ] = CHECK_YES; acCardStat[ BIT13_LEN ] [ BIT2_LEN ] = CHECK_YES; acCardStat[ BIT14_LEN ] [ BIT2_LEN ] = CHECK_YES; acCardStat[ BIT14_LEN ] [ BIT3_LEN ] = CHECK_YES; acCardStat[ BIT14_LEN ] [ BIT4_LEN ] = CHECK_YES; acCardStat[ BIT15_LEN ] [ BIT2_LEN ] = CHECK_YES;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -