static void Main(string[] args) { MollieClient mollieClient = new MollieClient(ConfigurationManager.AppSettings["mollie_api_key"]); Console.WriteLine("Loading iDeal issuers ..."); Issuers issuers = mollieClient.ListIssuers(); foreach (Issuer issuer in issuers.data) { Console.WriteLine(issuer.name); } Console.WriteLine("Starting payment without method ..."); Payment payment = new Payment { amount = 99.99M, description = "Test payment", redirectUrl = "http://www.foxip.net/completed/?orderId=1245", }; PaymentStatus status = mollieClient.CreatePayment(payment); Console.WriteLine("The status is: " + status.status); Console.WriteLine("Please follow this link to start the payment:"); Console.WriteLine(status.links.paymentUrl); Console.WriteLine("Press [enter] to continue ..."); Console.ReadLine(); Console.WriteLine("Getting status ..."); status = mollieClient.GetPayment(status.id); Console.WriteLine("The status is now: " + status.status); //Refunds only for iDEAL, Bancontact/Mister Cash, SOFORT Banking, creditcard and banktransfer Console.WriteLine("Refunding ..."); try { RefundStatus refundStatus = mollieClient.CreateRefund(status.id); Console.WriteLine("The status is now: " + refundStatus.payment.status); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); } Console.WriteLine("Starting payment with a specific method ..."); status = mollieClient.CreatePayment(new Payment { amount = 1.99M, method = Method.mistercash, description = "Test payment", redirectUrl = "http://www.foxip.net/completed/?orderId=12345" }); Console.WriteLine("The status is: " + status.status); Console.WriteLine("Please follow this link to start the payment:"); Console.WriteLine(status.links.paymentUrl); Console.WriteLine("Press [enter] to continue ..."); Console.ReadLine(); }
public static String GetTemplateMollieData(String templatename, NBrightInfo pluginInfo) { var templ = GetTemplateData(templatename, pluginInfo); #region "Get Mollie options from API" var info = ProviderUtils.GetProviderSettings("DnnCMolliepayment"); var testMode = info.GetXmlPropertyBool("genxml/checkbox/testmode"); var testApiKey = info.GetXmlProperty("genxml/textbox/testapikey"); var liveApiKey = info.GetXmlProperty("genxml/textbox/liveapikey"); // Check to see if the test api keys is filled in, stops the error with the settings in the backoffice if (testApiKey != "") { var apiKey = testApiKey; if (!testMode) { apiKey = liveApiKey; } MollieClient mollieClient = new MollieClient(); mollieClient.setApiKey(apiKey); var strPayOptions = ""; PaymentMethods methods = mollieClient.GetPaymentMethods(); Issuers issuers = mollieClient.GetIssuers(); foreach (PaymentMethod method in methods.data) { strPayOptions += "<tr>"; strPayOptions += "<td><input type='radio' id='" + method.id + "' value='" + method.id + "' name='group1' class='rdoBanks' /></td>"; strPayOptions += "<td><img src='" + method.image.normal + "' /></td>"; strPayOptions += "<td><strong>" + method.description + "</strong></td>"; strPayOptions += "</tr>"; if (method.id == "ideal") { strPayOptions += "<tr><td colspan='3'><div id='bank-holder' class='hidden'>"; strPayOptions += "<select id='mollieidealgatewaybankselectordropdown' name='mollieidealgatewaybankselectordropdown' class='bankSelector'>"; strPayOptions += "<option>" + info.GetXmlProperty("genxml/textbox/bankdropdowntext") + "</option>"; foreach (Issuer issuer in issuers.data) { strPayOptions += string.Format("<option value=\"{0}\">{1}</option>", issuer.id, issuer.name); } strPayOptions += "</select>"; strPayOptions += "</div></td></tr>"; } strPayOptions += "<tr><td colspan='3'><hr/></td></tr>"; } templ = templ.Replace("[PAYMENTMETHODS]", strPayOptions); } #endregion return(templ); }
static void OutputPaymentMethods(MollieClient mollieClient) { Console.WriteLine("Ouputting all payment methods"); ListResponse<PaymentMethodResponse> paymentMethodList = mollieClient.GetPaymentMethodListAsync(0, 100).Result; foreach (PaymentMethodResponse paymentMethodResponse in paymentMethodList.Data) { Console.WriteLine($"Payment method description: { paymentMethodResponse.Description }"); } }
static void OutputPaymentList(MollieClient mollieClient) { Console.WriteLine("Outputting the first 2 payments"); ListResponse<PaymentResponse> paymentList = mollieClient.GetPaymentListAsync(0, 2).Result; foreach (PaymentResponse paymentResponse in paymentList.Data) { Console.WriteLine($"Payment Id: { paymentResponse.Id } - Payment method: { paymentResponse.Method }"); } }
static void Main(string[] args) { MollieClient mollieClient = new MollieClient("test_ykDGaYHm2y2crCz8VCsjuCDyUg46VN"); OutputAndWait("Press any key to create a new payment"); OutputNewPayment(mollieClient); OutputAndWait("Press any key to retrieve a list of payments"); OutputPaymentList(mollieClient); OutputAndWait("Press any key to retrieve a list of payment methods"); OutputPaymentMethods(mollieClient); OutputAndWait("Example completed"); }
static void OutputNewPayment(MollieClient mollieClient) { Console.WriteLine("Creating a payment"); PaymentRequest paymentRequest = new PaymentRequest() { Amount = 100, Description = "Test payment of the example project", RedirectUrl = "http://google.com" }; PaymentResponse paymentResponse = mollieClient.CreatePaymentAsync(paymentRequest).Result; Console.WriteLine("Payment created"); Console.WriteLine(""); Console.WriteLine($"Payment can be paid on the following URL: {paymentResponse.Links.PaymentUrl}"); }
public static void Setup() { mollieClient = new MollieClient(ConfigurationManager.AppSettings["mollie_api_key"]); }
public void InitClass() { this.EnsureTestApiKey(); this._mollieClient = new MollieClient(this.ApiTestKey); }
public PartialViewResult Index(RegisterViewModel m) { var timeSetting = WebConfigurationManager.AppSettings["RegistrationClose"]; var registrationClose = DateTime.ParseExact(timeSetting, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture); timeSetting = WebConfigurationManager.AppSettings["RegistrationStart"]; var registrationStart = DateTime.ParseExact(timeSetting, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture); timeSetting = WebConfigurationManager.AppSettings["RegistrationStartEarlyBird"]; var registrationStartEarlyBird = DateTime.ParseExact(timeSetting, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture); timeSetting = WebConfigurationManager.AppSettings["RegistrationStartOpenToAll"]; var registrationStartOpenToAll = DateTime.ParseExact(timeSetting, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture); // Check registration date, throw 403 otherwise. if (DateTime.Now >= registrationClose || DateTime.Now < registrationStartEarlyBird) { Response.StatusCode = 403; return(PartialView()); } // Get amount of RU students, CognAC and Dorans var permitCount = Convert.ToInt16(m.TeamCaptainRUStudent || m.TeamCaptainCognAC || m.TeamCaptainDorans) + Convert.ToInt16(m.Summoner2RUStudent || m.Summoner2CognAC || m.Summoner2Dorans) + Convert.ToInt16(m.Summoner3RUStudent || m.Summoner3CognAC || m.Summoner3Dorans) + Convert.ToInt16(m.Summoner4RUStudent || m.Summoner4CognAC || m.Summoner4Dorans) + Convert.ToInt16(m.Summoner5RUStudent || m.Summoner5CognAC || m.Summoner5Dorans); var earlyBirdCount = Convert.ToInt16(m.TeamCaptainCognAC || m.TeamCaptainDorans) + Convert.ToInt16(m.Summoner2CognAC || m.Summoner2Dorans) + Convert.ToInt16(m.Summoner3CognAC || m.Summoner3Dorans) + Convert.ToInt16(m.Summoner4CognAC || m.Summoner4Dorans) + Convert.ToInt16(m.Summoner5CognAC || m.Summoner5Dorans); // Check for at least 4 permitted clients if (DateTime.Now < registrationStartOpenToAll && permitCount < 3) { ModelState.AddModelError("permitCount", "The team does not exist of at least 4 RU students, CognAC members, or Dorans members."); } // Check for early-bird access if (DateTime.Now >= registrationStartEarlyBird && DateTime.Now < registrationStart) { if (earlyBirdCount < 5) { ModelState.AddModelError("earlyBirdAccess", "Registrations are currently only open for teams that have at least five CognAC and/or Dorans members."); } if (Mongo.Teams.Count(Query <Team> .Where(x => !x.Cancelled)) >= 12) { ModelState.AddModelError("earlyBirdFull", "All 12 early-bird spots are now taken. You can retry registering after the tournament registration officially opens for all students."); } } if (ModelState.IsValid) { // Note: we don't actually retrieve stuff from the Riot servers here. We do this in a separate cron thread asynchronously var teamId = ObjectId.GenerateNewId(); var captain = new Participant { Email = m.TeamCaptainEmail, FullName = m.TeamCaptainRealName, IsCaptain = true, LastUpdateTime = new DateTime(1900, 1, 1), RegisterTime = DateTime.UtcNow, StudyProgram = m.TeamCaptainStudy, TeamId = teamId, SummonerName = m.TeamCaptainName, RuStudent = m.TeamCaptainRUStudent, CognAC = m.TeamCaptainCognAC, Dorans = m.TeamCaptainDorans, StudentNumber = m.TeamCaptainStudentNumber }; var summoner2 = new Participant { Email = m.Summoner2Email, FullName = m.Summoner2RealName, IsCaptain = false, LastUpdateTime = new DateTime(1900, 1, 1), RegisterTime = DateTime.UtcNow, StudyProgram = m.Summoner2Study, TeamId = teamId, SummonerName = m.Summoner2Name, RuStudent = m.Summoner2RUStudent, CognAC = m.Summoner2CognAC, Dorans = m.Summoner2Dorans, StudentNumber = m.Summoner2StudentNumber }; var summoner3 = new Participant { Email = m.Summoner3Email, FullName = m.Summoner3RealName, IsCaptain = false, LastUpdateTime = new DateTime(1900, 1, 1), RegisterTime = DateTime.UtcNow, StudyProgram = m.Summoner3Study, TeamId = teamId, SummonerName = m.Summoner3Name, RuStudent = m.Summoner3RUStudent, CognAC = m.Summoner3CognAC, Dorans = m.Summoner3Dorans, StudentNumber = m.Summoner3StudentNumber }; var summoner4 = new Participant { Email = m.Summoner4Email, FullName = m.Summoner4RealName, IsCaptain = false, LastUpdateTime = new DateTime(1900, 1, 1), RegisterTime = DateTime.UtcNow, StudyProgram = m.Summoner4Study, TeamId = teamId, SummonerName = m.Summoner4Name, RuStudent = m.Summoner4RUStudent, CognAC = m.Summoner4CognAC, Dorans = m.Summoner4Dorans, StudentNumber = m.Summoner4StudentNumber }; var summoner5 = new Participant { Email = m.Summoner5Email, FullName = m.Summoner5RealName, IsCaptain = false, LastUpdateTime = new DateTime(1900, 1, 1), RegisterTime = DateTime.UtcNow, StudyProgram = m.Summoner5Study, TeamId = teamId, SummonerName = m.Summoner5Name, RuStudent = m.Summoner5RUStudent, CognAC = m.Summoner5CognAC, Dorans = m.Summoner5Dorans, StudentNumber = m.Summoner5StudentNumber }; Mongo.Participants.Insert(captain); Mongo.Participants.Insert(summoner2); Mongo.Participants.Insert(summoner3); Mongo.Participants.Insert(summoner4); Mongo.Participants.Insert(summoner5); var listParticipantIds = new List <ObjectId> { captain.Id, summoner2.Id, summoner3.Id, summoner4.Id, summoner5.Id }; var team = new Team { CaptainId = captain.Id, Id = teamId, Name = m.TeamName, ParticipantsIds = listParticipantIds, Cancelled = false, }; // Add team to database Mongo.Teams.Insert(team); // Create iDeal payment var key = WebConfigurationManager.AppSettings["MollieLiveKey"]; var client = new MollieClient { ApiKey = key }; var template = new PaymentTemplate { Amount = team.Price, Description = "LoL Championship Nijmegen 2017", RedirectUrl = "https://lolcognac.nl/Payment/Status/" + team.Id, Method = m.PaymentMethod }; var status = client.StartPayment(template); m.PaymentUrl = status.Links.PaymentUrl; m.Price = status.Amount; status.TeamId = team.Id; Mongo.Payments.Insert(status); // Send email EmailHelper.SendOfficialLoLRegistrationReminder(captain.Email, captain.FullName); return(PartialView("OK", m)); } // Model state is invalid, return form. return(PartialView("Form", m)); }
public override string RedirectForPayment(OrderData orderData) { var appliedtotal = orderData.PurchaseInfo.GetXmlPropertyDouble("genxml/appliedsubtotal"); var alreadypaid = orderData.PurchaseInfo.GetXmlPropertyDouble("genxml/alreadypaid"); var info = ProviderUtils.GetProviderSettings("DnnCMolliepayment"); var cartDesc = info.GetXmlProperty("genxml/textbox/cartdescription"); var testMode = info.GetXmlPropertyBool("genxml/checkbox/testmode"); var testApiKey = info.GetXmlProperty("genxml/textbox/testapikey"); var liveApiKey = info.GetXmlProperty("genxml/textbox/liveapikey"); var notifyUrl = Utils.ToAbsoluteUrl("/DesktopModules/NBright/DnnCMollie/notify.ashx"); var returnUrl = Globals.NavigateURL(StoreSettings.Current.PaymentTabId, ""); var ItemId = orderData.PurchaseInfo.ItemID.ToString(""); var nbi = new NBrightInfo(); nbi.XMLData = orderData.payselectionXml; var paymentMethod = nbi.GetXmlProperty("genxml/textbox/paymentmethod"); var paymentBank = nbi.GetXmlProperty("genxml/textbox/paymentbank"); var apiKey = testApiKey; if (!testMode) { apiKey = liveApiKey; } MollieClient mollieClient = new MollieClient(); mollieClient.setApiKey(apiKey); Payment payment = new Payment() { amount = decimal.Parse((appliedtotal - alreadypaid).ToString("0.00", CultureInfo.InvariantCulture)), //99.99M, description = cartDesc, redirectUrl = returnUrl + "/orderid/" + ItemId, method = (Method)Enum.Parse(typeof(Method), paymentMethod, true), issuer = paymentBank, metadata = ItemId, webhookUrl = notifyUrl, }; PaymentStatus paymentStatus = mollieClient.StartPayment(payment); orderData.OrderStatus = "020"; orderData.PurchaseInfo.SetXmlProperty("genxml/paymenterror", ""); orderData.PurchaseInfo.SetXmlProperty("genxml/posturl", paymentStatus.links.paymentUrl); orderData.PurchaseInfo.Lang = Utils.GetCurrentCulture(); orderData.SavePurchaseData(); try { HttpContext.Current.Response.Clear(); HttpContext.Current.Response.Write(ProviderUtils.GetBankRemotePost(orderData)); } catch (Exception ex) { // rollback transaction orderData.PurchaseInfo.SetXmlProperty("genxml/paymenterror", "<div>ERROR: Invalid payment data </div><div>" + ex + "</div>"); orderData.PaymentFail(); 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(""); }
/// <summary> /// Updates the Mollie payment in the database. /// </summary> public void Update() { var key = WebConfigurationManager.AppSettings["MollieLiveKey"]; var client = new MollieClient { ApiKey = key }; var updatedPayment = client.GetStatus(MollieId); var oldStatus = Status; Status = updatedPayment.Status; AmountRefunded = updatedPayment.AmountRefunded; AmountRemaining = updatedPayment.AmountRemaining; CancelledDateTime = updatedPayment.CancelledDateTime; CreatedDateTime = updatedPayment.CreatedDateTime; Details = updatedPayment.Details; PaidDateTime = updatedPayment.PaidDateTime; ExpiredDateTime = updatedPayment.ExpiredDateTime; Locale = updatedPayment.Locale; Mongo.Payments.Save(this); var team = Mongo.Teams.FindOne(Query <Team> .Where(x => x.Id == TeamId)); // If payment status did not change, return if (oldStatus == Status) { return; } // Cancel team in database if (Status == PaymentStatus.Cancelled || Status == PaymentStatus.Expired) { team.Cancelled = true; Mongo.Teams.Save(team); // Send email var captain = team.Participants.Single(x => x.IsCaptain); EmailHelper.SendPaymentFailure(captain.Email, captain.FullName, Status); } else if (Status == PaymentStatus.Refunded) { // Send email var captain = team.Participants.Single(x => x.IsCaptain); EmailHelper.SendPaymentPartialRefund(captain.Email, captain.FullName); Mongo.Teams.Save(team); } else if (Status == PaymentStatus.Paid) { // Send email var captain = team.Participants.Single(x => x.IsCaptain); EmailHelper.SendPaymentSuccess(captain.Email, captain.FullName); // Force summoner scrape try { new RiotApiScrapeJob().ScrapeSummoners(null); } catch (Exception) { } } }
/// <summary> /// This function needs to process and returned message from the bank. /// Thsi processing may vary widely between banks. /// </summary> /// <param name="context"></param> public void ProcessRequest(HttpContext context) { var modCtrl = new NBrightBuyController(); var info = ProviderUtils.GetProviderSettings("DnnCMolliepayment"); try { var debugMode = info.GetXmlPropertyBool("genxml/checkbox/debugmode"); var debugMsg = "START CALL" + DateTime.Now.ToString("s") + " </br>"; debugMsg += "returnmessage: " + context.Request.Form.Get("returnmessage") + "</br>"; if (debugMode) { info.SetXmlProperty("genxml/debugmsg", debugMsg); modCtrl.Update(info); } debugMsg = "DnnCMollie DEBUG: " + DateTime.Now.ToString("s") + " </br>"; var rtnMsg = "version=2" + Environment.NewLine + "cdr=1"; // ------------------------------------------------------------------------ // In this case the payment provider passes back data via form POST. // Get the data we need. //string returnmessage = ""; //int DnnCMollieStoreOrderID = 0; //string DnnCMollieCartID = ""; //string DnnCMollieClientLang = ""; var testMode = info.GetXmlPropertyBool("genxml/checkbox/testmode"); var testApiKey = info.GetXmlProperty("genxml/textbox/testapikey"); var liveApiKey = info.GetXmlProperty("genxml/textbox/liveapikey"); var nbi = new NBrightInfo(); var paymentMethod = nbi.GetXmlProperty("genxml/textbox/paymentmethod"); var paymentBank = nbi.GetXmlProperty("genxml/textbox/paymentbank"); var apiKey = testApiKey; if (!testMode) { apiKey = liveApiKey; } string molliePaymentId = context.Request.Form["id"]; int oId = -1; int.TryParse(context.Request.Form["orderid"], out oId); if (oId <= 0) { int.TryParse(context.Request.Form["ordid"], out oId); } MollieClient mollieClient = new MollieClient(); mollieClient.setApiKey(apiKey); PaymentStatus paymentStatus = mollieClient.GetStatus(molliePaymentId); var orderid = paymentStatus.metadata; var nbInfo = modCtrl.Get(Convert.ToInt32(orderid), "ORDER"); if (nbi != null) { var orderData = new OrderData(nbInfo.ItemID); switch (paymentStatus.status.Value) { case Status.paid: orderData.PaymentOk(); break; case Status.cancelled: //set order status to Cancelled orderData.PaymentOk("030"); break; case Status.failed: //set order status to payment failed orderData.PaymentFail(); break; case Status.open: //set order status to Waiting for payment orderData.PaymentOk("060"); break; case Status.pending: //set order status to Waiting for payment orderData.PaymentOk("060"); break; case Status.expired: //set order status to Incomplete orderData.PaymentOk("010"); break; } var rtnStr = paymentStatus.status.Value + "<br/> id = " + molliePaymentId; rtnStr += "<br/> orderId = " + orderid; rtnStr += "<br/> status = " + orderData.OrderStatus; File.WriteAllText(PortalSettings.Current.HomeDirectoryMapPath + "\\debug_DnnC_IPN_return.html", rtnStr.ToString()); } } catch { } } //end
public static void InitClass(TestContext conext) { mollieClient = new MollieClient(); mollieClient.setApiKey(ConfigurationManager.AppSettings["mollie_api_key"]); }