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); }
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); }
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>екипът на <strong>еТемида.</strong></p><hr><p>! Това е автоматично генериран е-мейл от системата на <strong>еТемида.<br></strong> Моля не отговаряйте и не изпращайте други съобщения на този е-мейл.</p>" , true); } else { } #endif return(paymentResult); }
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)); } }
/// <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 не отговаря опитайте пак по-късно!"); } }