/// <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"])); }
/// <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") }); }
/// <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) }); }
/// <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")) }); }
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 не отговаря опитайте пак по-късно!"); } }