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

📄 extrtrx.cpp

📁 ISO 8583 with c++ for financial transaction standard
💻 CPP
📖 第 1 页 / 共 2 页
字号:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// IT24 Sistemas S.A.
// Process ATM Transaction Method
//
//   Metodo de Procesamiento de Transaccion ATM, con conexion y desconexion a base de
// datos para cada transaccion entrante, con manejo local de parsing del mensaje ISO
// y seteo del codigo de respuesta en el mensaje saliente.
//
// Tarea        Fecha           Autor   Observaciones
// (Inicial)    2003.05.09      mdc     Base
// (Inicial)    2003.06.04      mdc     REVERSAL REASONS
// (Inicial)    2003.06.10      mdc     Para formatos EXTRACT, clase especializada TrxResEXTRACT
// (Release-1)  2003.07.23      mdc     Arbitraje no multiplica AMMT-1 : bArbitraje = is_false;
// (Release-2)  2003.08.26      mdc     Seales de uso o no de transacciones CBU y ANUL.COMPRAS.
// (Release-2)  2003.10.30      mdc     NO SE REVERSA PARCIALMENTE EL FAST-CASH.
// (Release-2)  2004.04.06      mdc     Cod.de Moneda asumido es PESOS ARGENTINOS
// (Release-2)  2004.05.14      mdc     Bug de campo ISO-102 y ISO-103 : reemplaza macro ASSIGNFIELD.
// (Release-2)  2004.05.24      mdc     Codigo de Respuesta o Causal de Reversa, si acaso tambien es un FORZADO        
// (Release-2)  2004.06.04      mdc     ProcessBuying() : Compras y Devol. procesan pero NO IMPACTAN : no retornar "91"
// (Release-2)  2004.09.24      mdc     _USE_EXCHANGE_AMMT1_
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Headers ANSI C/C++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
#include <time.h>


#ifndef _SYSTEM_ATM_   
#define _SYSTEM_ATM_DEFINED_   
#define _SYSTEM_ATM_   
#endif // _SYSTEM_ATM_DEFINED_

// Header Transaction Resolution
#include <qusrinc/trxres.h>
// Libreria de utilidades estandards
#include <qusrinc/stdiol.h>
// Header ISO Msg Redefinition
#include <qusrinc/isoredef.h>
// Header ISO 8583
#include <qusrinc/iso8583.h>
// Header EXTRACT BASE24 RED LINK
#include <qusrinc/extrctst.h>

#ifdef _SYSTEM_ATM_DEFINED_
#undef _SYSTEM_ATM_
#endif // _SYSTEM_ATM_DEFINED_

// Librerias propias de TCP/IP v4
#include <qusrinc/tcp4u.h>

/////////////////////////////////////////////////////////////////////////////////////////
// Prototipo de funcion utilitaria que retorna la cantidad de bytes numericos en string
/////////////////////////////////////////////////////////////////////////////////////////
short strnumlen( char *pszValue , const short nMax );
/////////////////////////////////////////////////////////////////////////////////////////


/////////////////////////////////////////////////////////////////////////////////////////
// Definiciones y Macros de expansion MUY utiles para simplificar el codigo
/////////////////////////////////////////////////////////////////////////////////////////
// Macro de asignacion de String, con NULL al final
#define COPYSTRING(dst,src) strcpy(dst,src) 
// Macro de asignacion de String, con NULL al final
#define ASSIGNSTRING(dst,src) \
    { strncpy(dst,src,sizeof(src)); dst[sizeof(src)]=0x00; }
// Macro de asignacion de bytes a campo de estructura
#define ASSIGNFIELD(dst,src) \
    { memset(dst,' ',sizeof(dst)); memcpy(dst,src,min(sizeof(src),sizeof(dst)));  }

// Macro de asignacion de ceros a campo de estructura
#define SETFIELDZEROED(dst)   memset(dst ,'0',sizeof(dst))
#define SETFIELDBLANKED(dst)  memset(dst ,' ',sizeof(dst))
#define SETSTRUCTZEROED(dst)   memset(&dst,'0',sizeof(dst))
#define SETSTRUCTBLANKED(dst)  memset(&dst,' ',sizeof(dst))
#define SETSTRUCTNULL(dst)     memset(&dst, 0x00,sizeof(dst))
/////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////
// Nombre local al modulo para el archivo de logg del EXTRACT
static const char _LOGFILENAME_[] = "LGyymmdd.txt";
// ISO8583 Msg. Header
static const char _ISO_MSG_HEADER_[] = "ISO";
// Longitud maxima de tarjeta en TACK-2
static const short _MAX_CARDNUM_LEN_ = 19;
///////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////
// Funcion utilitaria que retorna la cantidad de bytes numericos en string
///////////////////////////////////////////////////////////////////////////
short strnumlen( char *pszValue , const short nMax );


/////////////////////////////////////////////////////////////////////////////////////
// Implementacion
/////////////////////////////////////////////////////////////////////////////////////
// Constructor
TrxResEXTRACT::TrxResEXTRACT()
{
    // Apertura del archivo de logging
    glLogg.Open(_LOGFILENAME_);
}

/////////////////////////////////////////////////////////////////////////////////////
// Constructor opcional con parametros para el back-end
TrxResEXTRACT::TrxResEXTRACT(char szIPBackEnd[], unsigned short usPortBackEnd)
{
    // Apertura del archivo de logging
    glLogg.Open(_LOGFILENAME_);
}

// Destructor
TrxResEXTRACT::~TrxResEXTRACT()
{
    // Cierre del archivo de logging
    glLogg.Close();
}

// Transacciones individualizadas, que luego, se procesan genericamente
WORD TrxResEXTRACT::ProcessBalanceInquiry(WORD wCause,boolean_t bIsRvsl)    // Consulta de saldos
{
    // Metodo generico de procesamiento de transaccion
    return ProcessGeneric();
}
WORD TrxResEXTRACT::ProcessTransfer(WORD wCause,boolean_t bIsRvsl)    // Transferencia Ctas. relacionadas
{
    // Metodo generico de procesamiento de transaccion
    return ProcessGeneric();
}
WORD TrxResEXTRACT::ProcessTransferInterbank(WORD wCause,boolean_t bIsRvsl)    // Transferencia Interbancaria
{
    // Metodo generico de procesamiento de transaccion
    return ProcessGeneric();
}
WORD TrxResEXTRACT::ProcessIndividualTransfer(WORD wCause,boolean_t bIsRvsl)// Transferencia CBU de individuo
{
    // Respuesta default
    WORD wRespCde = CISO_EXTERNAL_DECLINE_I;
    // Precondicion = Descomponer mensaje ISO-8583 en campos estructurados 
    wRespCde = ProcessInit();
    // Denegada, no se procesa, segun sea ON/OFF, sera 91 o 06
    wRespCde = ( isoMsg.IsFinancialAdvice() || isoMsg.IsValidReversal() )
                        ? CISO_SYSTEM_FAILURE_I
                        : CISO_DESTINY_NOT_AVAILABLE_I;
    ///////////////////////////////////////////////////////////////////////////
    // Verificar transaccion XFER POR CBU    
    if( isoMsg.IsATMTransferCBU() )
    {
        glLogg.Put("############# PARSEO DE TRX EXTRACT-ATM-POS #############\n");    
        glLogg.Put("Transferencia por CBU, se procesa BATCH, resultado:<%i>\n", wRespCde );            
        ///////////////////////////////////////////////////////////////////////
        // Formatear campo ISO #44, RESP_DATA, saldo y disponible
        FormatField44_RESP_DATA( NULL, NULL );
        // Formatear campo ISO #122, SECNDRY_RSRVD3_PRVT
        FormatField122_SECNDRY_RSRVD3_PRVT();
        // Formatear campo ISO #123, SECNDRY_RSRVD4_PRVT, "DEPOSIT AMMOUNT"
        FormatField123_SECNDRY_RSRVD4_PRVT();
        // Borrar campos no validos en la rta. : 43,48,52,63
        isoMsg.DeleteField ( 43 );
        isoMsg.DeleteField ( 48 );
        isoMsg.DeleteField ( 52 );
        isoMsg.DeleteField ( 63 );
        // Borrar campo 120, OPCIONALMENTE PODRIAN NO VENIR EN UN REQUERIMIENTO 




        isoMsg.DeleteField ( 120 );        
        glLogg.Put("### Fin ###\n");
        // Denegada, no se procesa, segun sea ON/OFF, sera 91 o 06
        return (wRespCde);        
        ///////////////////////////////////////////////////////////////////////
    }    
    else
        // Metodo generico de procesamiento de transaccion
        return ProcessGeneric();
}
WORD TrxResEXTRACT::ProcessWithdrawal(WORD wCause,boolean_t bIsRvsl)        // Extraccion
{
    // Metodo generico de procesamiento de transaccion
    return ProcessGeneric();
}
WORD TrxResEXTRACT::ProcessDeposit(WORD wCause,boolean_t bIsRvsl)            // Deposito
{
    // Metodo generico de procesamiento de transaccion
    return ProcessGeneric();
}
WORD TrxResEXTRACT::ProcessFastCash(WORD wCause,boolean_t bIsRvsl)            // FastCash o compra
{
    // Metodo generico de procesamiento de transaccion
    return ProcessGeneric();
}
WORD TrxResEXTRACT::ProcessAccountVerification(WORD wCause,boolean_t bIsRvsl)    // Verificacion cuenta destino
{
    // Metodo generico de procesamiento de transaccion
    return ProcessGeneric();
}
WORD TrxResEXTRACT::ProcessPayment(WORD wCause,boolean_t bIsRvsl)            // Pagos
{
    // Metodo generico de procesamiento de transaccion
    return ProcessGeneric();
}
WORD TrxResEXTRACT::ProcessBuying(WORD wCause,boolean_t bIsRvsl)            // Compras y relacionados
{        
    // Respuesta default
    WORD wRespCde = CISO_EXTERNAL_DECLINE_I;
    ////////////////////////////////////////////////////////////
    // Devoluciones y Anulaciones, son procesadas ?
    boolean_t bProcessBuyingReturn = is_true ;
    ////////////////////////////////////////////////////////////
        
    // Precondicion = Descomponer mensaje ISO-8583 en campos estructurados 
    wRespCde = ProcessInit();
    // Denegada, no se procesa, segun sea ON/OFF, sera 91 o 06
    wRespCde = ( isoMsg.IsFinancialAdvice() || isoMsg.IsValidReversal() )
                    ? CISO_SYSTEM_FAILURE_I
                    : CISO_DESTINY_NOT_AVAILABLE_I;    
    // Verificar transaccion DEVOLUCION DE COMPRA/ANULACION DEV.COMPRA/PREAUTORIZACION/...    
    if( bProcessBuyingReturn &&
        (antoi(isoFields.field3.uProcCde.stTranCde.chTran_Cde,2)==B24_OPCODE_BUYING_DEVOLUTION ||
        // Devolucion compra (credito NO se procesa, PERO se registra)
        antoi(isoFields.field3.uProcCde.stTranCde.chTran_Cde,2)==B24_OPCODE_BUYING_DEVOLUTION_CANCEL)
      )
    {
        // Retornar lo que este implementado por omision
        return ProcessGeneric();
    }
    else
    if (antoi(isoFields.field3.uProcCde.stTranCde.chTran_Cde,2)==B24_OPCODE_BUYING_DEVOLUTION ||
        // Devolucion compra (credito NO se procesa)

⌨️ 快捷键说明

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