コード例 #1
0
        private bool IsEPayModelValid(PaymentMethodInfoViewModel paymentInfo, PayedItemViewModel payedItem)
        {
            if (paymentInfo == null || payedItem == null)
            {
                return(false);
            }

            bool isPayedItemValid = !string.IsNullOrEmpty(payedItem.PayedItemId);

            if (!isPayedItemValid)
            {
                _validationKeyValues.Add("PayedItem.PayedItemId", "Полето не трябва да бъде празно");
            }
            return(isPayedItemValid);
        }
コード例 #2
0
        private bool IsEasyPayModelValid(PaymentMethodInfoViewModel paymentInfo, PayedItemViewModel payedItem)
        {
            if (paymentInfo == null || payedItem == null)
            {
                return(false);
            }

            bool isPayedItemValid = !string.IsNullOrEmpty(payedItem.PayedItemId);

            if (!isPayedItemValid)
            {
                _validationKeyValues.Add("PayedItem.PayedItemId", "Полето не трябва да бъде празно");
            }

            bool isPayerNameValid = !string.IsNullOrEmpty(paymentInfo.PayerName) && paymentInfo.PayerName?.Length < 26;

            if (!isPayerNameValid)
            {
                _validationKeyValues.Add("PaymentInfo.PayerName", "Полето не трябва да бъде празно, нито да е по дълго от 26 символа");
            }

            return(isPayedItemValid && isPayerNameValid);
        }
コード例 #3
0
        public async Task <string> PayReservation(int id, bool isCaparoPayed, PaymentMethodInfoViewModel paymentMethod, string urlOk = null, string urlCancel = null)
        {
            var price = await GetReservationPrice(id, isCaparoPayed);

            var payedItem = new PayedItemViewModel
            {
                PayedItemId   = id.ToString(),
                PayedItemCode = isCaparoPayed ? "ReservationCaparo" : "ReservationFull"
            };

            var paymentResult = await PaymentsManager.PaymentFacade(paymentMethod, payedItem, price, urlOk, urlCancel);


#if DEVELOPEMENT
#else
            //Notify for payment
            var contactInfo = await GetReservationCreatorContactInformation(id);

            //IsEasyPayCode
            if (Regex.IsMatch(paymentResult, @"^[0-9]+$"))
            {
                await SmsManager.SendSmsAsync(contactInfo.PhoneNumber,
                                              "Код за плащане в EasyPay: " + paymentResult + "\r\nsProperties");

                await EmailManager.SendEmailAsync(contactInfo.Email, "Код за плащане чрез EasyPay"
                                                  , $"<p>Здравейте,</p><p>Вашият номер за плащане в EasyPay е: {paymentResult}</p><p><br></p><p>За да извършите плащането моля посетете някой от <a href=\"https://www.easypay.bg/site/?p=offices\" target=\"_blank\" rel=\"noopener\">офисите на EasyPay</a> и заплатете по посоченият по по-горе код.</p><p><br/></p><p>Поздрави,<br>екипът на&nbsp;<strong>еТемида.</strong></p><hr><p>!&nbsp; Това е автоматично генериран е-мейл от системата на&nbsp;<strong>еТемида.<br></strong>&nbsp; &nbsp; &nbsp;Моля не отговаряйте и не изпращайте други съобщения на този е-мейл.</p>"
                                                  , true);
            }
            else
            {
            }
#endif


            return(paymentResult);
        }
コード例 #4
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));
            }
        }
コード例 #5
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 не отговаря опитайте пак по-късно!");
            }
        }