예제 #1
0
UINT I_DEV_CSC_DLL_IcCheck(void)
{
	char * HexCard;
	initMIF:
	
	while (1)
	{
		
		HexCard = RequestPro();
		if (0!=strlen(HexCard) && CardExist!=MIF_ExistCard  )
		{
			CardExist=MIF_ExistCard;
			memset(hexCardNumber,0x00,9);
			memcpy(hexCardNumber,HexCard,8);
			RequestcardNum= Hex2UINT(HexCard);	
			

			ReadCardInfo("0015",CardData15File);
			ReadCardInfo("0016",CardData16File);
			ReadCardInfo("0019",CardData19File);
			//ReadCardInfo("0008",CardData08File);
			//PostMessage(getHWND(),MSG_CRADENENT,CSC_CARDENTER,RequestcardNum);
			echoic("CardData15File:%s  ",CardData15File );
			echoic("CardData16File:%s  ",CardData16File );
			echoic("CardData19File:%s  ",CardData19File );
			//echoic("CardData08File:%s  ",CardData08File );
			echoic("卡进入HEX:%s DEC:%010u",hexCardNumber,RequestcardNum);

		}
		else if (0==strlen(HexCard) &&  CardExist!=MIF_NoCard)
		{
			CardExist=MIF_NoCard;
			hexCardNumber[0] = 0x00;
			RequestcardNum=0;
			memset(CardData15File,0x00,1024);
			memset(CardData16File,0x00,1024);
			//PostMessage(getHWND(),MSG_CRADENENT,CSC_CARDEXIT,RequestcardNum);  
			echoic("卡离开HEX:%s DEC:%010u",HexCard,RequestcardNum);
		}
		else
		{
			//echoic("状态未改变");
		}
	
		sleep(1);
		usleep(3000);//v1.0.0.183
	}
	goto initMIF;
}
예제 #2
0
int CALLAPI TA_ReadCardSimple(AccountMsg * pAccMsg)
{
	TEST_COM_OPEN;
	int ret;
	TPublishCard card;
	memset(&card,0,sizeof card);
	
	ret = ReadCardInfo(&card);
	if(ret)
	{
		return ERR_TA_READCARD;
	}
	int cardid = atoi((char*)card.CardNo);
	if(cardid <= 0)
		return ERR_TA_READCARD;
	// TODO : 物理卡号格式
	ret = TA_FastGetCardNo(&(pAccMsg->CardNo));
	if(ret != ERR_OK)
		return ret;
	
	src2des(pAccMsg->Name,card.ucName);
	pAccMsg->Balance = card.Money;
	src2des(pAccMsg->SexNo,card.ucSexNo);
	src2des(pAccMsg->StudentCode,card.ucCardNo);
	src2des(pAccMsg->IDNo,card.ucCertificateNo);
	src2des(pAccMsg->ExpireDate,card.DeadLineDate+2);
	src2des(pAccMsg->Password,card.ucPwd);
	src2des(pAccMsg->DeptCode,card.ucDepartmentNo);
	pAccMsg->IsOpenInSys = 1;
	return ERR_OK;
}
예제 #3
0
int CNewCardThread::DoInit()
{
	int ret = -1;
	unsigned long SNR = 0;

	ret = ReadCardSNR(&SNR);
	if (ret)
	{
		Sleep(500);
		return 0;
	}
	CARD_INFO CI;
	char msg[256] = "";
	memset(&CI, 0, sizeof(CI));
	ret = ReadCardInfo(&CI);
	if (ret)
	{
		//GetLastErrMsg(msg);
		//::AfxMessageBox(msg);
		return 0;
	}
	((CReadCardInfoDlg*)m_pMainWnd)->SimulateKeyPress(CI);
	// 就是上一张卡
	/*
	if (SNR == pre_card_id)
	{
		Sleep(500);
		return 0;
	}
	pre_card_id = SNR;

	if (m_pMainWnd)
	{
		ComBeep();
		m_pMainWnd->PostMessage(WM_READ_CARD, ++m_index, 0);
	}
	*/
	Sleep(1000);
	return 0;
}
예제 #4
0
int CNewCardThread::DoInit()
{
	int ret = -1;
	unsigned char ucSerialNo[5];
	char phyid[9] = "";
	char stuemp_no[21] = ""; 
	int _Mode = ((CReadCardInfoDlg*)m_pMainWnd)->m_nInvokeMode;
	SMT_SleepCard();
	// 读取授权卡
	if (_Mode == 0)
	{
		TPublishCard CI;
		memset(&CI, 0, sizeof(CI));
		ret = ReadCardInfo(&CI);
		if (ret)
		{
			return 0;
		}
		((CReadCardInfoDlg*)m_pMainWnd)->SimulateKeyPress(CI);	
	}
	// 从后台获得密钥信息
	else if (_Mode == 1)
	{
		/*
		ret = ReadSerial(ucSerialNo);
		if (ret)
		{
			Sleep(500);
			return 0;
		}
		dec2hex(ucSerialNo, 4, phyid);
		ret = KGetStuempNoByPhyid(phyid, stuemp_no);
		if (ret)
		{	
			return 0;
		}
		((CReadCardInfoDlg*)m_pMainWnd)->SimulateKeyPress(stuemp_no);
		*/
		TPublishCard CI;
		memset(&CI, 0, sizeof(CI));
		ret = ReadCardInfo(&CI);
		if (ret)
		{
			return 0;
		}
		((CReadCardInfoDlg*)m_pMainWnd)->SimulateKeyPress(CI);	
		//SMT_SleepCard();
	}
	else
	{			
		return 0;
	}
//	SMT_SleepCard();
	// 就是上一张卡
	/*
	if (SNR == pre_card_id)
	{
		Sleep(500);
		return 0;
	}
	pre_card_id = SNR;
	*/
	Sleep(1000);
	/*
	if (m_pMainWnd)
	{
		m_pMainWnd->PostMessage(WM_READ_CARD, ++m_index, 0);
	}
	*/
	return 0;
}
예제 #5
0
void testTrans( void ) //测试复合消费
{
	 
	int ret = -1, transMoney =0 ;
	char rsp[1024],szRandom[1024],command[1024],resp[1024],TerminalNo[20],cpuID[20],DateTime[15];

	char m_szproserial[17]  ,m_sn[17] ,szSn[1024],szDesData[100],icRand[100],transNo[10],calcID[3],keyVerID[3];

	char TAC[10],MAC2[20],MAC1[20],offlineTransNo[10];

	DWORD  dwcardno;

	time_t Currenttime = time(NULL);    

	char* temp;
	struct tm *rtc_time;      

	rtc_time = localtime(&Currenttime);        

	sprintf(DataTimeStr, "%04d%02d%02d%02d%02d%02d%c",rtc_time->tm_year+1900, rtc_time->tm_mon+1, rtc_time->tm_mday,rtc_time->tm_hour, rtc_time->tm_min, rtc_time->tm_sec,'\0');  


	printf("----瑞华赢读写器 LINUX 非现金支付复合消费 测试---------\n"); 

	 

	//ret = Open_Card(iComno, &dwcardno);
	//printf("-->Open_Card ret =%d \n",ret );
     

	memset(rsp,0,sizeof(rsp));  
	ret = USR_SelectSAM( 1 );
	printf("-->SAM复位即选择SAM%d ret=%d, rsp=%s \n",1,ret, rsp ); 
	if(ret!= T )
	{
		printf("\n Error on USR_SelectSAM!\n");
		return;
	}
 
	//SAM复位 
	sprintf(command,"55aa0182");
	sprintf(rsp,"%s",(char *)SendCommand(command ));
 
	printf("-->SAM复位 ret=%d,  rsp=%s\n",ret ,rsp );

	//读0015文件,取得区 发卡方标识=(4字节发行区域代码*2)

	memset(rsp,0,sizeof(rsp)); 
	ReadCardInfo("0015",CardData15File);
    sprintf(rsp,"%s",CardData15File);
	//ret = CPU_Get0015(m_szproserial,rsp,m_sn); 
	sprintf(m_sn,"%.16s",rsp);
	printf("-->读0015文件 ret=%d,m_sn=%s, rsp=%s \n",ret,m_sn, rsp );  

	//选择目录1001 
	sprintf(command,"00A40000021001");
	sprintf(rsp,"%s",(char *)ExcCPUCmd(command ));

	memset(cpuID,0,sizeof(cpuID));
	sprintf(cpuID,"%.16s",rsp + 68 + 12 );
	printf("-->选择目录1001 ret=%d,cpuID =%s, rsp=%s\n",ret, cpuID,rsp );

	 
	//读0019文件
	//00b0是读二进制文件.
	//0019文件是变长记录文件来的所以要使用00b2来读.
	//00B2  01  CC2B
	//这个01就是记录号.

	memset(rsp,0,sizeof(rsp));
	sprintf(command,"00B201CC2B");
	sprintf(rsp,"%s",(char *) ExcCPUCmd(command ));

	printf("-->读0019文件 记录1 ret=%d, rsp=%s\n",ret, rsp );


	//memset(rsp,0,sizeof(rsp));
	//ret=PRO_GetBallance(iComno,2,rsp,sizeof(rsp),resp);

	memset(rsp,0,sizeof(rsp));
	sprintf(command,"805C000204");
	sprintf(rsp,"%s", (char *)ExcCPUCmd(command ));


	printf("-->读取余额 ret=%d, rsp=%s \n",ret, rsp ); 



	/*memset(rsp,0,sizeof(rsp)); 
	sprintf(command,"0084000004\0");
	ret = SAM_Command(iComno,command,rsp);
	sprintf(TerminalNo,"%s",rsp);
	printf("-->读取SAM卡随机数 ret=%d, rsp=%s \n",ret, rsp );  
	*/
    
	memset(rsp,0,sizeof(rsp)); 
	memset(TerminalNo,0,sizeof(TerminalNo));
	memset(command,0x00,sizeof(command)); 
	sprintf(command,"00B0960006");
	command[10] = 0x00;
 
	sprintf(rsp,"%s", (char *)ExcSAMCmd(command ));
 
	sprintf(TerminalNo,"%.18s",rsp + 8);
	printf("-->读取SAM卡终端号 ret=%d, TerminalNo=%s,rsp=%s \n",ret,TerminalNo, rsp ); 

	transMoney = 1 ; //消费金额

	if( 0 == 0 )
	{
		memset(rsp,0x00,sizeof(rsp));
		memset(icRand,0x00,sizeof(icRand));
		memset(transNo,0x00,sizeof(transNo));
		memset(keyVerID,0x00,sizeof(keyVerID));
		memset(calcID,0x00,sizeof(calcID));
		sprintf(command,"805003020B01%.8x%.12s",transMoney ,TerminalNo);
		//ret = PRO_Command(iComno,command,rsp);
		ret = 0;
		sprintf(rsp,"%s", (char *)ExcCPUCmd(command ) + 12 );


		if(ret == 0 )
		{		
			sprintf(transNo, "%.4s",rsp+8);  
			sprintf(icRand, "%.8s",rsp+22); 
			sprintf(keyVerID, "%.2s",rsp+18);
			sprintf(calcID, "%.2s",rsp+20); 
		}
		printf("-->复合交易初始化 消费 并取得随机 ret=%d, rsp=%s ,icRand=%s,transNo=%s,keyVerID=%s,calcID=%s\n",ret, rsp ,icRand,transNo,keyVerID,calcID);
	}

	//消费初始化成功后->写0019->计算MAC1->消费->校验MAC2

	//写0019文件
	memset(rsp,0,sizeof(rsp)); 
	sprintf(command,"80DCAAC82BAA2900%.80s","000500467B4ABDC4BA010300000000000000000000100003C9F24332333034380000000000000000");
	//ret = PRO_Command(iComno,command,rsp); 
	sprintf(rsp,"%s", (char *)ExcCPUCmd(command ));
	printf("-->写0019文件 ret=%d, rsp=%s \n",ret, rsp );  

	//选择到SAM卡 df01目录.
	memset(rsp,0,sizeof(rsp));  
	sprintf(command,"00a4000002df01"); 
	sprintf(rsp,"%s", (char *)ExcSAMCmd(command ));
	printf("-->选择到SAM卡 df01目录 command=%s,ret=%d, rsp=%s \n",command,ret, rsp ); 
	if(ret!=0)
	{
		printf("\n Error on CPU_reset!\n");
	}

	//计算MAC1
	memset(rsp,0,sizeof(rsp)); 
	memset(DateTime,0,sizeof(DateTime)); 
	sprintf(DateTime, "%.14s",DataTimeStr );
	//命令的最后是 8字节应用卡号+(4字节发行区域代码*2)
	sprintf(command,"8070000024%.8s%.4s%.8x09%.14s%.2s%.2s%.16s%.8s%.8s",icRand,transNo,transMoney ,DateTime,keyVerID,calcID,cpuID,m_sn,m_sn);
	printf("-->计算MAC1 command=%s \n",command ); 
	 
	sprintf(rsp,"%s", (char *) ExcSAMCmd(command ) + 8);
	memset(MAC1,0,sizeof(MAC1)); 
	memset(offlineTransNo,0,sizeof(offlineTransNo)); 
	sprintf(offlineTransNo, "%.8s",rsp   );
	sprintf(MAC1, "%.8s",rsp + 8 ); 
	printf("-->计算MAC1 ret=%d,offlineTransNo=%s,MAC1 =%s, rsp=%s \n",ret,offlineTransNo,MAC1, rsp );  



	//消费
	memset(rsp,0,sizeof(rsp)); 
	sprintf(command,"805401000F%.8s%.14s%.8s",offlineTransNo,DateTime, MAC1);
	sprintf(rsp,"%s",(char *) ExcCPUCmd(command )  );
	printf("-->消费 command=%s \n",command );
	memset(TAC,0,sizeof(TAC)); 
	memset(MAC2,0,sizeof(MAC2));  
	sprintf(TAC, "%.8s",rsp +12  );
	sprintf(MAC2, "%.8s",rsp + 8  + 12 ); 
	printf("-->消费 ret=%d, TAC=%s,MAC2=%s ,rsp=%s \n",ret,TAC,MAC2, rsp );  

	//校验MAC2
	memset(rsp,0,sizeof(rsp)); 
	sprintf(command,"8072000004%.8s",MAC2);
	sprintf(rsp,"%s",(char *) ExcSAMCmd(command ));
	printf("-->校验MAC2 command=%s \n",command ); 
	printf("-->校验MAC2 ret=%d,   rsp=%s \n",ret,  rsp );  

	memset(rsp,0,sizeof(rsp));
	sprintf(command,"805C000204");
	sprintf(rsp,"%s", (char *)ExcCPUCmd(command ));


	printf("-->读取余额 ret=%d, rsp=%s \n",ret, rsp ); 


}