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

📄 atmtrx.cpp

📁 ISO 8583 with c++ for financial transaction standard
💻 CPP
📖 第 1 页 / 共 3 页
字号:
            // Completar campos de respuesta en BLANCOS y RECHAZAR TRX.
            // 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();
            // A pedido de RED LINK, se retorna "DESTINO O AUTORIZADOR NO DISPONIBLE"
            if(is_true == bIsReversal)
                wRespCode = CISO_TRANSACTION_NOT_SUPP_I;
            else 
                wRespCode = CISO_DESTINY_NOT_AVAILABLE_I;
        }
        else if (isoMsg.IsATMPinChange())           // Cambio de PIN
        {
            // A pedido de RED LINK, se retorna "DESTINO O AUTORIZADOR NO DISPONIBLE"
            if(is_true == bIsReversal)
                wRespCode = CISO_TRANSACTION_NOT_SUPP_I;
            else 
                wRespCode = CISO_DESTINY_NOT_AVAILABLE_I;
        }
        else if (isoMsg.IsATMAssignHomeBankUser())  // Asignacion usuario HB
        {
            // A pedido de RED LINK, se retorna "DESTINO O AUTORIZADOR NO DISPONIBLE"
            if(is_true == bIsReversal)
                wRespCode = CISO_TRANSACTION_NOT_SUPP_I;
            else 
                wRespCode = CISO_DESTINY_NOT_AVAILABLE_I;
        }
        else if (isoMsg.IsATMExchangeRateInquiry())     // Consulta tipo de cambio
        {    
            // Completar campos de respuesta en BLANCOS y RECHAZAR TRX.
            // Formatear campo ISO #44, RESP_DATA, saldo y disponible
            FormatField44_RESP_DATA( NULL,NULL );
            // Formatear campo ISO #54 de rta., stB24_0210_Def_Data
            FormatField54_B24_0210_Def_Data( NULL, NULL, NULL, 
                NULL, NULL, NULL, NULL, NULL, 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();
            // A pedido de RED LINK, se retorna "DESTINO O AUTORIZADOR NO DISPONIBLE"
            if(is_true == bIsReversal)
                wRespCode = CISO_TRANSACTION_NOT_SUPP_I;
            else 
                wRespCode = CISO_DESTINY_NOT_AVAILABLE_I;
        }
        else
            // Todo lo demas NO SE RECONOCE, SON "TRANSACCIONES INVALIDAS"
            wRespCode = CISO_INVALID_TRANSACTION_I;
        ///////////////////////////////////////////////////////////////////////////////////

        // Backup de resultado de ejecucion hacia la clase base
        wProcRespCde = wRespCode;        


        // Establecer codigo de mensaje ISO de respuesta
        // Como RED LINK tiene "ciertas particularidades".....
        if((!isoMsg.IsATMLastMovInquiry()) && is_true == bStmtPrint_forced)
        {
            // FINANCIAL RESPONSE para un FINANCIAL REQUEST, o lo que corresponda
            if(!isoMsg.SetMsgTypeIdResponse())
                return (is_false);
        }
        else if(is_true == bStmtPrint_forced)  // Statement Print forzado ?
        {
            // STATEMENT PRINT RESPONSE para un FINANCIAL REQUEST. RED LINK S.A.
            if(!isoMsg.SetMsgTypeId((PBYTE)CISO_MSGTYPE_STMT_PRINT_RESP,4))
                return (is_false);
        }
        else
        {
            // FINANCIAL RESPONSE para un FINANCIAL REQUEST, o lo que corresponda
            if(!isoMsg.SetMsgTypeIdResponse())
                return (is_false);
        };
        

        
        // Resultado de Respuesta parametrico, en campo #39 del mensaje ISO
        sprintf((PSTR)szRespCode, "%0*i", 2, wRespCode);
        if(!isoMsg.IsValidField(39))
            isoMsg.InsertField(39, &(wRspCdeLen=2), (PBYTE)szRespCode,    2 );
        else
            isoMsg.SetField(39, &(wRspCdeLen=2), (PBYTE)szRespCode,    2 );
        
        }
    else
        {
        
        // Set Message Type Response 
        if(!isoMsg.SetMsgTypeIdResponse())
            return (is_false);
        // Codigo de Respuesta erroneo, en campo #39 del mensaje ISO
        isoMsg.InsertField(39, &(wRspCdeLen=2), (PBYTE)CISO_INVALID_TRANSACTION, 2 );
        };//end-if-then-else-TranCode

    //////////////////////////////////////////////////////////////////////    
    // Commit o Rollback de transaccion segun el resultado obtenido, y
    // desconectarse a Base de Datos .
    // OBSERVACIONES : EN ESTA CASO NO CORRESPONDE YA QUE EXISTE SESION RPC PREVIA    
    //////////////////////////////////////////////////////////////////////

     // Ok por procesado
    return (is_true);
    }//end-ProcessATMTransaction

/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Procesamiento de reversos
WORD TrxResATM::ProcessReversal(WORD wCause)
{
    WORD wRespCde = ProcessInit();
    // Retornar cod.rta.
    return (wRespCde = CISO_TRANSACTION_NOT_SUPP_I)   ;
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Procesamiento generico
WORD TrxResATM::ProcessGeneric(void)
{
    WORD wRespCde = ProcessInit();
    // Retornar cod.rta.
    return (wRespCde = CISO_TRANSACTION_NOT_SUPP_I)   ;
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Procesamiento de transacciones en particular
WORD TrxResATM::ProcessBalanceInquiry(WORD wCause,boolean_t bIsRvsl)        // Consulta de saldos
{
    WORD wRespCde = ProcessInit();
    // Retornar cod.rta.
    return (wRespCde = CISO_TRANSACTION_NOT_SUPP_I)   ;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Procesamiento de transacciones en particular
WORD TrxResATM::ProcessTransfer(WORD wCause,boolean_t bIsRvsl)            // Transferencia ctas. relacionadas
{
    WORD wRespCde = ProcessInit();
    // Retornar cod.rta.
    return (wRespCde = CISO_TRANSACTION_NOT_SUPP_I)     ;
}
// Procesamiento de transacciones xfer. interbancarias
WORD TrxResATM::ProcessTransferInterbank(WORD wCause,boolean_t bIsRvsl)            // Transferencia Interbancaria
{
    WORD wRespCde = ProcessInit();
    // Retornar cod.rta.
    return (wRespCde = CISO_TRANSACTION_NOT_SUPP_I)     ;
}

// Procesamiento de transacciones de xfer. minorista, o CBU
WORD TrxResATM::ProcessIndividualTransfer(WORD wCause,boolean_t bIsRvsl)            // Transferencia minorista
{
    WORD wRespCde = ProcessInit();
    // Retornar cod.rta.
    return (wRespCde = CISO_TRANSACTION_NOT_SUPP_I)    ;
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Procesamiento de transacciones en particular
WORD TrxResATM::ProcessWithdrawal(WORD wCause,boolean_t bIsRvsl)            // Extraccion
{    
    WORD wRespCde = ProcessInit();
    // Retornar cod.rta.
    return (wRespCde = CISO_TRANSACTION_NOT_SUPP_I);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Procesamiento de transacciones en particular
WORD TrxResATM::ProcessDeposit(WORD wCause,boolean_t bIsRvsl)            // Deposito
{
    WORD wRespCde = ProcessInit();
    // Retornar cod.rta.
    return (wRespCde = CISO_TRANSACTION_NOT_SUPP_I);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Procesamiento de transacciones en particular
WORD TrxResATM::ProcessFastCash(WORD wCause,boolean_t bIsRvsl)            // FastCash o compra
{
    WORD wRespCde = ProcessInit();
    return (wRespCde = CISO_TRANSACTION_NOT_SUPP_I);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Procesamiento de transacciones en particular
WORD TrxResATM::ProcessAccountVerification(WORD wCause,boolean_t bIsRvsl)// Verificacion cuenta destino
{
    WORD wRespCde = ProcessInit();
    return (wRespCde = CISO_TRANSACTION_NOT_SUPP_I);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Procesamiento de transacciones en particular
WORD TrxResATM::ProcessPayment(WORD wCause,boolean_t bIsRvsl)            // Pagos
{
    WORD wRespCde = ProcessInit();
    return (wRespCde = CISO_TRANSACTION_NOT_SUPP_I);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Procesamiento de transacciones en particular
WORD TrxResATM::ProcessBuying(WORD wCause,boolean_t bIsRvsl)                // Compras y relacionados
{
    WORD wRespCde = ProcessInit();
    return (wRespCde = CISO_TRANSACTION_NOT_SUPP_I);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Procesamiento de transacciones en particular
WORD TrxResATM::ProcessAutServicePayment(WORD wCause,boolean_t bIsRvsl)    // Pagos Automatico de Servs.
{
    WORD wRespCde = ProcessInit();
    return (wRespCde = CISO_TRANSACTION_NOT_SUPP_I);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Procesamiento de transacciones en particular
WORD TrxResATM::ProcessOtherMsgs(WORD wCause,boolean_t bIsRvsl)            
{
    WORD wRespCde = ProcessInit();
    return (wRespCde = CISO_TRANSACTION_NOT_SUPP_I);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Procesamiento de transacciones en particular
WORD TrxResATM::ProcessDebitNote(WORD wCause,boolean_t bIsRvsl)            
{
    WORD wRespCde = ProcessInit();
    return (wRespCde = CISO_TRANSACTION_NOT_SUPP_I);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Procesamiento de transacciones en particular
WORD TrxResATM::ProcessCreditNote(WORD wCause,boolean_t bIsRvsl)            
{
    WORD wRespCde = ProcessInit();
    return (wRespCde = CISO_TRANSACTION_NOT_SUPP_I);
}


/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Formatear campo ISO #54 de rta., stB24_0210_Def_Data
void TrxResATM::FormatField54_B24_0210_Def_Data( 
     char *chWITH_ADV_AVAIL
    ,char *chINT_OWE_AUSTRAL
    ,char *chCASH_AVAIL
    ,char *chMIN_PAYMENT
    ,char *chPAYMENT_DAT
    ,char *chINTEREST_RATE
    ,char *chOWE_DOLAR
    ,char *chMIN_PAYMENT_DOLAR
    ,char *chPURCHASE_DOLAR
    ,char *chCASH_FEE )
{
    WORD wRspCdeLen=0;

    // Formatear campo ISO #54 de rta., B24_0210_DEF, pero no para Xfer. x CBUs.
    if( isoMsg.IsATMTransferCBU() )        
        return ;

    // Formatear campo ISO #54 de rta., stB24_0210_Def_Data    
    if(NULL == chWITH_ADV_AVAIL)    chWITH_ADV_AVAIL    = "99"; // Sin limites de extracciones
    if(NULL == chINT_OWE_AUSTRAL)   chINT_OWE_AUSTRAL   = "000000000000";
    if(NULL == chCASH_AVAIL)        chCASH_AVAIL        = "000000000000";    
    if(NULL == chMIN_PAYMENT)       chMIN_PAYMENT       = "000000000000";
    if(NULL == chPAYMENT_DAT)       chPAYMENT_DAT       = "000000";
    if(NULL == chINTEREST_RATE)     chINTEREST_RATE     = "000000";
    if(NULL == chOWE_DOLAR)         chOWE_DOLAR         = "0000000000";
    if(NULL == chMIN_PAYMENT_DOLAR) chMIN_PAYMENT_DOLAR = "0000000000";    
    if(NULL == chPURCHASE_DOLAR)    chPURCHASE_DOLAR    = "0000000000";    
    if(NULL == chCASH_FEE)          chCASH_FEE          = "00000000";        
    
    // No se blanquea inicialmente porque ya viene informado por el switch financiero
    COPYVALUE(isoFields.field54.stB24_0210_Def_Data.chAMT, NULL ); // 12 + reseved 108 bytes
    COPYVALUE(isoFields.field54.stB24_0210_Def_Data.chWITH_ADV_AVAIL,chWITH_ADV_AVAIL);    // contador extracciones o adelantos
    COPYVALUE(isoFields.field54.stB24_0210_Def_Data.chINT_OWE_AUSTRAL,chINT_OWE_AUSTRAL); // intereses ganados o deuda anterior

⌨️ 快捷键说明

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