public async Task WhenRetrievingAListOfPaymentsPaymentSubclassesShouldBeInitialized() { // Given: We create a new payment IdealPaymentRequest paymentRequest = new IdealPaymentRequest() { Amount = new Amount(Currency.EUR, "100.00"), Description = "Description", RedirectUrl = DefaultRedirectUrl }; await PaymentClient.CreatePaymentAsync(paymentRequest); // When: We retrieve it in a list ListResponse <PaymentResponse> result = await PaymentClient.GetPaymentListAsync(null, 5); // Then: We expect a list with a single ideal payment Assert.IsInstanceOfType(result.Items.First(), typeof(IdealPaymentResponse)); }
/// <inheritdoc /> /// <summary> /// Reads the json. /// </summary> /// <param name="reader">The reader.</param> /// <param name="objectType">Type of the object.</param> /// <param name="existingValue">The existing value.</param> /// <param name="serializer">The serializer.</param> /// <returns></returns> /// <exception cref="T:System.ArgumentException"></exception> public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { PaymentRequest target; var token = JToken.Load(reader); switch (Enum.Parse(typeof(PaymentMethod), token["payment_method"].Value <string>())) { case PaymentMethod.iDEAL: target = new IdealPaymentRequest(); break; case PaymentMethod.PayPal: target = new PayPalPaymentRequest(); break; case PaymentMethod.AfterPay: target = new AfterPayPaymentRequest(); break; case PaymentMethod.Creditcard: target = new CreditcardPaymentRequest(); break; case PaymentMethod.Bancontact: target = new BancontactPaymentRequest(); break; case PaymentMethod.WireTransfer: target = new WireTransferPaymentRequest(); break; case PaymentMethod.SOFORT: target = new SofortPaymentRequest(); break; case PaymentMethod.DirectDebit: target = new DirectDebitPaymentRequest(); break; default: throw new ArgumentException(); } serializer.Populate(token.CreateReader(), target); return(target); }
public void IdealPaymentRequest() { var obj = new IdealPaymentRequest { Amount = 86, Currency = "Lorum_409", Details = new IdealDetailsRequest { CallbackUrl = "Lorum_403", CancelledUrl = "Lorum_445", Description = "Lorum_571", ExpiredUrl = "Lorum_359", FailedUrl = "Lorum_554", IssuerId = "Lorum_81", PurchaseId = "Lorum_102", SuccessUrl = "Lorum_416" }, DueDate = DateTime.Now }; var deserialized = ConversionTest(obj); Assert.IsNotNull(deserialized); Assert.AreEqual(obj.Amount, deserialized.Amount); Assert.AreEqual(obj.Currency, deserialized.Currency); Assert.AreEqual(obj.Details.CallbackUrl, deserialized.Details.CallbackUrl); Assert.AreEqual(obj.Details.CancelledUrl, deserialized.Details.CancelledUrl); Assert.AreEqual(obj.Details.Description, deserialized.Details.Description); Assert.AreEqual(obj.Details.ExpiredUrl, deserialized.Details.ExpiredUrl); Assert.AreEqual(obj.Details.FailedUrl, deserialized.Details.FailedUrl); Assert.AreEqual(obj.Details.IssuerId, deserialized.Details.IssuerId); Assert.AreEqual(obj.Details.PurchaseId, deserialized.Details.PurchaseId); Assert.AreEqual(obj.Details.SuccessUrl, deserialized.Details.SuccessUrl); // Check only date and time up to seconds.. Json.NET does not save milliseconds. Assert.AreEqual(obj.DueDate.HasValue, deserialized.DueDate.HasValue); if (obj.DueDate.HasValue && deserialized.DueDate.HasValue) { Assert.AreEqual( new DateTime(obj.DueDate.Value.Year, obj.DueDate.Value.Month, obj.DueDate.Value.Day, obj.DueDate.Value.Hour, obj.DueDate.Value.Minute, obj.DueDate.Value.Second), new DateTime(deserialized.DueDate.Value.Year, deserialized.DueDate.Value.Month, deserialized.DueDate.Value.Day, deserialized.DueDate.Value.Hour, deserialized.DueDate.Value.Minute, deserialized.DueDate.Value.Second)); } }
public async Task <IActionResult> Checkout(string invoiceId, [FromForm] int type) { using (var context = new OverstagContext()) { var invoice = context.Invoices.Include(a => a.Payment).Include(b => b.User).FirstOrDefault(f => f.InvoiceID == Uri.UnescapeDataString(invoiceId)); var paymentType = (PayType)type; if (invoice == null) { return(View("~/Views/Error/Custom.cshtml", new string[] { "Factuur niet gevonden", "De factuur die u probeert te betalen is niet gevonden. Probeer het opnieuw, en als het niet lukt neem dan contact met ons op" })); } ViewBag.Amount = invoice.Amount; Payment p = new Payment() { InvoiceId = invoice.Id, PayType = paymentType, PlacedAt = DateTime.Now, UserId = invoice.UserID }; if (invoice.Payment != null) { if (invoice.Payment.IsPaid()) { invoice.Paid = true; context.Invoices.Update(invoice); await context.SaveChangesAsync(); return(View("~/Views/Error/Custom.cshtml", new string[] { "Factuur is al betaald.", "De factuur die u probeert te betalen is al betaald." })); } if (!invoice.Payment.IsFailed()) { p = invoice.Payment; #if MOLLIE_ENABLED if (!p.IsPaid() && p.PayType == PayType.MOLLIE) { //Get url PaymentClient pc = new PaymentClient(Core.General.Credentials.mollieApiToken); PaymentResponse ps = await pc.GetPaymentAsync(p.PaymentId); if (ps.Links.Checkout != null) //Still open for payment { ViewBag.PayLink = ps.Links.Checkout.Href; } } #endif return(View(p)); } } switch (paymentType) { case PayType.MOLLIE: { string cost = Math.Round((double)invoice.Amount / 100, 2).ToString("F").Replace(",", "."); string redirect = $"{string.Format("{0}://{1}", HttpContext.Request.Scheme, HttpContext.Request.Host)}/Pay/Invoice/{Uri.EscapeDataString(invoice.InvoiceID)}?showPayment=true"; string webhook = $"{string.Format("{0}://{1}", HttpContext.Request.Scheme, HttpContext.Request.Host)}/Pay/Webhook"; PaymentClient pc = new PaymentClient(Core.General.Credentials.mollieApiToken); IdealPaymentRequest pr = new IdealPaymentRequest() { Amount = new Amount(Currency.EUR, cost), Description = $"Overstag factuur #{invoice.Id}", RedirectUrl = redirect, Locale = "nl_NL", CustomerId = invoice.User.MollieID, Metadata = Uri.EscapeDataString(invoice.InvoiceID), #if !DEBUG WebhookUrl = webhook #endif }; #if MOLLIE_ENABLED PaymentResponse ps = await pc.CreatePaymentAsync(pr); ViewBag.PayLink = ps.Links.Checkout.Href; p.PaymentId = ps.Id; p.Status = ps.Status; #endif } break; case PayType.BANK: //Create payment request via bank or tikkie p.Status = PaymentStatus.Open; break; default: return(View("~/Views/Error/Custom.cshtml", new string[] { "Betaalmethode niet ondersteund", "De betaalmethode die u heeft gekozen wordt niet ondersteund." })); } context.Payments.Add(p); await context.SaveChangesAsync(); return(View(context.Payments.Include(x => x.Invoice).First(f => f.Invoice.InvoiceID == invoice.InvoiceID))); } }
public override string RedirectForPayment(OrderData orderData) { try { var appliedtotal = orderData.PurchaseInfo.GetXmlPropertyDouble("genxml/appliedtotal"); var alreadypaid = orderData.PurchaseInfo.GetXmlPropertyDouble("genxml/alreadypaid"); var info = ProviderUtils.GetProviderSettings(); string cartDesc = info.GetXmlProperty("genxml/textbox/cartdescription"); var ApiKey = info.GetXmlProperty("genxml/textbox/key"); var idealOnly = true; // default to previous behaviour if (info.XMLDoc.SelectSingleNode("genxml/checkbox/idealonly") != null) { // take the value from the settings, if it exists idealOnly = info.GetXmlPropertyBool("genxml/checkbox/idealonly"); } var notifyUrl = Utils.ToAbsoluteUrl("/DesktopModules/NBright/OS_Mollie/notify.ashx"); var returnUrl = Globals.NavigateURL(StoreSettings.Current.PaymentTabId, ""); //orderid/itemid var ItemId = orderData.PurchaseInfo.ItemID.ToString(""); var productOrderNumber = orderData.OrderNumber; ////var nbi = new NBrightInfo(); //nbi.XMLData = orderData.payselectionXml; //var paymentMethod = nbi.GetXmlProperty("genxml/textbox/paymentmethod"); //var paymentBank = nbi.GetXmlProperty("genxml/textbox/paymentbank"); //var apiKey = liveApiKey; string specifier; CultureInfo culture; specifier = "F"; culture = CultureInfo.CreateSpecificCulture("en-US"); var totalString = decimal.Parse((appliedtotal - alreadypaid).ToString("0.00")); var totalPrijsString2 = totalString.ToString(specifier, culture).Replace('€', ' ').Trim(); PaymentResponse result = null; if (idealOnly) { IPaymentClient paymentClient = new PaymentClient(ApiKey); IdealPaymentRequest paymentRequestIdeal = new IdealPaymentRequest() { Amount = new Amount(Currency.EUR, totalPrijsString2), Description = "Bestelling ID: " + " " + productOrderNumber + " " + cartDesc, RedirectUrl = returnUrl + "/orderid/" + ItemId, WebhookUrl = notifyUrl + "?orderid=" + ItemId, Locale = Locale.nl_NL, Method = PaymentMethod.Ideal }; var task = Task.Run(async() => (IdealPaymentResponse)await paymentClient.CreatePaymentAsync(paymentRequestIdeal)); task.Wait(); result = task.Result; } else { IPaymentClient paymentClient = new PaymentClient(ApiKey); PaymentRequest paymentRequest = new PaymentRequest() { Amount = new Amount(Currency.EUR, totalPrijsString2), Description = "Bestelling ID: " + " " + productOrderNumber + " " + cartDesc, RedirectUrl = returnUrl + "/orderid/" + ItemId, WebhookUrl = notifyUrl + "?orderid=" + ItemId, Locale = Locale.nl_NL, }; var task = Task.Run(async() => await paymentClient.CreatePaymentAsync(paymentRequest)); task.Wait(); result = task.Result; } orderData.PaymentPassKey = result.Id; orderData.OrderStatus = "020"; orderData.PurchaseInfo.SetXmlProperty("genxml/paymenterror", ""); orderData.PurchaseInfo.SetXmlProperty("genxml/posturl", result.Links.Checkout.Href); orderData.PurchaseInfo.Lang = Utils.GetCurrentCulture(); orderData.SavePurchaseData(); try { System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; // objEventLog.AddLog("Betaling aangemaakt: ", "ID: " + result.Id + " Bedrag:" + result.Amount.Currency + " ItemId: " + ItemId, PortalSettings, -1, EventLogController.EventLogType.ADMIN_ALERT); HttpContext.Current.Response.Clear(); //redirect naar Mollie HttpContext.Current.Response.Redirect(result.Links.Checkout.Href); } catch (Exception ex) { // rollback transaction orderData.PurchaseInfo.SetXmlProperty("genxml/paymenterror", "<div>ERROR: Invalid payment data </div><div>" + ex + "</div>"); orderData.PaymentFail("010"); //objEventLog.AddLog("Betaling aanmaken mislukt: ", "ID: " + result.Id + " Bedrag:" + result.Amount.Currency + " ItemId: " + ItemId, PortalSettings, -1, EventLogController.EventLogType.ADMIN_ALERT); var param = new string[3]; param[0] = "orderid=" + orderData.PurchaseInfo.ItemID.ToString(""); param[1] = "status=0"; return(Globals.NavigateURL(StoreSettings.Current.PaymentTabId, "", param)); } try { HttpContext.Current.Response.End(); } catch (Exception ex) { // this try/catch to avoid sending error 'ThreadAbortException' } return(""); } catch (Exception ex) { //objEventLog.AddLog("Foutje", "Dus:" + ex.Message + " " + ex.InnerException , PortalSettings, -1, EventLogController.EventLogType.ADMIN_ALERT); return(ex.InnerException.ToString()); } }