📄 stock_0212.ec
字号:
/* * 证券交易系统,城综网帐户信息校验 打包解包模块() * 帐户种类: 储蓄卡 */#include <stdio.h>#include "../incl/lu62.h"#include "../incl/bank.h"$include sqlca;extern SEND_NET_0212 send_net_0212;extern RECV_NET_0212 recv_net_0212;#define ASCII "IBM-eucCN" /* ASCII code page **/#define EBCDIC "IBM-935" /* EBCDIC (Host) code page **/#define A2E 1 /* translate ASCII to EBCDIC **/#define E2A 2 /* translate EBCDIC to ASCII **/#define HEADLEN 7extern WORKER *wk;#define MAX_BUFFERSIZE 1024extern int get_host_trace( char * );tohost_stock_0212(){ int i,sendlen,recvlen,net_err; unsigned char sendstr[512],recvstr[512]; i = inq_acc_0212( sendstr, &sendlen ); if ( i < 0 ) { WriteLog ( LOGFILE,"inq_acc_0212 err!"); return ( -1 ); } return ( 0 );}int inq_acc_0212 ( sendstr,sendlen )int *sendlen;unsigned char *sendstr; { int recvlen,net_err,retcode,loop,length, i; char sideinfo[9] = "SAVCICSB",str[100] ; unsigned char recvstr[512]; if ( pack_host_inq_0212(sendstr, &sendlen ) ) { WriteLog ( LOGFILE,"pack_host_inq_0212 err!"); return ( -1 ); } retcode = LUFunction(LU_ALLOC, sideinfo, NULL, NULL); WriteLog ( LOGFILE,"检查LU连路结束!"); if (retcode != 0) { strcpy ( send_net_0212.retcode, "8999" ); strcpy ( send_net_0212.errmsg,"系统错误"); WriteLog ( LOGFILE,"LU_ALLOC err:[%d]",retcode); return(-1); } retcode = LUFunction(LU_SEND, &sendlen, sendstr); WriteLog ( LOGFILE,"向9000发送数据结束!"); if (retcode != 0) { LUFunction(LU_FREE); strcpy ( send_net_0212.retcode, "8999" ); strcpy ( send_net_0212.errmsg,"系统错误"); WriteLog ( LOGFILE,"LU_SEND err:[%d]",retcode); return(-1); } length = MAX_BUFFERSIZE; retcode = LUFunction(LU_RECEIVE, &length, recvstr); WriteLog ( LOGFILE,"接收9000返回数据结束!"); if (retcode != 0) { LUFunction(LU_FREE); strcpy ( send_net_0212.retcode, "8999" ); strcpy ( send_net_0212.errmsg,"系统错误"); WriteLog ( LOGFILE,"LU_RECEIVE err:[%d]",retcode); return(-1); } sendlen = 1; strcpy(sendstr,"1"); retcode = LUFunction(LU_SENDTRUE, &sendlen, sendstr); WriteLog ( LOGFILE,"向9000发送确认数据结束!"); if (retcode != 0) { LUFunction(LU_FREE); strcpy ( send_net_0212.retcode, "8999" ); strcpy ( send_net_0212.errmsg,"系统错误"); WriteLog ( LOGFILE,"LU_SENDTRUE err:[%d]",retcode); return(-1); } LUFunction(LU_FREE); unpk_host_inq_0212(recvstr,length); return(0);}int pack_host_inq_0212(sendbuf, sendlen)int *sendlen;unsigned char *sendbuf;{ int len, i; char tmp[256]; char merchant_id[10],host_ls[7]; char worker_4[5], active[2]; char amount[13]; char tmp_pan2[4]; struct head hd; strcpy(hd.jym, "2210"); strcpy(hd.gzh,wk->worker_4); strcpy(hd.sqjb, "000000"); strcpy(hd.bz, "0"); strcpy( hd.sqyh, hd.gzh ); if( get_host_trace(host_ls) < 0 ) { WriteLog(LOGFILE, "get_host_trace err!"); return (-1); } hd.lsh = atoi ( host_ls ); memcpy( sendbuf, headstr( hd ), 27 ); memcpy( tmp,&recv_net_0212.account[3],13); /* 16位卡 */ tmp[13] = '\0'; len = Hmeg( sendbuf, 27, tmp, L_KH1 ); /* 卡号1 */ memset(tmp,0,sizeof(tmp)); memcpy(tmp,&recv_net_0212.account[16],3 ); /* 19位卡 */ tmp[3] = '\0'; len = Hmeg(sendbuf,len,tmp,L_KH2); /* 密码 */ len = Hmeg( sendbuf, len, recv_net_0212.password, 0x51 ); len = Hmeg( sendbuf, len, "000000", 0x51 ); /* OFFSET */ len = Hmeg( sendbuf, len, "2", 0x51 ); /* 0 - check pin offset,1 - not check */ sendbuf[ len++ ] = 0xff; /* 结束标志 */ *sendlen = len; return (0);}int unpk_host_inq_0212(recvbuf, recvlen )short recvlen;unsigned char *recvbuf;{ int flag,i, j, result, retcode; char err1[10], err2[10]; char xm[10],sfz[20],dz[16],ztbz[4]; result = 1; /* packet format error */ if ( recvbuf[ 0 ] != 0x03 || recvbuf[ 1 ] != 0x00 || recvbuf[ 2 ] < 0x00 || recvbuf[ 2 ] > 0x09 && recvbuf[ 2 ] != 0x0f ) { strcpy ( send_net_0212.retcode, "8999" ); strcpy ( send_net_0212.errmsg,"系统错误"); return( -1 ); } /* Accept by host */ if ( recvbuf[ 2 ] == 0x09 ) { result = 0; recvlen=Hemg2(recvbuf,7,xm,0x42); recvlen=Hemg1(recvbuf,recvlen,sfz,0x43); recvlen=Hemg2(recvbuf,recvlen,dz,0x44); recvlen=Hemg1(recvbuf,recvlen,ztbz,0x45); for (i=0;ztbz[i]!='\0';i++) ztbz[i]= 0x30 + ( 0x0f & ztbz[i] ); if ( !memcmp (ztbz,"000",3 ) ) { strcpy ( send_net_0212.retcode, "0000" ); strcpy ( send_net_0212.errmsg,"交易成功"); } else { strcpy ( send_net_0212.retcode, "8009" ); strcpy ( send_net_0212.errmsg,"帐户状态错"); } } /* Reject by host */ else { result = -1; for( i = 7, j = 0; i < 11; i++, j++ ) err1[ j ] = recvbuf[ i ]; asc( err1, 4, err2 ); result = atoi( err2 ); if( result >= 41 && result <= 47 ) result = 34; switch( result ) { case 18: case 84: case 25: retcode = 14; strcpy ( send_net_0212.retcode, "8007" ); strcpy ( send_net_0212.errmsg,"无此卡帐户"); break; case 53: retcode = 57; strcpy ( send_net_0212.retcode, "8999" ); strcpy ( send_net_0212.errmsg,"卡帐户"); break; case 37 : case 70: case 112: retcode = 58; strcpy ( send_net_0212.retcode, "8999" ); strcpy ( send_net_0212.errmsg,"卡帐户"); break; case 31: retcode = 15; strcpy ( send_net_0212.retcode, "8999" ); strcpy ( send_net_0212.errmsg,"卡帐户"); break; case 59: case 60: case 39: retcode = 41; strcpy ( send_net_0212.retcode, "8009" ); strcpy ( send_net_0212.errmsg,"卡在黑名单中"); break; case 50: retcode = 34; strcpy ( send_net_0212.retcode, "8009" ); strcpy ( send_net_0212.errmsg,"卡状态错"); break; case 54: retcode = 14; strcpy ( send_net_0212.retcode, "8007" ); strcpy ( send_net_0212.errmsg,"无此卡号"); break; case 51: retcode = 14; strcpy ( send_net_0212.retcode, "8007" ); strcpy ( send_net_0212.errmsg,"无此卡号"); break; case 49: retcode = 62; strcpy ( send_net_0212.retcode, "8012" ); strcpy ( send_net_0212.errmsg,"交易超限额"); break; case 62: retcode = 13; strcpy ( send_net_0212.retcode, "8012" ); strcpy ( send_net_0212.errmsg,"交易超限额"); break; case 63: retcode = 12; strcpy ( send_net_0212.retcode, "8001" ); strcpy ( send_net_0212.errmsg,"无效交易"); break; case 64: retcode = 41; strcpy ( send_net_0212.retcode, "8009" ); strcpy ( send_net_0212.errmsg,"卡在黑名单中"); break; case 65: retcode = 34; strcpy ( send_net_0212.retcode, "8007" ); strcpy ( send_net_0212.errmsg,"非本行卡"); break; case 66: retcode = 14; strcpy ( send_net_0212.retcode, "8007" ); strcpy ( send_net_0212.errmsg,"无此卡号"); break; case 75: case 130: case 55: retcode = 51; strcpy ( send_net_0212.retcode, "8012" ); strcpy (send_net_0212.errmsg,"取现超信用额度"); break; case 104: case 87: retcode = 40; strcpy ( send_net_0212.retcode, "8001" ); strcpy ( send_net_0212.errmsg,"主机无此交易"); break; case 24: retcode = 12; strcpy ( send_net_0212.retcode, "8001" ); strcpy ( send_net_0212.errmsg,"无效交易"); break; case 68: retcode = 55; strcpy ( send_net_0212.retcode, "8011" ); strcpy ( send_net_0212.errmsg,"密码不符"); break; case 89: case 115: retcode = 4; strcpy ( send_net_0212.retcode, "8007" ); strcpy ( send_net_0212.errmsg,"主机无此商户"); break; default: retcode = 12; strcpy ( send_net_0212.retcode, "8001" ); strcpy ( send_net_0212.errmsg,"无效交易"); break; } } return( 0 );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -