Esempio n. 1
0
        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);
        }
Esempio n. 3
0
 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 }");
     }
 }
Esempio n. 4
0
 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 }");
     }
 }
Esempio n. 5
0
        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");
        }
Esempio n. 6
0
        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}");
        }
Esempio n. 7
0
 public static void Setup()
 {
     mollieClient = new MollieClient(ConfigurationManager.AppSettings["mollie_api_key"]);
 }
 public void InitClass()
 {
     this.EnsureTestApiKey();
     this._mollieClient = new MollieClient(this.ApiTestKey);
 }
Esempio n. 9
0
        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("");
        }
Esempio n. 11
0
        /// <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)
                {
                }
            }
        }
Esempio n. 12
0
        /// <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
Esempio n. 13
0
 public static void InitClass(TestContext conext)
 {
     mollieClient = new MollieClient();
     mollieClient.setApiKey(ConfigurationManager.AppSettings["mollie_api_key"]);
 }