📄 isoapp.cpp
字号:
//
// IT24 Sistemas S.A.
// Application ISO-8583 Messages as stated for ACI BASE24 RELEASE 4 and 6
//
// Libreria Propietaria de Mensajes ISO Aplicados
//
// Tarea Fecha Autor Observaciones
// (Inicial) 1998.06.23 mdc Base. PAS y ULTMOV. Base24 Release 4.
// (Alfa) 1998.07.02 mdc Base. AFJP.
// (Beta) 1998.07.23 mdc Extensiones SOAT. Logon.
// (Beta) 1998.07.27 mdc Extensiones SOAT. Logoff.
// (Beta) 1998.07.31 mdc Public-Protected-Private revisado
// (Beta) 1998.08.04 mdc CheckExternParameters
// (Beta) 1998.08.11 mdc SOAT: GenericRequest/Inquiry/Update/Delete/Insert
// (Beta) 1998.10.13 mdc SOAT: GenericRequest/Inqueiry/Update/Delete/Insert Tarj
// (Beta) 1998.10.15 mdc SOATSystemCmd
// (Beta) 1998.10.20 mdc Mas transacciones SOAT
// (Beta) 1998.10.27 mdc Reversos contemplados en trxs SOAT
// (Beta) 1998.11.05 mdc TranCodes genericos de 6 digitos numericos
// (Beta) 1999.03.31 mdc SOATLogonPassword();
// (Beta) 2000.02.15 mdc CheckExternParameters() ampliada.
// (Beta) 2001.12.31 mdc ATM Messages y BOOL IsControlCenterCommand(void).
// (Delta) 2005.07.18 mdc Base24 Release 6. BANELCO (Argentina)
// (Delta) 2005.09.01 mdc Varios codigos para TRANSFERENCIAS. Diferencia x PRODUCTO.
// (Delta) 2005.09.05 mdc WORD APPMSG::ExpandFields(void)... and other improvements.
//
// Header propio
#include <qusrinc/isoapp.h>
// Header formatos ISO8583 RED LINK
#include <qusrinc/isoredef.h>
// Header ANSI C/C++
#include <memory.h>
// Header Types ANSI
#include <ctype.h>
// Header STRING
#include <string.h>
// Archivo de inicializacion por deafult ISO8583
#define ISO8583_PROFILE_NAME "ISO8583.INI"
// Network Management Request
EXPORT BOOL APPMSG::IsNetworkMgmtRequest(void)
{
// Network request?
return( ISO8583MSG::IsNetworkMgmtRequest() );
}
// Network Management Response
EXPORT BOOL APPMSG::IsNetworkMgmtResponse(void)
{
// Network response?
return( ISO8583MSG::IsNetworkMgmtResponse() );
}
// Control Center Command
EXPORT BOOL APPMSG::IsControlCenterCommand(void)
{
// Not implemented
return( FALSE );
}
// Verificacion externa de parametros
EXPORT BOOL APPMSG::CheckExternParameters(PBYTE pbFileName)
{
// Temp. return value
BOOL bReturnValue = FALSE;
// Retorno de configuracion parametrica de bitmaps
bReturnValue = (pbFileName == NULL)
? GetAllBitmapsDescriptions((PSTR)ISO8583_PROFILE_NAME)
: GetAllBitmapsDescriptions((PSTR)pbFileName);
// Retorno de configuracion parametrica de campos
bReturnValue = (pbFileName == NULL)
? GetFieldsDescription((PSTR)ISO8583_PROFILE_NAME)
: GetFieldsDescription((PSTR)pbFileName);
// Return value
return (bReturnValue);
}
EXPORT BOOL APPMSG::IsATMTransaction(void) // ATM?
{
// El Tipo de Trx esta alguno Ok?
if( IsATMBalanceInquiry() || // Consulta de saldos
IsATMTransfer() || // Transferencia
IsATMTransferCBU() || // Transferencia x CBU
IsATMTransferInterbank() || // Transferencia interbancaria
IsATMWithdrawal() || // Extraccion
IsATMDeposit() || // Deposito
IsATMFastCash() || // FastCash o compra
IsATMAccountVerification() || // Verificacion cuenta destino
IsATMPayment() || // Pagos
IsATMBuying() || // Compras y relacionados
IsATMAutServicePayment() || // Pagos Automatico de Servs.
IsATMOthersMsgs() || // Otros mensajes
IsATMLastMovInquiry() || // Ult. Movimientos
IsATMPinChange() || // Cambio de PIN
IsATMAssignHomeBankUser() || // Asigancion usuario HB
IsATMExchangeRateInquiry() // Consulta tipo de cambio
)
return (TRUE);
// Tipo Trx invalido
return (FALSE);
}
BOOL APPMSG::IsValidFromAccountType(int iOffset) // Tipo de Cta valido ?
{
#if ( _BASE24_CURRENT_VERSION_ == _BASE24_RELEASE4_ )
return ( (memcmp((PBYTE)&chMsg[iOffset+2], B24_CHECKINGS_ACCOUNT_USD , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_SAVINGS_ACCOUNT , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_SPECIAL_ACCOUNT_AFJP , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_SAVINGS_ACCOUNT_BOND , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_SAVINGS_ACCOUNT_USD , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_CHECKINGS_ACCOUNT , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_CHECKINGS_ACCOUNT_BOND, 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_CREDIT_CARD_ACCOUNT , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_CREDIT_LINE_ACCOUNT , 2) == 0) ||
// Default efectivo
(memcmp((PBYTE)&chMsg[iOffset+2], "00" , 2) == 0));
#else
return ( (memcmp((PBYTE)&chMsg[iOffset+2], B24_CHECKINGS_ACCOUNT_USD , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_SAVINGS_ACCOUNT , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_SAVINGS_ACCOUNT_USD , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_CHECKINGS_ACCOUNT , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_CREDIT_CARD_ACCOUNT , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_CREDIT_ACCOUNT , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+2], B24_TRANSFER_ACCOUNT_CBU , 2) == 0) ||
// Default efectivo
(memcmp((PBYTE)&chMsg[iOffset+2], "00" , 2) == 0));
#endif
}
BOOL APPMSG::IsValidToAccountType(int iOffset) // Tipo de Cta valido ?
{
#if ( _BASE24_CURRENT_VERSION_ == _BASE24_RELEASE4_ )
return ( (memcmp((PBYTE)&chMsg[iOffset+4], B24_CHECKINGS_ACCOUNT_USD , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_SAVINGS_ACCOUNT , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_SPECIAL_ACCOUNT_AFJP , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_SAVINGS_ACCOUNT_BOND , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_SAVINGS_ACCOUNT_USD , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_CHECKINGS_ACCOUNT , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_CHECKINGS_ACCOUNT_BOND, 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_CREDIT_CARD_ACCOUNT , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_CREDIT_LINE_ACCOUNT , 2) == 0) ||
// "02" : Caso especial RED LINK para operaciones en moneda US$, DOLARES
// No es estandard, como ya es constumbre, y viola el estandard
(memcmp((PBYTE)&chMsg[iOffset+4], "02" , 2) == 0) ||
// Default efectivo
(memcmp((PBYTE)&chMsg[iOffset+4], "00" , 2) == 0));
#else
return ( (memcmp((PBYTE)&chMsg[iOffset+4], B24_CHECKINGS_ACCOUNT_USD , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_SAVINGS_ACCOUNT , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_SAVINGS_ACCOUNT_USD , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_CHECKINGS_ACCOUNT , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_CREDIT_CARD_ACCOUNT , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_CREDIT_ACCOUNT , 2) == 0) ||
(memcmp((PBYTE)&chMsg[iOffset+4], B24_TRANSFER_ACCOUNT_CBU , 2) == 0) ||
// Default efectivo
(memcmp((PBYTE)&chMsg[iOffset+4], "00" , 2) == 0));
#endif
}
EXPORT BOOL APPMSG::IsATMWithdrawal(void) // Extraccion
{
// BASE24-product. Values are :
// 00-GENERIC Base/Propietary
// 01-B24 ATM
// 02-B24 POS
// 03-B24 Teller
// 08-From Host Maintenance
// 11-B24 EMS
// 12-B24 EFTPOS
char chPRODUCT = 0x00;
int iOffset = 0;
// UserTrxCode P-3
if(!IsValidField(3))
return (FALSE);
iOffset = FieldOffset(3);
///////////////////////////////////////////////////////////
// PRECONDITION : CHECK THE PRODUCT CODE :
if( isdigit(chMsg[3]) && isdigit( chMsg[4]) )
{
// 1ST. OF ALL : CHECK THE PRODUCT CODE : ATM,POS,etc.
chPRODUCT = ((chMsg[3]-'0') * 10) + (chMsg[4]-'0') ;
if( _ISO8583_FORMAT_FOR_ATM_ != chPRODUCT )
return FALSE;
}
else
chPRODUCT = 0x00;
////////////////////////////////////////////////////////
// Message-Type-Identifier [12..15=4]
return( ((memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_FINANCIAL_RQST, 4) == 0) ||
(memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_REVERSAL, 4) == 0) ||
(memcmp((PBYTE)&chMsg[12] , CISO_MSGTYPE_REVERSAL_REP, 4) == 0) ||
(memcmp((PBYTE)&chMsg[12] , CISO_MSGTYPE_FINANCIAL_ADV, 4) == 0) ||
(memcmp((PBYTE)&chMsg[12] , CISO_MSGTYPE_FINANCIAL_ADV_REP, 4) == 0) )
&&
// UserTrxCode [xxyyzz=6] : xx=trx_code,yy=from_acct_type,zz=to_acct_type
( (memcmp((PBYTE)&chMsg[iOffset], _B24_OPCODE_WITHDRAWAL_, 2) == 0
||
memcmp((PBYTE)&chMsg[iOffset], _B24_OPCODE_WITHDRAWAL_FRGN_CURRENCY_, 2) == 0)
&& IsValidFromAccountType( iOffset )
&& IsValidToAccountType( iOffset )
)
);
}
EXPORT BOOL APPMSG::IsATMBalanceInquiry(void) // Consulta de saldos
{
// UserTrxCode P-3
if(!IsValidField(3))
return (FALSE);
int iOffset = FieldOffset(3);
// Message-Type-Identifier [12..15=4]
return(((memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_FINANCIAL_RQST, 4) == 0) ||
(memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_REVERSAL, 4) == 0) ||
(memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_REVERSAL_REP, 4) == 0) )
&&
// UserTrxCode [xxyyzz=6] : xx=trx_code,yy=from_acct_type,zz=to_acct_type
( (memcmp((PBYTE)&chMsg[iOffset], _B24_OPCODE_BALANCE_INQUIRY_ , 2) == 0
||
memcmp((PBYTE)&chMsg[iOffset], _B24_OPCODE_BALANCE_INQUIRY_POS_, 2) == 0)
&& IsValidFromAccountType( iOffset )
&& IsValidToAccountType( iOffset )
)
);
}
EXPORT BOOL APPMSG::IsATMTransfer(void) // Transferencia en cuentas relacionadas
{
// UserTrxCode P-3
if(!IsValidField(3))
return (FALSE);
int iOffset = FieldOffset(3);
// Message-Type-Identifier [12..15=4]
return(((memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_FINANCIAL_RQST, 4) == 0) ||
(memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_REVERSAL, 4) == 0) ||
(memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_REVERSAL_REP, 4) == 0) ||
(memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_FINANCIAL_ADV, 4) == 0) ||
(memcmp((PBYTE)&chMsg[12], CISO_MSGTYPE_FINANCIAL_ADV_REP, 4) == 0) )
&&
// UserTrxCode [xxyyzz=6] : xx=trx_code,yy=from_acct_type,zz=to_acct_type
( ( memcmp((PBYTE)&chMsg[iOffset], _B24_OPCODE_TRANSFER_, 2) == 0
||
memcmp((PBYTE)&chMsg[iOffset], _B24_OPCODE_TRANSFER_FRGN_CURRENCY_, 2) == 0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -