📄 cispub.cpp
字号:
/****************************************** 小额支付系统支票截留业务公共处理函数******************************************/#include <sys/time.h>#include <stdlib.h>#include "sybdblib.hpp"#include "CisPub.hpp"#include "libcore.h"#include "md5.h"#include "CBase64.h"#include "cnapstag.hpp"#define CISINFO "CisIdx, MbfeIdx, doflag, rsflag, OprNo, PkgType, TrxsType,\ PreDate, TrxNo, RecverBKCD, RecverACC, RecverName,PayerBKCD, \ PayerACC,PayerName, MEYSYB, Amount, AccKind, AccNo, ChkDate,\ AccDate, AccPsw, Info, Remark, SysDate, RtnLimted, SRCFlag,\ ChkSatus, PicFront,PicBack,SignInfo,RedoCount, RedoInfo,CisData,\ TagData" extern SybServer m_clsSybServer;SybCommand clsSybCommand(m_clsSybServer);SybResultset clsSybResultset(m_clsSybServer);/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////BOOL IsEmptyStr( char *in_data ){ int i,j = 0; char tmp[1024]; memset(tmp,0,sizeof(tmp)); for(i = 0;i < strlen(in_data);i++) { if(in_data[i] != ' ') tmp[j++] = in_data[i]; } if( strlen(tmp) == 0 ) { return FALSE; } return TRUE;}int IsNumStr( char *in_data ){ int i = 0; char tmp[1024]; memset(tmp,0,sizeof(tmp)); for(i = 0;i < strlen(in_data);i++) { if(in_data[i] > '9'||in_data[i] < '0') return -1; } return 0;}BOOL StrTrim( char *in_data ){ int i,j = 0; char tmp[1024]; memset(tmp,0,sizeof(tmp)); for(i = 0;i < strlen(in_data);i++) { if(in_data[i] != ' ') tmp[j++] = in_data[i]; } strcpy( in_data , tmp); return TRUE;}//获取系统时间BOOL GetSysTime(char *Time ){ struct timeval ct; struct tm ttm; struct timezone zone; gettimeofday(&ct, &zone); localtime_r(&(ct.tv_sec), &ttm); if (ttm.tm_year >= 70) ttm.tm_year = ttm.tm_year + 1900; else ttm.tm_year = ttm.tm_year + 2000; ttm.tm_mon = ttm.tm_mon + 1; sprintf( Time , "%04d%02d%02d%02d%02d%02d" , ttm.tm_year, ttm.tm_mon,\ ttm.tm_mday,ttm.tm_hour,ttm.tm_min,ttm.tm_sec); return 0;} //获取系统日期 BOOL GetSysData(char *Data ){ struct timeval ct; struct tm ttm; struct timezone zone; gettimeofday(&ct, &zone); localtime_r(&(ct.tv_sec), &ttm); if (ttm.tm_year >= 70) ttm.tm_year = ttm.tm_year + 1900; else ttm.tm_year = ttm.tm_year + 2000; ttm.tm_mon = ttm.tm_mon + 1; sprintf( Data , "%04d%02d%02d" , ttm.tm_year, ttm.tm_mon,ttm.tm_mday); return 0;} BOOL BinToAsc(unsigned char* inPut, int inLen, char* outPut, int outLen){ if(inPut == NULL || outPut == NULL) { return FALSE; } if(outLen != 2*inLen) { return FALSE; } int tmp = 0; for (int i=0;i<inLen;i++) { //高位处理 tmp = (inPut[i]>> 4) & 0X0F; if (tmp < 10) outPut[2*i] = tmp + 48 ; else outPut[2*i] = tmp + 55 ; //低位处理 tmp = inPut[i] & 0X0F; if (tmp < 10) outPut[2*i+1] = tmp + 48 ; else outPut[2*i+1] = tmp + 55 ; } filelog(CIS_INTER_MB, "BinToAsc::OutPut=[d][%s]", outLen, outPut); return TRUE;}int SH_EncodeBase64(char *pASCSrc,char *pBase64Res){ int srcLen; char cMap[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; char *pCurSrc,*pCurRes; int i,j,k,group; char ch_Asc[4],ch_Base[4],ch,cha; if(!pASCSrc || !pBase64Res) return -1; srcLen = strlen(pASCSrc); if(srcLen<1) { *pBase64Res = 0; return -1; } group = srcLen/3; i = 0; pCurSrc = pASCSrc; pCurRes = pBase64Res; while(i<group) { for(j=0;j<3;j++) { if(pCurSrc[j]!=0) { ch_Asc[j] = *(pCurSrc+j); } else { for(k=j;k<4;k++) { ch_Asc[k] = 0; } } } ch_Base[0] = ((ch_Asc[0]>>2)&0x3f); *pCurRes = cMap[ch_Base[0]]; ch_Base[1] = ((ch_Asc[0]<<4)&0x30); ch_Base[1] += ((ch_Asc[1]>>4)&0x0f); *(pCurRes+1) = cMap[ch_Base[1]]; ch_Base[2] = (ch_Asc[1]<<2)&0x3c; ch_Base[2] += ((ch_Asc[2]>>6)&0x03); *(pCurRes+2) = cMap[ch_Base[2]]; ch_Base[3] = (ch_Asc[2]&0x3f); *(pCurRes+3) = cMap[ch_Base[3]]; i++; pCurSrc+=3; pCurRes+=4; } if((srcLen%3) == 1) { ch = *pCurSrc; ch = ch>>2; ch = ch&(0x3f); *(pCurRes++) = cMap[ch]; ch = *pCurSrc; ch = ch<<4; ch = ch&(0x30); *(pCurRes++) = cMap[ch]; *(pCurRes++) = '='; *(pCurRes++) = '='; *pCurRes = 0; } else if((srcLen%3) == 2) { ch = *pCurSrc; ch = (ch>>2); ch = ch&(0x3f); *(pCurRes++) = cMap[ch]; ch = *pCurSrc; cha = *(pCurSrc+1); ch = ch<<4; ch = ch&(0x30); cha = (cha>>4); cha = cha&(0x0f); cha += ch; *(pCurRes++) = cMap[cha]; ch = *(pCurSrc+1); ch = ch<<2; ch = (ch&(0x3c)); *(pCurRes++) = cMap[ch]; *(pCurRes++) = '='; *pCurRes = 0; } else *pCurRes = 0; return 1;}int SH_DecodeBase64(char *pBase64Src,char *pASCRes){ int srcLen; char *pCurSrc,*pCurRes; int i=0,j,group; char ch[4],ch_Asc[4]; srcLen = strlen(pBase64Src); if(srcLen % 4 != 0) { *pASCRes = 0; return -1; } group = srcLen/4; pCurSrc = pBase64Src; pCurRes = pASCRes; do { for(j=0;j<4;j++) { ch[j] = *(pCurSrc+j); if(ch[j]>='A' && ch[j]<='Z') { ch_Asc[j] = ch[j] - 'A'; } else if(ch[j]>='a' && ch[j]<='z') { ch_Asc[j] = ch[j] -'a' + 26; } else if(ch[j]>='0' && ch[j]<='9') { ch_Asc[j] = ch[j] - '0' + 52; } else if(ch[j] == '+') { ch_Asc[j] = 62; } else if(ch[j] == '/') { ch_Asc[j] = 63; } else if(ch[j] == '=') { ch_Asc[j] = '='; } else { *pASCRes = 0; return -1; } } *pCurRes = (ch_Asc[0]<<2) + (((ch_Asc[1]&0x30)>>4)&0x0f); if(ch[2]!='=') *(pCurRes+1) = ((ch_Asc[1]&0x0f)<<4) + (((ch_Asc[2]&0x3c)>>2)&0x3f); else { *(pCurRes+1) = (ch_Asc[1]&0x0f)<<4; *(pCurRes+2) = 0; return 1; } if(ch[3]!='=') *(pCurRes+2) = ((ch_Asc[2]&0x03)<<6) + ch_Asc[3]; else { *(pCurRes+2) = (ch_Asc[2]&0x03)<<6; *(pCurRes+3) = 0; return 1; } i++; pCurRes += 3; pCurSrc += 4; }while(i<group); *(pCurRes) = 0; return 1;}BepsPub::BepsPub(){ memset(m_UserNo, 0, 11); memset(m_UserName, 0, 21); memset(m_UserOrgNo, 0, 13); memset(m_UserIpAddr, 0, 16);}//开始事务 void BepsPub::BeginTrans(){ m_clsSybServer.BeginTrans();}//提交事务void BepsPub::CommitTrans(){ m_clsSybServer.CommitTrans();}//回滚事务void BepsPub::RollbackTrans(){ m_clsSybServer.RollbackTrans();}//根据参数代码获取系统控制参数BOOL BepsPub::GetSysCtlPar(char *sParCode,char *sParValue,char *sResDesc){ int nResCode; char sSqlCmd[512]; memset(sSqlCmd, '\0', sizeof(sSqlCmd)); //获取系统控制表的参数 sprintf(sSqlCmd,"SELECT parvalue FROM syspara WHERE parcode='%s'", sParCode); nResCode = clsSybCommand.GetLastRecord(sSqlCmd,sParValue,NTBSTRINGBIND); if ( nResCode <= 0 ) { filelog(CIS_INTER_MB, "GetSysCtlPar=[%d][%s][%s]\n",sqlca.sqlcode,sqlca.sqlerrtext,sSqlCmd); sprintf(sResDesc,"获取系统参数[%s]失败!",sParCode); return FALSE; } return TRUE;}//取工作日期BOOL BepsPub::GetWorkDate(char *WorkDate){ int nResCode; char sSqlCmd[512]; memset(sSqlCmd, '\0', sizeof(sSqlCmd)); //获取系统控制表的参数 sprintf(sSqlCmd,"SELECT currsysdate FROM login" ); nResCode = clsSybCommand.GetLastRecord(sSqlCmd,WorkDate,NTBSTRINGBIND); if ( nResCode <= 0 ) { filelog(CIS_INTER_MB, "GetWorkDate=[%d][%s][%s]\n",sqlca.sqlcode,sqlca.sqlerrtext,sSqlCmd); return FALSE; } return TRUE;}//修改系统控制参数BOOL BepsPub::MdySysCtlPar(char *sParCode,char *sParValue,char *sResDesc){ int nResCode; char sSqlCmd[512]; memset(sSqlCmd, '\0', sizeof(sSqlCmd)); //修改系统控制表的参数 sprintf(sSqlCmd, "UPDATE CISCONCTL SET parvalue = '%s' WHERE parcode ='%s' ", sParValue,sParCode); nResCode = clsSybCommand.Update(sSqlCmd); if ( nResCode <= 0 ) { filelog(CIS_INTER_MB, "MdySysCtlPar=[%d][%s][%s]\n",sqlca.sqlcode,sqlca.sqlerrtext,sSqlCmd); sprintf(sResDesc,"修改系统参数[%s][%s]失败!",sParCode,sParValue); return FALSE; } return TRUE; }//产生业务序列序号BOOL BepsPub::MakeTrxsSerialNo(int *SerialNo,char *sResDesc,char *SerType){ char sSqlCmd[512]; int nResCode = 0; int nSerialNo; memset(sSqlCmd, 0, sizeof(sSqlCmd)); sprintf(sSqlCmd,"SELECT dataid FROM cisserno WHERE sertype='%s'",SerType); nResCode = clsSybCommand.GetLastRecord(sSqlCmd,&nSerialNo , INTBIND); if( nResCode <= 0 ) { filelog("Sql.log","MakeTrxsSerialNo = [%d][%s][%s]\n", sqlca.sqlcode,sqlca.sqlerrtext,sSqlCmd); sprintf(sResDesc,"获取业务序列号[%s]失败!",SerType); return FALSE; } //业务包号采用倒序生成(为避免与正常支付报文包号重复) if( strncmp( SerType , SERIALNO_PKGNO , 1 ) != 0 ) { *SerialNo = nSerialNo; if( nSerialNo == 99999 ) nSerialNo = 1; else nSerialNo += 1; }else{ *SerialNo = nSerialNo; if( nSerialNo == 90000000 ) nSerialNo = 99999999; else nSerialNo -= 1; } memset(sSqlCmd, '\0', sizeof(sSqlCmd)); sprintf(sSqlCmd,"UPDATE cisserno SET dataid = %d WHERE sertype='%s'", nSerialNo ,SerType); nResCode = clsSybCommand.Update(sSqlCmd); if( nResCode <= 0 ) { filelog("Sql.log","MakeTrxsSerialNo = [%d][%s][%s]\n", sqlca.sqlcode,sqlca.sqlerrtext,sSqlCmd); sprintf( sResDesc , "更改业务序列号[%s]失败!",SerType); return FALSE; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -