/// <summary>
        ///     GetBalance: Consulta del balance en la cuenta del usuario.
        /// </summary>
        /// <param name="APIPassword">Valor de seguridad para utilización de la API de DineroMail</param>
        /// <param name="APIUserName">Usuario para la identificacion en la API de DineroMail</param>
        /// <param name="Crypt">Indica si se envian los datos encriptados</param>
        /// <param name="MerchantTransactionId">Identificador transacción, corresponde al identificador de transacción del Comerciente.</param>
        /// <param name="UniqueMessageId">Identificador único de mensaje, no puede repetirse en futuras conexiones. (Autonumérico)</param>
        /// <param name="Hash">Cadena a encriptar</param>
        /// <returns>
        ///     GetBalanceResult: (Status, Message, Currency, Amount)
        /// </returns>
        public string GetBalance()
        {
            String APIPassword           = "******";
            String APIUserName           = "******";
            bool   Crypt                 = false;
            String MerchantTransactionId = "1";
            String UniqueMessageId       = "18";
            String Hash = "";

            DMCrypt Crypto = new DMCrypt();

            ws.dineromail.api.DMAPI ClientApi = new ASP.NET.ws.dineromail.api.DMAPI();

            // Creamos una instancia del objeto APICredential
            // La Credential es la tarjeta de acceso a la API de DineroMail
            ws.dineromail.api.APICredential Credential = new ASP.NET.ws.dineromail.api.APICredential();
            Credential.APIUserName = APIUserName;
            Credential.APIPassword = APIPassword;

            // El >> Hash << es el cálculo MD5 de los valores
            // de los siguientes parámetros en orden especificado.
            Hash = MerchantTransactionId + UniqueMessageId + Credential.APIPassword;
            Hash = Crypto.GetHashMD5(Hash);


            //si se desea enviar encriptado
            if (Crypt)
            {
                // Los datos de la API viajarán con una encriptación del tipo TripleDES
                Crypto.Key            = Encoding.ASCII.GetBytes(Credential.APIPassword);
                MerchantTransactionId = Crypto.Encrypt(MerchantTransactionId);
                UniqueMessageId       = Crypto.Encrypt(UniqueMessageId);
            }

            // Consultamos el servicio web
            // Llamamos al Metodo GetBalance de la API de DineroMail
            ws.dineromail.api.ResultGetBalance BalanceResult = ClientApi.GetBalance(Credential
                                                                                    , Crypt
                                                                                    , MerchantTransactionId
                                                                                    , UniqueMessageId
                                                                                    , Hash);

            //mostramos la respuesta de la operación en pantalla.
            String sResult = "Status: " + BalanceResult.Status.ToString() + "<br>";

            sResult += "Message: " + BalanceResult.Message.ToString() + "<br>";
            sResult += "MerchantTransactionId: " + BalanceResult.MerchantTransactionId.ToString() + "<br>";
            sResult += "UniqueMessageId: " + BalanceResult.UniqueMessageId.ToString() + "<br>";

            if (BalanceResult.Status.ToString() == "OK")
            {
                sResult = sResult + "TransactionId: " + BalanceResult.TransactionId.ToString() + "<br>";
                sResult = sResult + "Amount: " + BalanceResult.Balance[0].Amount.ToString() + "<br>";
                sResult = sResult + "Currency: " + BalanceResult.Balance[0].Currency.ToString();
            }

            return(sResult);
        }
        public string DoPaymentWithReference()
        {
            string APIPassword           = "******";
            string APIUserName           = "******";
            bool   Crypt                 = false;
            string MerchantTransactionId = "1";
            string UniqueMessageId       = "18";
            string Hash     = "";
            string Subject  = "Subject Test";
            string Message  = "Message Test";
            string Provider = "pagofacil";

            DMCrypt Crypto = new DMCrypt();

            ws.dineromail.api.DMAPI ClientApi = new ASP.NET.ws.dineromail.api.DMAPI();
            ws.dineromail.api.Item  oItem     = new ASP.NET.ws.dineromail.api.Item();
            //Creamos una instancia del objeto APICredential
            ws.dineromail.api.APICredential Credential = new ws.dineromail.api.APICredential();

            oItem.Amount      = "25.52";
            oItem.Code        = "A001";
            oItem.Currency    = "USD";
            oItem.Description = "Producto A001";
            oItem.Name        = "LCD Monitor";
            oItem.Quantity    = "2";

            ws.dineromail.api.Item[] oItems = { oItem };

            ws.dineromail.api.Buyer oBuyer = new ws.dineromail.api.Buyer();
            oBuyer.Address  = "Charcas 2034";
            oBuyer.City     = "Buenos Aires";
            oBuyer.Country  = "Argentina";
            oBuyer.Email    = "*****@*****.**";
            oBuyer.LastName = "Lopez";
            oBuyer.Name     = "Carlos Ruben";
            oBuyer.Phone    = "45556565";

            // Creamos una instancia del objeto APICredential
            // La Credential es la tarjeta de acceso a la API de DineroMail
            Credential.APIUserName = APIUserName;
            Credential.APIPassword = APIPassword;

            //preparamos la cadena de texto a utilizar en el hash
            string sConcatItem = oItem.Amount + oItem.Code + oItem.Currency + oItem.Description + oItem.Name + oItem.Quantity;

            string sConcatBuyer = oBuyer.Name + oBuyer.LastName + oBuyer.Email + oBuyer.Address + oBuyer.Phone + oBuyer.Country + oBuyer.City;

            Hash = MerchantTransactionId + UniqueID + sConcatItem + sConcatBuyer + Provider + Subject + Message + Credential.APIPassword.ToString();

            //si se desea enviar encriptado
            if (Crypt)
            {
                Crypto.Key            = Encoding.ASCII.GetBytes(Credential.APIPassword);
                MerchantTransactionId = Crypto.Encrypt(MerchantTransactionId);
                UniqueMessageId       = Crypto.Encrypt(UniqueMessageId);
                Provider = Crypto.Encrypt(Provider);
                Subject  = Crypto.Encrypt(Subject);
                Message  = Crypto.Encrypt(Message);

                foreach (ws.dineromail.api.Item Item in oItems)
                {
                    oItem.Amount      = Crypto.Encrypt(oItem.Amount);
                    oItem.Code        = Crypto.Encrypt(oItem.Code);
                    oItem.Currency    = Crypto.Encrypt(oItem.Currency);
                    oItem.Description = Crypto.Encrypt(oItem.Description);
                    oItem.Name        = Crypto.Encrypt(oItem.Name);
                    oItem.Quantity    = Crypto.Encrypt(oItem.Quantity);
                }
                oBuyer.Name     = Crypto.Encrypt(oBuyer.Name);
                oBuyer.LastName = Crypto.Encrypt(oBuyer.LastName);
                oBuyer.Email    = Crypto.Encrypt(oBuyer.Email);
                oBuyer.Address  = Crypto.Encrypt(oBuyer.Address);
                oBuyer.Phone    = Crypto.Encrypt(oBuyer.Phone);
                oBuyer.Country  = Crypto.Encrypt(oBuyer.Country);
                oBuyer.City     = Crypto.Encrypt(oBuyer.City);
            }

            Hash = Crypto.GetHashMD5(Hash);

            //consultamos el servicio web
            ws.dineromail.api.ResultDoPaymentWithReference PaymentWithReferenceResult = ClientApi.DoPaymentWithReference(Credential, Crypt, MerchantTransactionId, oItems, oBuyer, Provider, Subject, Message, UniqueMessageId, Hash);

            //mostramos la respuesta de la operación en pantalla.
            string sResult = "Status: " + PaymentWithReferenceResult.Status.ToString() + "<br>";

            sResult = sResult + "Message: " + PaymentWithReferenceResult.Message.ToString() + "<br>";
            sResult = sResult + "MerchantTransactionId: " + PaymentWithReferenceResult.MerchantTransactionId.ToString() + "<br>";
            sResult = sResult + "UniqueMessageId: " + PaymentWithReferenceResult.UniqueMessageId.ToString() + "<br>";
            if (PaymentWithReferenceResult.Status.ToString() == "COMPLETED")
            {
                sResult = sResult + "TransactionId: " + PaymentWithReferenceResult.TransactionId.ToString() + "<br>";
                sResult = sResult + "BarcodeDigits: " + PaymentWithReferenceResult.BarcodeDigits + "<br>";
                sResult = sResult + "UrlImage: " + PaymentWithReferenceResult.BarcodeImageUrl.ToString() + "<br>";
                sResult = sResult + "Voucher: " + PaymentWithReferenceResult.VoucherUrl.ToString();
            }

            return(sResult);
        }