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

📄 testiso.cpp

📁 ISO 8583 implementation.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//
// IT24 Sistemas S.A.
// Application ISO-8583 Messages as released by ACI-BASE24 Release 4 & 6
//
// Libreria Propietaria de Mensajes ISO Aplicados
//
// Tarea        Fecha           Autor   Observaciones
// (Beta)       2002.08.05      mdc     EXPORT int ISO_Test(BYTE *bBuffer, int iBuffer, bool bFields, FILE* fOutput);
// (Release-1)  2003.08.29      mdc     Verificacion de campo 39 faltante en el mensaje si es reverso
// (Release-2)  2005.08.31      mdc     Descripcion en INGLES de los codigos de Trx
//
// Headers propios
// Header Type Definitions
#include <qusrinc/typedefs.h>
// Aliases
#include <qusrinc/alias.h>
// ISO-8583
#include <qusrinc/iso8583.h>
// ISO-APP Msg
#include <qusrinc/isoapp.h>
// ISO-MSG REDEFINITIONS
#include <qusrinc/isoredef.h>
// Own std.io library 
#include <qusrinc/stdiol.h>

// C Language string library
#include <string.h>


#ifndef BUFFER_SIZE
#define BUFFER_SIZE		(8192)
#endif // BUFFER_SIZE
// Boolean String Constants
const char szTRUE[]  = "TRUE";
const char szFALSE[] = "FALSE";		
// Boolean String Parser
#define BoolStr( x ) ((x) ? szTRUE : szFALSE )

// ISO Test
EXPORT int ISO_Test(BYTE *bBuffer, int iBuffer, bool bFields, 
					char* szOutFile, bool bTruncate)
	{
	// ISO8583 object and secondary fields
	APPMSG        isoMsg;
	BOOL          bResult					= FALSE,
	              bCheckIt					= FALSE;
	WORD          wFieldLength				= 0;
	BYTE          szMsgType[10] 			= {""};
	BYTE          szFieldDesc[64]			= {""};
	BYTE          szFieldValue[BUFFER_SIZE] = {""};
	ADDAMTS_ISO   stAddAmts;
    const ADDAMTS_ISO *pstCBU = &stAddAmts;
	SECRSRVD8_ISO stSecRes8;
	SECRSRVD7_ISO stSecRes7;
	PRIRSRVD1_ISO stRsrvd1;
	FILE          *fOutput = NULL;
	CHAR          szTranCode[10] = {"000000"};
	PCHAR         pszTranCodeDesc = "N/A";


	// Precondition
	if(NULL == szOutFile || iBuffer <= 0 || NULL == bBuffer)
		return (-1);
	// Verify output file
	if ( bTruncate )
	{
		// Open truncating
		if ((fOutput = fopen(szOutFile, "w")) ==NULL )
			return (-2);
	}
	else 
	{
		// Open appending
		if ((fOutput = fopen(szOutFile, "a")) ==NULL )
			return (-2);
	};


	
	// Just do it...	
	bCheckIt = isoMsg.CheckExternParameters(NULL);

	if( !(bResult = isoMsg.Import((PBYTE)bBuffer, iBuffer)) )
	{
		//printf("PAS Message=[%s]\n",bBuffer);
		fprintf(fOutput,"PAS Message=[%s]\n",bBuffer);
		bResult = FALSE;
#if ( _ISO8583_FORMAT_TO_USE_ & _ISO8583_FORMAT_FOR_REDLINK_ )
		bResult=isoMsg.IsPASPaymentFromPOSTerminal();
#endif
		//printf("PAS-Payment-From-POS=%s\n", BoolStr(bResult));
		fprintf(fOutput,"PAS-Payment-From-POS=%s\n", BoolStr(bResult));
	}
		
	bResult = isoMsg.IsValidMessage();	

#if ( _ISO8583_FORMAT_TO_USE_ & _ISO8583_FORMAT_FOR_REDLINK_ )
	if(isoMsg.IsPASTransaction())	
	{
		//printf("PAS Message=[%s]\n",bBuffer);
		fprintf(fOutput,"PAS Message=[%s]\n",bBuffer);
		bResult=isoMsg.IsPASPaymentFromPOSTerminal();
		//printf("PAS-Payment-From-POS=%s\n", BoolStr(bResult));
		fprintf(fOutput,"PAS-Payment-From-POS=%s\n", BoolStr(bResult)); 
	}
	else if(isoMsg.IsAFJPTransaction())	
	{
		//printf("AFJP Message=[%s]\n",bBuffer);
		fprintf(fOutput, "AFJP Message=[%s]\n",bBuffer);
	}
	else if(isoMsg.IsULTMOVTransaction())	
	{
		//printf("AFJP Message=[%s]\n",bBuffer);
		fprintf(fOutput, "AFJP Message=[%s]\n",bBuffer);
	}
	else if(isoMsg.IsSOATTransaction())	
	{
		//printf("SOAT Message=[%s]\n",bBuffer);
		fprintf(fOutput, "\nSOAT Message=[%s]\n",bBuffer);
	}
#endif // ( _ISO8583_FORMAT_TO_USE_ & _ISO8583_FORMAT_FOR_REDLINK_ )

	if(isoMsg.IsATMTransaction())	
	{
		//printf("ATM Message=[%s]\n",bBuffer);
		fprintf(fOutput, "\nATM Message=[%s]\n",bBuffer);
	}
	else
	{
		//printf("ISO-8583 Message=[%s]\n",bBuffer);
		fprintf(fOutput,"\nISO-8583 Message=[%s]\n",bBuffer);
	}

	// Header [0..31]
	//printf("\n#Header=[%-32.32s]\n", (PSTR)bBuffer);	
	bFields?fprintf(fOutput,"\n#Header=[%-32.32s]\n", (PSTR)bBuffer):0;	
	// Primary Bitmap [16..31]
	//printf("#PrimaryBitmap=[%-16.16s]\n", (PSTR)&bBuffer[16]);	
	bFields?fprintf(fOutput,"#PrimaryBitmap=[%-16.16s]\n", (PSTR)&bBuffer[16]):0;	
	
	// MsgType
	wFieldLength = sizeof szMsgType;
	bResult = isoMsg.GetMsgTypeId( szMsgType, wFieldLength );
	//printf("#MsgType=[%s]-Valid?=[%s]\n\n", szFieldValue, BoolStr(bResult));	
	bFields?fprintf(fOutput,"#MsgType=[%s]\n\n", szMsgType):0;	
	
	// For each field present...
	for(int i=1,j=0; i < 128; i++)
	{
		// Check presence...
		if (!isoMsg.IsValidField( i )) continue ;

		// Increment field presence counter
		j++;

		// Field Descriptions		
		switch ( i )
		{			
			case 1  : strcpy( (PSTR)szFieldDesc, "-SecBitmap"); break;
			case 2  : strcpy( (PSTR)szFieldDesc, "-PAN"); break;
			case 3  : strcpy( (PSTR)szFieldDesc, "-TranCode"); break;
			case 4  : strcpy( (PSTR)szFieldDesc, "-Ammount"); break;
			case 7  : strcpy( (PSTR)szFieldDesc, "-XMitDatTim"); break;
			case 11 : strcpy( (PSTR)szFieldDesc, "-TraceNum"); break;
			case 12 : strcpy( (PSTR)szFieldDesc, "-TranTim"); break;
			case 13 : strcpy( (PSTR)szFieldDesc, "-TranDat"); break;
			case 14 : strcpy( (PSTR)szFieldDesc, "-ExpDat"); break;
			case 15 : strcpy( (PSTR)szFieldDesc, "-SetlDat"); break;
			case 17 : strcpy( (PSTR)szFieldDesc, "-PostDate"); break;
			case 19 : strcpy( (PSTR)szFieldDesc, "-CntryCde"); break;
			case 23 : strcpy( (PSTR)szFieldDesc, "-Member"); break;
			case 24 : strcpy( (PSTR)szFieldDesc, "-NetID"); break;
			case 32 : strcpy( (PSTR)szFieldDesc, "-InstID"); break;
			case 34 : strcpy( (PSTR)szFieldDesc, "-PANext"); break;
			case 35 : strcpy( (PSTR)szFieldDesc, "-Track2"); break;
			case 37 : strcpy( (PSTR)szFieldDesc, "-RefNum"); break;
			case 36 : strcpy( (PSTR)szFieldDesc, "-Track3"); break;
			case 39 : strcpy( (PSTR)szFieldDesc, "-RespCode"); break;
			case 41 : strcpy( (PSTR)szFieldDesc, "-TermID"); break;
			case 42 : strcpy( (PSTR)szFieldDesc, "-AccpID"); break;
			case 43 : strcpy( (PSTR)szFieldDesc, "-TermName"); break;
			case 44 : strcpy( (PSTR)szFieldDesc, "-RespData"); break;
			case 46 : strcpy( (PSTR)szFieldDesc, "-AddDataISO"); break;
			case 48 : strcpy( (PSTR)szFieldDesc, "-AddDataPrvt"); break;
			case 49 : strcpy( (PSTR)szFieldDesc, "-Currency"); break;
			case 52 : strcpy( (PSTR)szFieldDesc, "-PIN"); break;
			case 54 : 
                if(isoMsg.IsATMTransferCBU()) // Transferencia x CBU
                    strcpy( (PSTR)szFieldDesc, "-CBU"); 
                else
                    strcpy( (PSTR)szFieldDesc, "-AddAmts"); 
                break;
			case 55 : strcpy( (PSTR)szFieldDesc, "-PriRsrvd1ISO"); break;
			case 60 : strcpy( (PSTR)szFieldDesc, "-PriRsrvd1Prvt"); break;
			case 61 : strcpy( (PSTR)szFieldDesc, "-PriRsrvd2Prvt"); break;
			case 63 : strcpy( (PSTR)szFieldDesc, "-PriRsrvd4Prvt"); break;
			case 70 : strcpy( (PSTR)szFieldDesc, "-NetMngmnt"); break;
			case 100: strcpy( (PSTR)szFieldDesc, "-RcvInstID"); break;
			case 102: strcpy( (PSTR)szFieldDesc, "-Acct1"); break;
			case 103: strcpy( (PSTR)szFieldDesc, "-Acct2"); break;
			case 124: strcpy( (PSTR)szFieldDesc, "-SecRsrvd5"); break;
			case 125: strcpy( (PSTR)szFieldDesc, "-SecRsrvd6"); break;
			case 126: strcpy( (PSTR)szFieldDesc, "-SecRsrvd7"); break;
			case 127: strcpy( (PSTR)szFieldDesc, "-SecRsrvd8"); break;
			default : strcpy( (PSTR)szFieldDesc, ""); break;
			}

		// Specific Field Printing
		if(i == 127)
			{
			// Field #127, Micr-Data
			szFieldValue[0] = 0x00;
			memset((PBYTE)&stSecRes8, 0, sizeof stSecRes8);	
			wFieldLength = sizeof stSecRes8;
			bResult = isoMsg.GetField( 127,
				                    &wFieldLength, 
					                (PBYTE)&stSecRes8,
									sizeof stSecRes8 );
			if( strcmp((char *)szMsgType,"0200")==0 || 
				strcmp((char *)szMsgType,"0220")==0 ||
				strcmp((char *)szMsgType,"0420")==0 )
				// Cotizaciones campo 127, requerimiento
				fprintf(fOutput,
					"#127-Micr-Data[%i]=[Region=%.*s][CambioC=%.*s][CambioV=%.*s]\n"
					"                   [Cambio1=%.*s][Cambio2=%.*s]\n",
					wFieldLength, 
					4,stSecRes8.stATM.stATM_Dl_Rqst.chRegnId  ,
					8,stSecRes8.stATM.stATM_Dl_Rqst.chCambio_C, 
					8,stSecRes8.stATM.stATM_Dl_Rqst.chCambio_V, 
					8,stSecRes8.stATM.stATM_Dl_Rqst.chCambio_1, 
					8,stSecRes8.stATM.stATM_Dl_Rqst.chCambio_2		);
			else

⌨️ 快捷键说明

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