コード例 #1
0
        /// <summary>
        /// Redirect to Payment provider with the all needed parameters (Expecting validated data)
        /// </summary>
        /// <param name="ePayInfo"></param>
        /// <param name="paymentMethod">method of payment supported methods:
        /// ePayPayment | DirectCreditCard | FreeTransaction | DepositSlip
        /// </param>
        /// <param name="urlOk"></param>
        /// <param name="urlCancel"></param>
        /// <returns></returns>
        private string EPayFacade(ePayQueryViewModel ePayInfo, string paymentMethod, string urlOk, string urlCancel)
        {
            List <KeyValuePair <string, string> > httpParameters = new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("URL_OK", urlOk),
                new KeyValuePair <string, string>("URL_CANCEL", urlCancel)
            };

            switch (paymentMethod.ToUpper())
            {
            case "EPAYPAYMENT":
                httpParameters.AddRange(EPayPayment(ePayInfo));
                break;

            case "DIRECTCREDITCARD":
                httpParameters.AddRange(EPayDirectCreditCard(ePayInfo));
                break;

            case "FREETRANSACTION":
                httpParameters.AddRange(FreeTransaction(ePayInfo));
                break;

            case "DEPOSITSLIP":
                httpParameters.AddRange(DepositSlip(ePayInfo));
                break;

            default:
                throw new NotSupportedException("Методът на плащане не се поддържа!");
            }

            // This line REDIRECTS to target page with the passed parameters
            return(WebExtentions.CreatePaymentForm(httpParameters, ConfigurationManager.AppSettings["ePayUrl"]));
        }
コード例 #2
0
        /// <summary>
        /// Free Transaction The Payed amount goes to the receiver ePay micro account
        /// </summary>
        /// <param name="ePayInfo"></param>
        /// <returns></returns>
        private List <KeyValuePair <string, string> > FreeTransaction(ePayQueryViewModel ePayInfo)
        {
            string page = _paymentMethodsStrings[PaymentMethods.FreeTransaction];

            return(new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("PAGE", page),
                new KeyValuePair <string, string>("MIN", ePayInfo.MIN),
                new KeyValuePair <string, string>("INVOICE", ePayInfo.Invoice),
                new KeyValuePair <string, string>("TOTAL", ePayInfo.Amount),
                new KeyValuePair <string, string>("DESCR", ePayInfo.Description),
                new KeyValuePair <string, string>("ENCODING", "utf-8")
            });
        }
コード例 #3
0
        /// <summary>
        /// Web Trader from ePay Documentation
        /// </summary>
        /// <param name="ePayInfo"></param>
        /// <returns></returns>
        private List <KeyValuePair <string, string> > EPayPayment(ePayQueryViewModel ePayInfo)
        {
            string ePayInfoString = "MIN=" + ePayInfo.MIN + "\nINVOICE=" + ePayInfo.Invoice + "\nAMOUNT=" + ePayInfo.Amount + "\nEXP_TIME=" + ePayInfo.ExpirationDate + "\nDESCR=" + ePayInfo.Description + "\nENCODING=utf-8";
            string encoded        = Convert.ToBase64String(Encoding.UTF8.GetBytes(ePayInfoString));
            string checkSum       = ePayHelpers.HMAC_SHA1_Encoding(encoded);
            string page           = _paymentMethodsStrings[PaymentMethods.EPayWebTrader];

            return(new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("PAGE", page),
                new KeyValuePair <string, string>("CHECKSUM", checkSum),
                new KeyValuePair <string, string>("ENCODED", encoded)
            });
        }
コード例 #4
0
        /// <summary>
        /// The Payed amount goes to the receiver bank account (which is specified in his ePay account)
        /// </summary>
        /// <param name="ePayInfo"></param>
        /// <returns></returns>
        private List <KeyValuePair <string, string> > DepositSlip(ePayQueryViewModel ePayInfo)
        {
            string page     = _paymentMethodsStrings[PaymentMethods.DepositSlip];
            string merchant = ConfigurationManager.AppSettings["CompanyName"];
            string iban     = ConfigurationManager.AppSettings["IBAN"];
            string bic      = ConfigurationManager.AppSettings["BIC"];
            string amount   = ePayInfo.Amount;

            return(new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("PAGE", page),
                new KeyValuePair <string, string>("MERCHANT", merchant),
                new KeyValuePair <string, string>("IBAN", iban),
                new KeyValuePair <string, string>("BIC", bic),
                new KeyValuePair <string, string>("TOTAL", decimal.Parse(amount).ToString("F"))
            });
        }
コード例 #5
0
        public async Task <string> PaymentFacade(PaymentMethodInfoViewModel paymentInfo, PayedItemViewModel payedItem, decimal?amount = null, string urlOk = null, string urlCancel = null)
        {
            if (string.IsNullOrEmpty(payedItem.PayedItemId))
            {
                throw new ArgumentException("Идентификаторът на платения елемент е задължителен!");
            }
            var payedItemInfo = await PayedItemsManager.Get(payedItem.PayedItemCode) ?? throw new ArgumentException("Кодът не съществува!");

            if (payedItemInfo.Amount == 0.0M && amount != null)
            {
                payedItemInfo.Amount = (decimal)amount;
            }
            else if (payedItemInfo.Amount == 0.0M && amount == null)
            {
                throw new ArgumentException("Цената на продуктът/услугата не е определена! Моля свържете се с екипът ни за корекция!");
            }

            ePayQueryViewModel ePayInfo = await InvoicesManager.CreateInvoiceForSending(payedItemInfo.Amount, payedItem.PayedItemId, payedItemInfo.Description, payedItem.PayedItemCode);


            // Payment Logic
            if (paymentInfo.PaymentMethod.ToUpper() == "EASYPAY")
            {
                if (!IsEasyPayModelValid(paymentInfo, payedItem))
                {
                    throw new ServicesValidationException();
                }
                var easyPayCode = await GetEasyPayCode(ePayInfo, paymentInfo, payedItem);

                return(easyPayCode);
            }
            else
            {
                if (!IsEPayModelValid(paymentInfo, payedItem))
                {
                    throw new ServicesValidationException();
                }
                if (string.IsNullOrEmpty(urlOk) || string.IsNullOrEmpty(urlCancel))
                {
                    throw new ServicesValidationException();
                }

                return(EPayFacade(ePayInfo, paymentInfo.PaymentMethod, urlOk, urlCancel));
            }
        }
コード例 #6
0
        /// <summary>
        /// Expecting valid data !
        /// </summary>
        /// <param name="ePayInfo"></param>
        /// <param name="paymentInfo"></param>
        /// <param name="payedItem"></param>
        /// <returns></returns>
        private async Task <string> GetEasyPayCode(ePayQueryViewModel ePayInfo, PaymentMethodInfoViewModel paymentInfo, PayedItemViewModel payedItem)
        {
            //"MIN=D555355354\nINVOICE=123456\nAMOUNT=20.20\nEXP_TIME=01.08.2020\nDESCR=Test\nMERCHANT=eTemida\nIBAN=BG80BNBG96611020345678\nBIC=TTBBBG22\nPSTATEMENT=123456\nSTATEMENT=Плащане за обява\nOBLIG_PERSON=Стефан Манев\nEGN=8707221342\nDOC_NO=123456\nDOC_DATE=123\nDATE_BEGIN=123\nDATE_END=123";
            string easyPayRequestParameters =
                "MIN=" + ePayInfo.MIN + "\n" +                                         // Required
                "INVOICE=" + ePayInfo.Invoice + "\n" +                                 // Required
                "AMOUNT=" + ePayInfo.Amount + "\n" +                                   // Required
                "EXP_TIME=" + ePayInfo.ExpirationDate + "\n" +                         // Required
                "DESCR=" + ePayInfo.Description + "\n" +                               // Optional
                "MERCHANT=" + ConfigurationManager.AppSettings["CompanyName"] + "\n" + // Required
                "IBAN=" + ConfigurationManager.AppSettings["IBAN"] + "\n" +            // Required
                "BIC=" + ConfigurationManager.AppSettings["BIC"] + "\n" +              // Required
                "OBLIG_PERSON=" + paymentInfo.PayerName + "\n" +                       // Required
                                                                                       //paymentInfo.PayerIdType + "=" + paymentInfo.PayerId + "\n" +           // Required
                "ENCODING=utf-8";

            string encoded  = Convert.ToBase64String(Encoding.UTF8.GetBytes(easyPayRequestParameters));
            string checkSum = ePayHelpers.HMAC_SHA1_Encoding(encoded);

            string resultParameters = "ENCODED=" + encoded + "&CHECKSUM=" + checkSum;


            using (HttpClient client = new HttpClient())
            {
                var response = await client.GetAsync(ConfigurationManager.AppSettings["EasyPayUrl"] + "?" + resultParameters);

                if (response.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    string easyPayResult = await response.Content.ReadAsStringAsync();

                    string easyPayCode = easyPayResult.Trim('\n').Split('=')[1]; // [0] is IDN / [1] is the Code

                    return(easyPayCode);
                }

                throw new ArgumentException("Сървърът на EasyPay не отговаря опитайте пак по-късно!");
            }
        }