📄 testiso.cpp
字号:
//
// 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 + -