public PaymentRequest CreatePaymentRequest(OrderInfo orderInfo)
        {
            var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id, orderInfo.StoreInfo.Alias);

            var partnerId = paymentProvider.GetSetting("PartnerId");
            var returnUrl = paymentProvider.SuccessUrl();
            var reportUrl = paymentProvider.ReportUrl();
            var testMode  = paymentProvider.TestMode;

            var idealFetch = new IdealFetch(partnerId, testMode, orderInfo.OrderNumber, reportUrl, returnUrl, orderInfo.PaymentInfo.MethodId, orderInfo.ChargedAmount);

            if (idealFetch.Error)
            {
                Log.Instance.LogError("Mollie PaymentRequestHandler.CreatePaymentRequest: idealFetch.Error: " + idealFetch.ErrorMessage);
                return(null);
            }

            var transactionId = idealFetch.TransactionId;

            orderInfo.PaymentInfo.Url = idealFetch.Url;

            PaymentProviderHelper.SetTransactionId(orderInfo, transactionId);

            return(new PaymentRequest());
        }
예제 #2
0
        public ProcessPaymentResult Process(PaymentProcessingContext context)
        {
            if (context.Amount < (decimal)1.19)
            {
                throw new FormatException("Amount cannot be less than € 1,19");
            }

            var settings = context.ProcessorConfig as IDealConfig;

            var instance    = CommerceInstance.Current.Name;
            var httpContext = HttpContextAccessor();
            var reportUrl   = Strings.AreaName + "/iDeal/Callback?instance=" + instance;
            var returnUrl   = Strings.AreaName
                              + "/iDeal/Return?instance=" + instance
                              + "&paymentId=" + context.Payment.Id
                              + "&commerceReturnUrl=" + HttpUtility.UrlEncode(context.ReturnUrl);

            var idealFetch = new IdealFetch(
                settings.PartnerId
                , context.Payment.Description
                , reportUrl.ToFullUrl(httpContext)
                , returnUrl.ToFullUrl(httpContext)
                , ""
                , context.Amount
                );

            if (idealFetch.Error)
            {
                throw new PaymentProcessorException(idealFetch.ErrorMessage);
            }

            return(ProcessPaymentResult.Pending(idealFetch.Url, idealFetch.TransactionId));
        }
예제 #3
0
        public ProcessPaymentResult Process(PaymentProcessingContext context)
        {
            if (context.Amount < (decimal)1.19)
                throw new FormatException("Amount cannot be less than € 1,19");

            var settings = context.ProcessorConfig as IDealConfig;

            var instance = CommerceInstance.Current.Name;
            var httpContext = HttpContextAccessor();
            var reportUrl = Strings.AreaName + "/iDeal/Callback?instance=" + instance;
            var returnUrl = Strings.AreaName
                + "/iDeal/Return?instance=" + instance
                + "&paymentId=" + context.Payment.Id
                + "&commerceReturnUrl=" + HttpUtility.UrlEncode(context.ReturnUrl);

            var idealFetch = new IdealFetch(
                settings.PartnerId
                , context.Payment.Description
                , reportUrl.ToFullUrl(httpContext)
                , returnUrl.ToFullUrl(httpContext)
                , ""
                , context.Amount
            );

            if (idealFetch.Error)
                throw new PaymentProcessorException(idealFetch.ErrorMessage);

            return ProcessPaymentResult.Pending(idealFetch.Url, idealFetch.TransactionId);
        }
예제 #4
0
        /// <summary>
        /// Gets the transaction URL.
        /// </summary>
        /// <param name="settings">The settings.</param>
        /// <param name="order">The order.</param>
        /// <returns></returns>
        public Dictionary <string, string> getTransactionURL(IDictionary <string, string> settings, Api.Models.Order order)
        {
            Dictionary <string, string> resultList = new Dictionary <string, string>();

            settings.MustContainKey("mollieiDealBanksPropertyAlias", "settings");
            settings.MustContainKey("OrderDescriptionField", "settings");
            string  bankId = order.Properties[settings["mollieiDealBanksPropertyAlias"]];
            decimal amount = order.TotalPrice.Value.WithVat;

            //var hash = GenerateHMACMD5Hash(settings["SecretKey"], string.Format("{0}{1}{2}", settings["PartnerId"], settings["ProfileKey"], order.CartNumber));
            var hash = new HMACSHA256(Encoding.UTF8.GetBytes(settings["SecretKey"])).ComputeHash(Encoding.UTF8.GetBytes(string.Format("{0}{1}{2}", settings["PartnerId"], settings["ProfileKey"], order.CartNumber))).ToBase64();

            var    qs                    = (settings["ReportUrl"].Contains('?')) ? "&" : "?";
            string reporturl             = string.Format("{0}{1}cartNumber={2}&hash={3}", settings["ReportUrl"], qs, order.CartNumber, hash);
            string orderDescriptionField = settings["OrderDescriptionField"];
            string description           = string.Format("{0} {1}", orderDescriptionField, order.CartNumber);

            qs = (settings["ReturnUrl"].Contains('?')) ? "&" : "?";
            string returnurl   = string.Format("{0}{1}orderId={2}", settings["ReturnUrl"], qs, order.Id);
            string profile_key = settings["ProfileKey"];
            string partner_id  = settings["PartnerId"];
            string mollieUrl   = settings["MollieUrl"];

            bool testmode = false;

            if (settings["TestMode"] == "1")
            {
                testmode = true;
            }

            IdealFetch idealFetch = new IdealFetch
                                    (
                partner_id     //replace this by your Mollie partnerid
                , testmode     //testmode
                , description
                , reporturl
                , returnurl
                , bankId
                , amount
                                    );

            resultList.Add("transactionId", idealFetch.TransactionId);
            resultList.Add("transactionUrl", idealFetch.Url);

            return(resultList);
        }
예제 #5
0
        public static string GetPaymentUrl(Transaction idealPayer, string mollieClientNumber, bool testMode, string paymentName, string reportUrl, string landUrl)
        {
            if(idealPayer.Payed)
                throw new Exception("Er is al betaald");

            IdealFetch idealFetch = new IdealFetch(mollieClientNumber, testMode, paymentName, reportUrl, landUrl, idealPayer.BankId, idealPayer.Amount);

            if (idealFetch.Error)
            {
                throw new Exception(idealFetch.ErrorMessage);
            }

            idealPayer.TransactionId = idealFetch.TransactionId;
            using( TransactionScope transactionScope = new TransactionScope(TransactionMode.Inherits, OnDispose.Rollback))
            {
                idealPayer.Save();
                transactionScope.VoteCommit();
            }

            return idealFetch.Url;
        }
        public PaymentRequest CreatePaymentRequest(OrderInfo orderInfo)
        {
            var paymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id, orderInfo.StoreInfo.Alias);

            var partnerId = paymentProvider.GetSetting("PartnerId");
            var returnUrl = paymentProvider.SuccessUrl();
            var reportUrl = paymentProvider.ReportUrl();
            var testMode = paymentProvider.TestMode;

            var idealFetch = new IdealFetch(partnerId, testMode, orderInfo.OrderNumber, reportUrl, returnUrl, orderInfo.PaymentInfo.MethodId, orderInfo.ChargedAmount);

            if (idealFetch.Error)
            {
                Log.Instance.LogError("Mollie PaymentRequestHandler.CreatePaymentRequest: idealFetch.Error: " + idealFetch.ErrorMessage);
                return null;
            }

            var transactionId = idealFetch.TransactionId;
            orderInfo.PaymentInfo.Url = idealFetch.Url;

            PaymentProviderHelper.SetTransactionId(orderInfo, transactionId);

            return new PaymentRequest();
        }