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

📄 cobistrx.cpp

📁 ISO 8583 with c++ for financial transaction standard
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                tblTranCodeSP_USD_USD,
                (cMonedaCOBIS1 != cMonedaCOBIS2),
                cMonedaCOBIS2 );
        // Causal 2-CREDITO?
        if(cMonedaCOBIS1 == cMonedaCOBIS2)
            // Se informa CUENTA DESTINO y OPERACION CREDITO
            AssignCOBISCauseFromCurrency( chOnlineMode, szCause2, 
                cMonedaCOBIS2, cOperacionCOBIS2, cProductoCOBIS2, 
                tblTranCodeSP_ARG_ARG, 
                tblTranCodeSP_USD_ARG, 
                tblTranCodeSP_ARG_USD, 
                tblTranCodeSP_USD_USD,
                (cMonedaCOBIS1 != cMonedaCOBIS2),
                cMonedaCOBIS1 );
        else // Si son distintas monedas....
            // Se informa la CUENTA ORIGEN, pero, con OPERACION CREDITO
            AssignCOBISCauseFromCurrency( chOnlineMode, szCause2, 
                cMonedaCOBIS1, cOperacionCOBIS2, cProductoCOBIS1, 
                tblTranCodeSP_ARG_ARG, 
                tblTranCodeSP_USD_ARG, 
                tblTranCodeSP_ARG_USD, 
                tblTranCodeSP_USD_USD,
                (cMonedaCOBIS1 != cMonedaCOBIS2),
                cMonedaCOBIS2 );
        /////////////////////////////////////////////////////////////////////////////////////
        // Causal parametrico?
        if(0 != wCause)    
            itoa( wCause, szCause1, 10 );        
        // Moneda de Trx
        ASSIGNSTRING(szTrxCurrency, isoFields.field49.chData ); 
        CHECKPARAMETER(szTrxCurrency);

#ifdef _RPCDB_CONNECTION_
        // Invocacion
        bExecStatus_ok = prpcDB->AccountTransfer( szAccount1     ,
             szAccount2     ,                                 
             szAmmount        , 
             szCause1        ,
             szCause2        ,
             szCard            ,
             szReceipt        ,                                  
             szFIID            ,
             szATM            , 
             TranslateTranCode_ISO_B24(isoFields.field3.uProcCde.chData),
             itoa(cOperacionCOBIS1,szOperacionCobis1,10), 
             itoa(cOperacionCOBIS2,szOperacionCobis2,10), 
             itoa(cMonedaCOBIS1,szCurrency1,10),
             itoa(cMonedaCOBIS2,szCurrency2,10),
             szYYYYMMDD        , 
             szYYYYMMDD_Trx    ,
             szYYYYMMDD_Cap    ,
             szHHMMSS        ,
             szHHMMSS_Trx    ,
             szOnline        , 
             itoa(cProductoCOBIS1,szProduct1,10),
             itoa(cProductoCOBIS2,szProduct2,10),
             szNetwork      ,
             szGirar        ,                                 
             szExchangeRate ,
             szTrxCurrency    ,
             szAcumEfec        ,
             szAcumExtra    ,
             szContable        );
        // Codigo de retorno de la ejecucion del SP
        iReturn = prpcDB->GetStatus();
#else
        iReturn = CISO_EXTERNAL_DECLINE_I;
#endif // #ifdef _RPCDB_CONNECTION_

    }
    else
        iReturn = CISO_EXTERNAL_DECLINE_I;

    // Formatear Codigo de Rta ISO8538 en base a COBIS
    wRespCde = iReturn;
    if(0 == wRespCde && !bExecStatus_ok) wRespCde = CISO_EXTERNAL_DECLINE_I;

    // Formatear saldos a formato ISO-LINK,sin punto decimal ni millar
    Format_ISO_Ammount( szGirar   , 0, szGirar   , sizeof(isoFields.field4.chAmmount));
    Format_ISO_Ammount( szContable, 0, szContable, sizeof(isoFields.field4.chAmmount));
    // Formatear campo ISO #44, RESP_DATA, saldo y disponible
    FormatField44_RESP_DATA( szContable, szGirar );
    // Formatear campo ISO #54 de rta., stB24_0210_Def_Data
    Format_ISO_Ammount( szAcumEfec , 0, szAcumEfec , 
        sizeof(isoFields.field54.stB24_0210_Def_Data.chINT_OWE_AUSTRAL));
    Format_ISO_Ammount( szAcumExtra, 0, szAcumExtra, 
        sizeof(isoFields.field54.stB24_0210_Def_Data.chOWE_DOLAR));
    FormatField54_B24_0210_Def_Data(     
        "99", // chWITH_ADV_AVAIL, : contador extracciones o adelantos
        szAcumEfec, // chINT_OWE_AUSTRAL,12 : LIBRE DISPONIBILIDAD (CORRALITO)
        szGirar, // chCASH_AVAIL,12 : saldo disponible
        NULL, // chMIN_PAYMENT,12
        NULL, // chPAYMENT_DAT,6
        NULL, // chINTEREST_RATE,6
        szAcumExtra, // chOWE_DOLAR,10 : ACUMULADOR DE EXTRACCIONES (CORRALITO)
        NULL, // chMIN_PAYMENT_DOLAR,10
        NULL, // chPURCHASE_DOLAR,10
        NULL ); // chCASH_FEE,8 : arancel de usuario
    // Formatear campo ISO #55 de rta., PRIRSRVD1_ISO
    FormatField55_PRIRSRVD1_ISO( 
            NULL,    // Track-2 o PAN del Titular
            NULL,    // Codigo asociado
            NULL,    // Institucion 1
            NULL,    // Tipo Cta. 1
            NULL,    // Cuenta Num. 1
            NULL,    // Institucion 2
            NULL,    // Tipo Cta. 2
            NULL );    // Cuenta Num. 2
    // Formatear campo ISO #122, SECNDRY_RSRVD3_PRVT
    FormatField122_SECNDRY_RSRVD3_PRVT();
    // Formatear campo ISO #123, SECNDRY_RSRVD4_PRVT, "DEPOSIT AMMOUNT"
    FormatField123_SECNDRY_RSRVD4_PRVT();
    // Formatear campo ISO #125, SECNDRY_RSRVD6_PRVT, "ACCOUNT INDICATOR"
    FormatField125_SECNDRY_RSRVD6_PRVT( '2' );
    // Formatear campo ISO #127, SECNDRY_RSRVD8_PRVT
    FormatField127_SECNDRY_RSRVD8_PRVT();

    ////////////////////////////////////////////////////
    // Borrar campos no validos en la rta. : 43,48,52,63
    isoMsg.DeleteField ( 43 );
    isoMsg.DeleteField ( 48 );
    isoMsg.DeleteField ( 52 );
    isoMsg.DeleteField ( 63 );
    ////////////////////////////////////////////////////

    
    // Retornar cod.rta.
    return TranslateRespCode_COBIS_ISO_B24( wRespCde );
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Procesamiento de transacciones en particular
WORD TrxResCOBIS::ProcessCreditNote(WORD wCause,boolean_t bIsReversal)            // Nota de Credito
{
    long wRespCde = ProcessInit();
    ///////////////////////////////////////////////////////////////////////////////
    CONST stTranCodeSP    tblTranCodeSP = {'S', NULL, 0, 113, 0, 113, 0, 613, 0, 613};
    ///////////////////////////////////////////////////////////////////////////////
    // La transferencia en COBIS implica dos movimientos : una acreditacion y otra debitacion,
    // y son dos invocaciones distintas a la base de datos.
    // Acreditar cuenta DESDE (FROM ACCT)
    wRespCde = ProcessDebitCredit_Note( 'D', cCobisCredito_Gral, 
        &tblTranCodeSP, bIsReversal );
    // Retornar cod.rta.
    return TranslateRespCode_COBIS_ISO_B24( wRespCde ); 
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Procesamiento de transacciones en particular
WORD TrxResCOBIS::ProcessDebitNote(WORD wCause,boolean_t bIsReversal)            // Nota de Debito
{
    long wRespCde = ProcessInit();
    //////////////////////////////////////////////////////////////////////////////////
    CONST stTranCodeSP    tblTranCodeSP = {'S', NULL, 4213, 0, 213, 0, 3713, 0, 713, 0};
    //////////////////////////////////////////////////////////////////////////////////
    // La transferencia en COBIS implica dos movimientos : una acreditacion y otra debitacion,
    // y son dos invocaciones distintas a la base de datos.
    // Debitar cuenta DESDE (FROM ACCT)
    wRespCde = ProcessDebitCredit_Note( 'D', cCobisDebito_Gral, &tblTranCodeSP, bIsReversal );    
    // Retornar cod.rta.
    return TranslateRespCode_COBIS_ISO_B24( wRespCde ); 
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// Procesamiento de transacciones en particular : SUB-TRANSFERENCIA
WORD TrxResCOBIS::ProcessDebitCredit_Note( char chCuentaDesdeHacia, 
                                          enumCOBIS cOperacionCOBIS, 
                                          CONST stTranCodeSP *ptblTranCodeSP, 
                                          boolean_t bIsReversal,
                                          boolean_t bIsInterbankXfer )        
{
    long wRespCde       = ProcessInit();    
    CHAR szGirar[32]    = {"000000000000.0000"};    
    CHAR szContable[32] = {"000000000000.0000"};    
    INT  iReturn        = 0;
    /////////////////////////////////////////////////////////////////////////////////////////////////
    CONST stTranCodeSP    tblTranCodeSP_ARG_ARG  = {'S',"sp_li_ndc_trans",4198, 102,  198, 102,
        3698, 602,  698, 602 };
    CONST stTranCodeSP    tblTranCodeSP_ARG_USD  = {'S',"sp_li_ndc_trans",4200, 104,  200, 104,
        3700, 604,  700, 604 };
    CONST stTranCodeSP    tblTranCodeSP_USD_ARG  = {'S',"sp_li_ndc_trans",4199, 103,  199, 103,
        3699, 603,  699, 603 };
    CONST stTranCodeSP    tblTranCodeSP_USD_USD  = {'S',"sp_li_ndc_trans",4201, 105,  201, 105,
        3701, 605,  701, 605 };
    CONST stTranCodeSP    tblTranCodeSP_Interbank= {'S',"sp_li_ndc_trans",4213, 213, 3713, 713,
        4213, 213, 3713, 713 };
    /////////////////////////////////////////////////////////////////////////////////////////////////
    CHAR    szYYYYMMDD[]     = _TIMESTAMP_MASK_, // Xmit-date
            szHHMMSS[]       = _TIMESTAMP_MASK_, // Xmit-time
            szYYYYMMDD_Trx[] = _TIMESTAMP_MASK_, // Trx-date
            szHHMMSS_Trx[]   = _TIMESTAMP_MASK_; // Trx-time
    CHAR    szYYYYMMDD_Cap[] = _TIMESTAMP_MASK_; // Cap-date
    CHAR    szAccount[sizeof(isoFields.field102.chNum)+1]={"0"};
    CHAR    chOnlineMode     = (boolOnlineMode == is_true) ? 'S' : 'N';
    enumCOBIS cProductoCOBIS = cCobisProductoCA; // Producto default CA, donde CA=4,CC=3.
    enumCOBIS cMonedaCOBIS   = cCobisMonedaPesos;
    CHAR    szAmmount[sizeof(isoFields.field4.chAmmount)+1]={"0"},
            szReceipt[sizeof(isoFields.field37.chNum)+1]={"0"},
            szFIID[sizeof(isoFields.field60.stATMTerm.chTermFIID)+1]={"0"},
            szATM[sizeof(isoFields.field41.chData)+1]={"0"},
            szProduct[4]={"0"},
            szOnline[4]={"0"},
            szOperacionCobis[8]={"0"},
            szCurrency[4]={"0"},
            szCard[sizeof(isoFields.field35.stTrack2.chData)+1]={"0"},
            szCause[8]={"0"},
            szNetwork[8]={"0000"},
            szCBU[32]={"0000000000000000000000"};        
    CHAR    szAcumEfec[sizeof(isoFields.field4.chAmmount)+1]={"0"},
            szAcumExtra[sizeof(isoFields.field4.chAmmount)+1]={"0"},
            szTrxCurrency[4] = {"032"};    /* default 32=PESOS ARGENTINOS */
    CHAR    szExchangeRate[16] = {"1.00"};    /* default 1$=1us$*/
    /***********************************************************/    
    /* TIPOS DE CUENTAS DE LIBRE DISPONIBILIDAD SEGUN RED LINK */
    CHAR    szToAcctTyp[2]   = B24_NONFREE_AVAIL_ACCOUNT_TYP,
            szFromAcctTyp[2] = B24_NONFREE_AVAIL_ACCOUNT_TYP;
    /***********************************************************/

    // Verificar que si el reverso es "?REVERSAL FOR LATE/UNSOL RESP?" no se procese 
    // porque ya fue reversada por TIMEOUT por el switch financiero
    if(VerifyReversalForLateResponse( bIsReversal ))
        return CISO_APPROVED_VIP_I; // Aprobada sin saldo disponible, no impactar el reverso

    // Fecha de Trx especialmente formateada
    FormatTrxDateTime(szYYYYMMDD, szHHMMSS, szYYYYMMDD_Trx, szHHMMSS_Trx, szYYYYMMDD_Cap);

    /////////////////////////////////////////////////////////////////////
    // Si es una reversa, el CREDITO se convierte en DEBITO y viceversa
    /////////////////////////////////////////////////////////////////////
    if(bIsReversal)
    {
        if(cCobisDebitoCA == cOperacionCOBIS)
            cOperacionCOBIS = cCobisCreditoCA;
        else if(cCobisCreditoCA == cOperacionCOBIS)
            cOperacionCOBIS = cCobisDebitoCA;
        else if(cCobisDebitoCC == cOperacionCOBIS)
            cOperacionCOBIS = cCobisCreditoCC;
        else if(cCobisCreditoCC == cOperacionCOBIS)
            cOperacionCOBIS = cCobisDebitoCC;
        else if(cCobisDebito_Gral == cOperacionCOBIS)
            cOperacionCOBIS = cCobisCredito_Gral;
        else if(cCobisCredito_Gral == cOperacionCOBIS)
            cOperacionCOBIS = cCobisDebito_Gral;
        else
            return CISO_EXTERNAL_DECLINE_I; 
    };
    /////////////////////////////////////////////////////////////////////

    ////////////////////////////////////////////////////////////////////////////////////////
    //Asignar producto y operacion COBIS
    if(!AssignCOBISProductFromAccType(&cProductoCOBIS,chCuentaDesdeHacia))
        return CISO_INVALID_TRANSACTION_I;    
    if( cCobisProductoCA == cProductoCOBIS)
    {
        if (cCobisDebito_Gral == cOperacionCOBIS) 
            cOperacionCOBIS = cCobisDebitoCA;// Debito CA=264
        else                                      
            cOperacionCOBIS = cCobisCreditoCA;// Credito CA=253
    }
    else // if( cProductoCC == cProductoCOBIS)

⌨️ 快捷键说明

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