コード例 #1
0
        // **** Helper Methods ****

        public static string GetValue(string key)
        {
            var basket = API.Basket.GetBasket();

            var paymentProvider = new PaymentProvider(basket.Payment.Providers.FirstOrDefault().Id);

            return(paymentProvider.GetSetting(key));
        }
コード例 #2
0
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            var orderId = HttpContext.Current.Request.QueryString["orderid"] ?? "";

            if (paymentProvider == null || string.IsNullOrEmpty(orderId))
            {
                return(null);
            }
            orderInfo = OrderHelper.GetOrder(orderId);
            if (orderInfo != null)
            {
                var localizedPaymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id, orderInfo.StoreInfo.Alias);
                var secret    = paymentProvider.GetSetting("secret");
                var amount    = HttpContext.Current.Request.QueryString["amount"] ?? "0";
                var validated = true;
                if (secret != string.Empty)
                {
                    var sb = new StringBuilder();
                    foreach (var key in HttpContext.Current.Request.QueryString.AllKeys)
                    {
                        if (key != "hash")
                        {
                            sb.Append(HttpContext.Current.Request.QueryString[key]);
                        }
                    }
                    var calculated = ePayPaymentBase.MD5(sb.ToString() + secret).ToUpperInvariant();
                    var incoming   = (HttpContext.Current.Request.QueryString["hash"] ?? "").ToUpperInvariant();
                    validated = calculated == incoming;
                    if (!validated)
                    {
                        //checksum error
                        Log.Instance.LogError("Payment provider (ePay) error : Orderid " + orderId + " - incoming hash " + incoming + " - calculated hash " + calculated);
                    }
                }
                if (validated && (amount == orderInfo.ChargedAmountInCents.ToString()))
                {
                    orderInfo.Paid   = true;
                    orderInfo.Status = OrderStatus.ReadyForDispatch;
                    orderInfo.Save();
                }
                else
                {
                    orderInfo.Paid   = false;
                    orderInfo.Status = OrderStatus.PaymentFailed;
                    orderInfo.Save();
                    if (validated)
                    {
                        //checksum already logged, must be problem with amount
                        Log.Instance.LogError("Payment provider (ePay) error : Orderid " + orderId + " - incoming amount " + amount.ToString() + " - order amount " + orderInfo.ChargedAmountInCents.ToString());
                    }
                }
            }
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.Write("OK");
            HttpContext.Current.Response.Flush();
            return(orderInfo);
        }
コード例 #3
0
 public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
 {
     var orderId = HttpContext.Current.Request.QueryString["orderid"] ?? "";
     if (paymentProvider == null || string.IsNullOrEmpty(orderId))
     {
         return null;
     }
     orderInfo = OrderHelper.GetOrder(orderId);
     if (orderInfo != null)
     {
         var localizedPaymentProvider = PaymentProvider.GetPaymentProvider(orderInfo.PaymentInfo.Id, orderInfo.StoreInfo.Alias);
         var secret = paymentProvider.GetSetting("secret");
         var amount = HttpContext.Current.Request.QueryString["amount"] ?? "0";
         var validated = true;
         if (secret != string.Empty)
         {
             var sb = new StringBuilder();
             foreach (var key in HttpContext.Current.Request.QueryString.AllKeys)
             {
                 if (key != "hash")
                 {
                     sb.Append(HttpContext.Current.Request.QueryString[key]);
                 }
             }
             var calculated = ePayPaymentBase.MD5(sb.ToString() + secret).ToUpperInvariant();
             var incoming = (HttpContext.Current.Request.QueryString["hash"] ?? "").ToUpperInvariant();
             validated = calculated == incoming;
             if (!validated)
             {
                 //checksum error
                 Log.Instance.LogError("Payment provider (ePay) error : Orderid " + orderId + " - incoming hash " + incoming + " - calculated hash " + calculated);
             }
         }
         if (validated && (amount == orderInfo.ChargedAmountInCents.ToString()))
         {
             orderInfo.Paid = true;
             orderInfo.Status = OrderStatus.ReadyForDispatch;
             orderInfo.Save();
         }
         else
         {
             orderInfo.Paid = false;
             orderInfo.Status = OrderStatus.PaymentFailed;
             orderInfo.Save();
             if (validated)
             {
                 //checksum already logged, must be problem with amount
                 Log.Instance.LogError("Payment provider (ePay) error : Orderid " + orderId + " - incoming amount " + amount.ToString() + " - order amount " + orderInfo.ChargedAmountInCents.ToString());
             }
         }
     }
     HttpContext.Current.Response.Clear();
     HttpContext.Current.Response.Write("OK");
     HttpContext.Current.Response.Flush();
     return orderInfo;
 }
コード例 #4
0
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            var data = HttpContext.Current.Request["Data"];
            var seal = HttpContext.Current.Request["Seal"];

            Log.Instance.LogDebug("Omnikassa data: " + data + " Omnikassa seal: " + seal);

            var securityKey = paymentProvider.GetSetting("SecurityKey");

            // Verifieer de Seal
            var sha256    = SHA256.Create();
            var hashValue = sha256.ComputeHash(new UTF8Encoding().GetBytes(data + securityKey));

            if (seal.ToLower() == ByteArrayToHexString(hashValue).ToLower())             // Seal is goed
            {
                // Lees de gewenste waarden uit de server response
                var dataItems       = ParseData(data);
                var transactionCode = dataItems.First(i => i.Key == "transactionReference").Value;
                var responseCode    = dataItems.First(i => i.Key == "responseCode").Value;

                Log.Instance.LogDebug("Omnikassa transactionCode: " + transactionCode + " responseCode: " + responseCode);

                orderInfo = OrderHelper.GetOrder(transactionCode);

                Log.Instance.LogDebug("Omnikassa orderInfo: " + orderInfo.OrderNumber);

                var successUrl = paymentProvider.SuccessUrl();
                var cancelUrl  = paymentProvider.ErrorUrl();

                var redirectUrl = successUrl;

                //Code	Beschrijving
                //00	Transaction success, authorization accepted (transactie gelukt, autorisatie geaccepteerd).
                //02	Please call the bank because the authorization limit on the card has been exceeded (neem contact op met de bank; de autorisatielimiet op de kaart is overschreden)
                //03	Invalid merchant contract (ongeldig contract webwinkel)
                //05	Do not honor, authorization refused (niet inwilligen, autorisatie geweigerd)
                //12	Invalid transaction, check the parameters sent in the request (ongeldige transactie, controleer de in het verzoek verzonden parameters).
                //14	Invalid card number or invalid Card Security Code or Card (for
                //MasterCard) or invalid Card Verification Value (for Visa/MAESTRO) (ongeldig kaartnummer of ongeldige beveiligingscode of kaart (voor MasterCard) of ongeldige waarde kaartverificatie (voor Visa/MAESTRO))
                //17	Cancellation of payment by the end user (betaling geannuleerd door eindgebruiker/klant)
                //24	Invalid status (ongeldige status).
                //25	Transaction not found in database (transactie niet gevonden in database)
                //30	Invalid format (ongeldig formaat)
                //34	Fraud suspicion (vermoeden van fraude)
                //40	Operation not allowed to this Merchant (handeling niet toegestaan voor deze webwinkel)
                //60	Pending transaction (transactie in behandeling)
                //63	Security breach detected, transaction stopped (beveiligingsprobleem gedetecteerd, transactie gestopt).
                //75	The number of attempts to enter the card number has been exceeded (three tries exhausted) (het aantal beschikbare pogingen om het card‐nummer in te geven is overschreden (max. drie))
                //90	Acquirer server temporarily unavailable (server acquirer tijdelijk onbeschikbaar)
                //94	Duplicate transaction (duplicaattransactie). (transactiereferentie al gereserveerd)
                //97	Request time‐out; transaction refused (time‐out voor verzoek; transactie geweigerd)
                //99	Payment page temporarily unavailable (betaalpagina tijdelijk niet beschikbaar)


                if (orderInfo.Paid == false)
                {
                    switch (responseCode)
                    {
                    case "00":
                        orderInfo.Paid   = true;
                        orderInfo.Status = OrderStatus.ReadyForDispatch;
                        break;

                    case "60":
                    case "90":
                        orderInfo.Paid   = false;
                        orderInfo.Status = OrderStatus.WaitingForPaymentProvider;
                        break;

                    case "17":
                        orderInfo.Paid   = false;
                        orderInfo.Status = OrderStatus.PaymentFailed;
                        orderInfo.PaymentInfo.ErrorMessage = "CANCELLED";
                        redirectUrl = cancelUrl;
                        break;

                    case "EXPIRED":
                        orderInfo.Paid   = false;
                        orderInfo.Status = OrderStatus.PaymentFailed;
                        orderInfo.PaymentInfo.ErrorMessage = "EXPIRED";

                        redirectUrl = cancelUrl;
                        break;

                    default:
                        orderInfo.Paid   = false;
                        orderInfo.Status = OrderStatus.WaitingForPaymentProvider;

                        redirectUrl = cancelUrl;
                        break;
                    }

                    orderInfo.Save();
                }

                HttpContext.Current.Response.Redirect(redirectUrl);
            }
            else
            {
                throw new Exception("SEAL BROKEN");
            }

            return(orderInfo);
        }
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            var transactionId = HttpContext.Current.Request["transactionid"];

            if (string.IsNullOrEmpty(transactionId))
            {
                Log.Instance.LogDebug("MultiSafePay IPaymentResponseHandler transactionId == null");
                return(null);
            }

            orderInfo = OrderHelper.GetOrder(transactionId);

            if (orderInfo.Paid != false)
            {
                Log.Instance.LogDebug("MultiSafePay IPaymentResponseHandler Order Already Paid for transactionId: " + transactionId);
                return(null);
            }

            var accountId    = paymentProvider.GetSetting("accountId");
            var siteId       = paymentProvider.GetSetting("siteId");
            var siteSecureId = paymentProvider.GetSetting("siteSecureId");
            var testURL      = paymentProvider.GetSetting("testURL");
            var liveUrl      = paymentProvider.GetSetting("url");

            var statusRequest = new StatusRequest
            {
                AccountId     = long.Parse(accountId),
                TransactionId = transactionId,
                SiteId        = long.Parse(siteId),
                SiteSecureId  = long.Parse(siteSecureId)
            };

            var apiURL = paymentProvider.TestMode ? testURL : liveUrl;

            try
            {
                var httpWebRequest = (HttpWebRequest)WebRequest.Create(apiURL);
                httpWebRequest.Method        = "POST";
                httpWebRequest.ContentLength = Encoding.UTF8.GetByteCount(statusRequest.GetXml());
                httpWebRequest.ContentType   = "application/x-www-form-urlencoded";

                var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream());
                streamWriter.Write(statusRequest.GetXml());
                streamWriter.Close();

                var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                var streamReader    = new StreamReader(httpWebResponse.GetResponseStream());
                var xmlDoc          = XDocument.Parse(streamReader.ReadToEnd());

                Log.Instance.LogDebug("MultiSafePay IPaymentResponseHandler XML Answer: " + HttpUtility.HtmlEncode(xmlDoc.ToString(SaveOptions.None)));

                var ewallet = xmlDoc.Root.Element("ewallet");
                var status  = ewallet.Element("status").Value;

                orderInfo.Status = OrderStatus.WaitingForPayment;

                //– completed: succesvol voltooid
                //– initialized: aangemaakt, maar nog niet voltooid
                //– uncleared: aangemaakt, maar nog niet vrijgesteld (credit cards)
                //– void: geannuleerd
                //– declined: afgewezen
                //– refunded: terugbetaald
                //– expired: verlopen

                switch (status)
                {
                case "completed":
                    orderInfo.Paid   = true;
                    orderInfo.Status = OrderStatus.ReadyForDispatch;
                    break;

                case "uncleared":
                    orderInfo.Status = OrderStatus.WaitingForPaymentProvider;
                    break;

                case "declined":
                    orderInfo.Paid   = false;
                    orderInfo.Status = OrderStatus.PaymentFailed;
                    orderInfo.PaymentInfo.ErrorMessage = status;
                    break;

                case "expired":
                    orderInfo.Paid   = false;
                    orderInfo.Status = OrderStatus.PaymentFailed;
                    orderInfo.PaymentInfo.ErrorMessage = status;
                    break;

                case "void":
                    orderInfo.Paid   = false;
                    orderInfo.Status = OrderStatus.PaymentFailed;
                    orderInfo.PaymentInfo.ErrorMessage = status;
                    break;
                }

                orderInfo.Save();
            }
            catch (Exception ex)
            {
                Log.Instance.LogError("MultiSafePayPaymentResponseHandler.HandlePaymentResponse: " + ex);
            }

            return(orderInfo);
        }
コード例 #6
0
        /// <summary>
        /// Handles the response
        /// </summary>
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            var payPalTestMode = paymentProvider != null && paymentProvider.TestMode;

            var liveUrl = "https://www.paypal.com/cgi-bin/webscr";
            var testUrl = "https://www.sandbox.paypal.com/us/cgi-bin/webscr";

            var configLiveUrl = paymentProvider.GetSetting("Url");
            var configTestUrl = paymentProvider.GetSetting("testUrl");

            if (!string.IsNullOrEmpty(configLiveUrl))
            {
                liveUrl = configLiveUrl;
            }
            if (!string.IsNullOrEmpty(configTestUrl))
            {
                testUrl = configTestUrl;
            }

            var req = payPalTestMode ? (HttpWebRequest)WebRequest.Create(testUrl) : (HttpWebRequest)WebRequest.Create(liveUrl);

            //Set values for the request back
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            var param = HttpContext.Current.Request.BinaryRead(HttpContext.Current.Request.ContentLength);
            var strRequest = Encoding.ASCII.GetString(param);
            strRequest += "&cmd=_notify-validate";
            req.ContentLength = strRequest.Length;

            //for proxy
            //WebProxy proxy = new WebProxy(new Uri("http://url:port#"));
            //req.Proxy = proxy;

            //Send the request to PayPal and get the response
            var streamOut = new StreamWriter(req.GetRequestStream(), Encoding.ASCII);
            streamOut.Write(strRequest);
            streamOut.Close();
            var streamIn = new StreamReader(req.GetResponse().GetResponseStream());
            var strResponse = streamIn.ReadToEnd();
            streamIn.Close();

            Log.Instance.LogDebug("PAYPAL RETURN strResponse: " + strResponse);

            switch (strResponse)
            {
                case "VERIFIED":
                    {
                        // PayPal POSTS some values
                        var paymentStatus = HttpContext.Current.Request["payment_status"];

                        Log.Instance.LogDebug("PAYPAL RETURN paymentStatus: " + paymentStatus);

                        // Get identifier created with the RequestHandler
                        var transactionId = HttpContext.Current.Request["custom"];

                        Log.Instance.LogDebug("PAYPAL RETURN transactionId: " + transactionId);

                        // Match  identifier to order
                        var order = OrderHelper.GetOrder(transactionId);

                        // Check for match
                        if (order != null && order.Paid == false)
                        {
                            Log.Instance.LogDebug("PAYPAL RETURN STATUS: " + paymentStatus);
                            // Get statusses from payment provider Response
                            switch (paymentStatus)
                            {
                                case "Completed":
                                    order.Paid = true;
                                    order.Status = OrderStatus.ReadyForDispatch;
                                    break;
                                case "Failed":
                                    order.Paid = false;
                                    order.Status = OrderStatus.PaymentFailed;
                                    break;
                                case "Denied":
                                    order.Paid = false;
                                    order.Status = OrderStatus.PaymentFailed;
                                    break;
                                case "Pending":
                                    order.Status = OrderStatus.WaitingForPaymentProvider;

                                    break;
                            }
                            order.Save();

                            orderInfo = order;
                        }
                    }
                    break;
                case "INVALID":
                    break;
            }

            return orderInfo;
        }
コード例 #7
0
        // **** Helper Methods ****
        public static string GetValue(string key)
        {
            var basket = API.Basket.GetBasket();

            var paymentProvider = new PaymentProvider(basket.Payment.Providers.FirstOrDefault().Id);

            return paymentProvider.GetSetting(key);
        }
コード例 #8
0
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            var data = HttpContext.Current.Request["Data"];
            var seal = HttpContext.Current.Request["Seal"];

            Log.Instance.LogDebug("Omnikassa data: " + data + " Omnikassa seal: " + seal);

            var securityKey = paymentProvider.GetSetting("SecurityKey");

            // Verifieer de Seal
            var sha256 = SHA256.Create();
            var hashValue = sha256.ComputeHash(new UTF8Encoding().GetBytes(data + securityKey));

            if (seal.ToLower() == ByteArrayToHexString(hashValue).ToLower()) // Seal is goed
            {
                // Lees de gewenste waarden uit de server response
                var dataItems = ParseData(data);
                var transactionCode = dataItems.First(i => i.Key == "transactionReference").Value;
                var responseCode = dataItems.First(i => i.Key == "responseCode").Value;

                Log.Instance.LogDebug("Omnikassa transactionCode: " + transactionCode + " responseCode: " + responseCode);

                orderInfo = OrderHelper.GetOrder(transactionCode);

                Log.Instance.LogDebug("Omnikassa orderInfo: " + orderInfo.OrderNumber);

                var successUrl = paymentProvider.SuccessUrl();
                var cancelUrl = paymentProvider.ErrorUrl();

                var redirectUrl = successUrl;

                //Code	Beschrijving
                //00	Transaction success, authorization accepted (transactie gelukt, autorisatie geaccepteerd).
                //02	Please call the bank because the authorization limit on the card has been exceeded (neem contact op met de bank; de autorisatielimiet op de kaart is overschreden)
                //03	Invalid merchant contract (ongeldig contract webwinkel)
                //05	Do not honor, authorization refused (niet inwilligen, autorisatie geweigerd)
                //12	Invalid transaction, check the parameters sent in the request (ongeldige transactie, controleer de in het verzoek verzonden parameters).
                //14	Invalid card number or invalid Card Security Code or Card (for
                //MasterCard) or invalid Card Verification Value (for Visa/MAESTRO) (ongeldig kaartnummer of ongeldige beveiligingscode of kaart (voor MasterCard) of ongeldige waarde kaartverificatie (voor Visa/MAESTRO))
                //17	Cancellation of payment by the end user (betaling geannuleerd door eindgebruiker/klant)
                //24	Invalid status (ongeldige status).
                //25	Transaction not found in database (transactie niet gevonden in database)
                //30	Invalid format (ongeldig formaat)
                //34	Fraud suspicion (vermoeden van fraude)
                //40	Operation not allowed to this Merchant (handeling niet toegestaan voor deze webwinkel)
                //60	Pending transaction (transactie in behandeling)
                //63	Security breach detected, transaction stopped (beveiligingsprobleem gedetecteerd, transactie gestopt).
                //75	The number of attempts to enter the card number has been exceeded (three tries exhausted) (het aantal beschikbare pogingen om het card‐nummer in te geven is overschreden (max. drie))
                //90	Acquirer server temporarily unavailable (server acquirer tijdelijk onbeschikbaar)
                //94	Duplicate transaction (duplicaattransactie). (transactiereferentie al gereserveerd)
                //97	Request time‐out; transaction refused (time‐out voor verzoek; transactie geweigerd)
                //99	Payment page temporarily unavailable (betaalpagina tijdelijk niet beschikbaar)

                if (orderInfo.Paid == false)
                {
                    switch (responseCode)
                    {
                        case "00":
                            orderInfo.Paid = true;
                            orderInfo.Status = OrderStatus.ReadyForDispatch;
                            break;
                        case "60":
                        case "90":
                            orderInfo.Paid = false;
                            orderInfo.Status = OrderStatus.WaitingForPaymentProvider;
                            break;
                        case "17":
                            orderInfo.Paid = false;
                            orderInfo.Status = OrderStatus.PaymentFailed;
                            orderInfo.PaymentInfo.ErrorMessage = "CANCELLED";
                            redirectUrl = cancelUrl;
                            break;
                        case "EXPIRED":
                            orderInfo.Paid = false;
                            orderInfo.Status = OrderStatus.PaymentFailed;
                            orderInfo.PaymentInfo.ErrorMessage = "EXPIRED";

                            redirectUrl = cancelUrl;
                            break;
                        default:
                            orderInfo.Paid = false;
                            orderInfo.Status = OrderStatus.WaitingForPaymentProvider;

                            redirectUrl = cancelUrl;
                            break;
                    }

                    orderInfo.Save();
                }

                HttpContext.Current.Response.Redirect(redirectUrl);
            }
            else
            {
                throw new Exception("SEAL BROKEN");
            }

            return orderInfo;
        }
コード例 #9
0
        /// <summary>
        /// Handles the response
        /// </summary>
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            #region config helper



            var merchantId = paymentProvider.GetSetting("merchantId");

            var merchantKey = paymentProvider.GetSetting("merchantKey");

            var merchantSecret = paymentProvider.GetSetting("merchantSecret");

            var url = paymentProvider.GetSetting("url");

            var transactionId = HttpContext.Current.Request["id"];



            if (orderInfo == null)
            {
                orderInfo = OrderHelper.GetOrder(transactionId);
            }


            if (orderInfo == null)
            {
                Log.Instance.LogError("Easy iDeal response: Order Not Found For TransactionId: " + transactionId);

                HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
                return(null);
            }

            // get the localized (for the right store) payment provider to get the right success/return urls
            var localizedPaymentProvider = PaymentProvider.GetPaymentProvider(paymentProvider.Id, orderInfo.StoreInfo.Alias);

            var redirectUrl = localizedPaymentProvider.ErrorUrl();
            var successUrl  = localizedPaymentProvider.SuccessUrl();

            #endregion
            try
            {
                var paymentStatus = HttpContext.Current.Request["status"];
                var salt          = HttpContext.Current.Request["salt"];
                var checksum      = HttpContext.Current.Request["checksum"];

                if (string.IsNullOrEmpty(transactionId))
                {
                    Log.Instance.LogError("Easy iDeal response: TransactionId IsNullOrEmpty");
                    HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
                    return(null);
                }
                if (orderInfo.Paid != false)
                {
                    Log.Instance.LogDebug("Easy iDeal response: Order already paid! TransactionId: " + transactionId);
                    HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
                    return(null);
                }

                var transactionCode = OrderHelper.ExtraInformationValue(orderInfo, "extraTransactionCode");

                if (string.IsNullOrEmpty(transactionCode))
                {
                    Log.Instance.LogDebug("Easy iDeal response: OrderTransactionCode IsNullOrEmpty ");
                    HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
                    return(null);
                }

                //check validity of request
                if (CheckChecksumPaymentStatus(transactionId, transactionCode, paymentStatus, salt, checksum)) //only check for payment status if request is valid.
                //This is a bit redundant, since you allready now the paymentStatus. But we could choose to do something with the extra info you get from this request e.g. IBAN
                {
                    var args = new SortedList <string, string>
                    {
                        { "TransactionID", transactionId },
                        { "TransactionCode", transactionCode }
                    };


                    var xmlRequest = GetXml(TRANSACTIONSTATUS, args, merchantId, merchantKey, merchantSecret);

                    XDocument xmlResponse = XDocument.Parse(PostXml(xmlRequest, url));

                    var responseStatus = xmlResponse.Element("Response").Element("Status").FirstNode.ToString();

                    if (responseStatus == "OK")
                    {
                        if (xmlResponse.Element("Response").Element("Transaction").Element("Paid").FirstNode.ToString() == "Y")
                        {
                            orderInfo.Paid   = true;
                            orderInfo.Status = OrderStatus.ReadyForDispatch;
                            redirectUrl      = successUrl;
                        }
                        else
                        {
                            orderInfo.Paid   = false;
                            orderInfo.Status = OrderStatus.PaymentFailed;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Instance.LogError("EasyIdealPaymentResponseHandler.HandlePaymentResponse: " + ex);
            }

            HttpContext.Current.Response.Redirect(redirectUrl);

            return(orderInfo);
        }
コード例 #10
0
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            var httpRequest = HttpContext.Current.Request;

            var requestParams = new Dictionary<string, string>();
            NameValueCollection httpRequestParams = httpRequest.HttpMethod == "POST" ? httpRequest.Form : httpRequest.QueryString;

            foreach (string key in httpRequestParams)
            {
                requestParams.Add(key, httpRequest[key]);
            }

            var buckarooParams = new BuckarooResponseParameters(paymentProvider.GetSetting("SecretKey"), requestParams);
            if (buckarooParams.IsValid())
            {
                HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
            }

            orderInfo = OrderHelper.GetOrder(buckarooParams.TransactionId);
            if (orderInfo == null)
            {
                throw new ApplicationException("Buckaroo payment handler: no order found with transactionId " + buckarooParams.TransactionId);
            }

            var signatureFromBuckaroo = buckarooParams.Signature;
            var calculatedSignature = buckarooParams.GetSignature();

            if (string.Compare(signatureFromBuckaroo, calculatedSignature) != 0)
            {
                HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
            }

            Log.Instance.LogError("Buckaroo returned transactionId: " + buckarooParams.TransactionId + " resultCode: " + buckarooParams.StatusCode + " currency:" + buckarooParams.Currency + " amount: " + buckarooParams.Amount);

            if (string.IsNullOrEmpty(buckarooParams.TransactionId))
            {
                HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
            }

            var localizedPaymentProvider = PaymentProvider.GetPaymentProvider(paymentProvider.Id, orderInfo.StoreInfo.Alias);

            var succesUrl = localizedPaymentProvider.SuccessUrl();
            var failUrl = localizedPaymentProvider.ErrorUrl();

            var redirectUrl = succesUrl;

            if (orderInfo.Paid == true)
            {
                Log.Instance.LogError("Buckaroo Already PAID returned transactionId: " + buckarooParams.TransactionId + " resultCode: " + buckarooParams.StatusCode + " currency:" + buckarooParams.Currency + " amount: " + buckarooParams.Amount);
                HttpContext.Current.Response.Redirect(succesUrl);
                HttpContext.Current.Response.End();
            }
            else
            {
                redirectUrl = failUrl;
            }

            //190	 Succes: De transactie is geslaagd en de betaling is ontvangen / goedgekeurd.	 Definitief	 Ja
            //490	 Mislukt: De transactie is mislukt.	 Definitief	 Nee
            //491	 Validatie mislukt: De transactie verzoek bevatte fouten en kon niet goed verwerkt worden	 Definitief	 Nee
            //492	 Technische storing: Door een technische storing kon de transactie niet worden afgerond
            //Definitief	 Nee
            //690	 Afgekeurd: De transactie is afgewezen door de (derde) payment provider.	 Definitief	 Nee
            //790	 In afwachting van invoer: De transactie is in de wacht, terwijl de payment enginge staat te wachten
            //op de inbreng van de consument.	 Tijdelijk	 Nee
            //791	 In afwachting van verwerking: De transactie wordt verwerkt.	 Tijdelijk	 Nee
            //792	 In afwachting van de consument: de betaling Engine wacht voor de consument om terug te keren van
            //een website van derden, die nodig is om de transactie te voltooien.	 Tijdelijk	 Nee
            //793	 De transactie is onhold.
            //Tijdelijk	 Nee
            //890	 Geannuleerd door Gebruiker: De transactie is geannuleerd door de klant.
            //Definitief	 Nee
            //891	 Geannuleerd door Merchant: De merchant heeft de transactie geannuleerd.	 Definitief	 Nee

            switch (buckarooParams.StatusCode)
            {
                case "190":
                    orderInfo.Paid = true;
                    orderInfo.Status = OrderStatus.ReadyForDispatch;
                    redirectUrl = succesUrl;
                    break;
                case "490":
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.PaymentFailed;
                    redirectUrl = failUrl;
                    Log.Instance.LogError("Buckaroo ResponseHandler Transaction Failed (490) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                    break;
                case "491":
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.PaymentFailed;
                    redirectUrl = failUrl;
                    Log.Instance.LogError("Buckaroo ResponseHandler Validation Failed (491) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                    break;
                case "492":
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.PaymentFailed;
                    redirectUrl = failUrl;
                    Log.Instance.LogError("Buckaroo ResponseHandler Technical Failure (492) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                    break;
                case "690":
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.PaymentFailed;
                    redirectUrl = failUrl;
                    Log.Instance.LogError("Buckaroo ResponseHandler Payment Denied by 3rd Party (690) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                    break;
                case "790":
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.WaitingForPayment;
                    redirectUrl = failUrl;
                    Log.Instance.LogError("Buckaroo ResponseHandler Waiting for customer input (790) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                    break;
                case "791":
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.WaitingForPayment;
                    redirectUrl = failUrl;
                    Log.Instance.LogError("Buckaroo ResponseHandler Waiting for transaction handling (791) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                    break;
                case "792":
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.WaitingForPayment;
                    redirectUrl = failUrl;
                    Log.Instance.LogError("Buckaroo ResponseHandler Waiting for customer to return from 3rd party website (792) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                    break;
                case "793":
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.WaitingForPayment;
                    redirectUrl = failUrl;
                    Log.Instance.LogError("Buckaroo ResponseHandler Transaction is On Hold (793) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                    break;
                case "890":
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.WaitingForPayment;
                    redirectUrl = failUrl;
                    Log.Instance.LogError("Buckaroo ResponseHandler Transaction Cancelled by Customer (890) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                    break;
                case "891":
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.WaitingForPayment;
                    redirectUrl = failUrl;
                    Log.Instance.LogError("Buckaroo ResponseHandler Transaction Cancelled by Merchant (891) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                    break;
            }

            orderInfo.Save();

            HttpContext.Current.Response.Redirect(redirectUrl);

            return orderInfo;
        }
コード例 #11
0
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            try
            {
                var transactionId = HttpContext.Current.Request["transaction_id"];

                Log.Instance.LogDebug("Mollie Transaction Id: " + transactionId);

                if (string.IsNullOrEmpty(transactionId))
                {
                    Log.Instance.LogError("Mollie: TransactionId IsNullOrEmpty");
                    return(null);
                }

                orderInfo = OrderHelper.GetOrder(transactionId);

                if (orderInfo == null)
                {
                    Log.Instance.LogError("Mollie: Order Not Found For TransactionId: " + transactionId);
                    return(null);
                }

                if (orderInfo.Paid != false)
                {
                    Log.Instance.LogDebug("Mollie: Order already paid! TransactionId: " + transactionId);
                    return(null);
                }

                var partnerId = paymentProvider.GetSetting("PartnerId");
                var testMode  = paymentProvider.TestMode;

                var idealCheck = new IdealCheck(partnerId, testMode, transactionId);

                if (idealCheck.Error)
                {
                    if (idealCheck.Message != null)
                    {
                        Log.Instance.LogError(string.Format("Mollie idealCheck.Error Error! idealCheck.Message: {0}", idealCheck.Message));
                    }
                    if (idealCheck.ErrorMessage != null)
                    {
                        Log.Instance.LogError(string.Format("Mollie idealCheck.Error Error! idealCheck.ErrorMessage: {0}", idealCheck.ErrorMessage));
                    }

                    if (orderInfo.Status == OrderStatus.ReadyForDispatch)
                    {
                        return(null);
                    }
                    orderInfo.Paid   = false;
                    orderInfo.Status = OrderStatus.PaymentFailed;

                    if (idealCheck.ErrorMessage != null)
                    {
                        orderInfo.PaymentInfo.ErrorMessage = idealCheck.ErrorMessage;
                    }
                }

                if (idealCheck.Payed)
                {
                    orderInfo.Paid   = true;
                    orderInfo.Status = OrderStatus.ReadyForDispatch;
                }
                else
                {
                    if (idealCheck.Message != null)
                    {
                        Log.Instance.LogError(string.Format("Mollie idealCheck.Payed Error! idealCheck.Message: {0}", idealCheck.Message));
                    }
                    if (idealCheck.ErrorMessage != null)
                    {
                        Log.Instance.LogError(string.Format("Mollie idealCheck.Payed Error! idealCheck.ErrorMessage: {0}", idealCheck.ErrorMessage));
                    }

                    orderInfo.Paid   = false;
                    orderInfo.Status = OrderStatus.PaymentFailed;
                    orderInfo.PaymentInfo.ErrorMessage = idealCheck.ErrorMessage;
                }

                orderInfo.Save();
            }
            catch (Exception ex)
            {
                Log.Instance.LogError("MolliePaymentResponseHandler.HandlePaymentResponse: " + ex);
            }

            return(null);
        }
コード例 #12
0
        /// <summary>
        /// Handles the response
        /// </summary>
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            #region config helper

            var merchantId = paymentProvider.GetSetting("merchantId");

            var merchantKey = paymentProvider.GetSetting("merchantKey");

            var merchantSecret = paymentProvider.GetSetting("merchantSecret");

            var url = paymentProvider.GetSetting("url");

            var transactionId = HttpContext.Current.Request["id"];

            if (orderInfo == null)
            {
                orderInfo = OrderHelper.GetOrder(transactionId);
            }

            if (orderInfo == null)
            {
                Log.Instance.LogError("Easy iDeal response: Order Not Found For TransactionId: " + transactionId);

                HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
                return null;
            }

            // get the localized (for the right store) payment provider to get the right success/return urls
            var localizedPaymentProvider = PaymentProvider.GetPaymentProvider(paymentProvider.Id, orderInfo.StoreInfo.Alias);

            var redirectUrl = localizedPaymentProvider.ErrorUrl();
            var successUrl = localizedPaymentProvider.SuccessUrl();

            #endregion
            try
            {
                var paymentStatus = HttpContext.Current.Request["status"];
                var salt = HttpContext.Current.Request["salt"];
                var checksum = HttpContext.Current.Request["checksum"];

                if (string.IsNullOrEmpty(transactionId))
                {
                    Log.Instance.LogError("Easy iDeal response: TransactionId IsNullOrEmpty");
                    HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
                    return null;
                }
                if (orderInfo.Paid != false)
                {
                    Log.Instance.LogDebug("Easy iDeal response: Order already paid! TransactionId: " + transactionId);
                    HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
                    return null;
                }

                var transactionCode = OrderHelper.ExtraInformationValue(orderInfo, "extraTransactionCode");

                if (string.IsNullOrEmpty(transactionCode))
                {
                    Log.Instance.LogDebug("Easy iDeal response: OrderTransactionCode IsNullOrEmpty ");
                    HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
                    return null;
                }

                //check validity of request
                if (CheckChecksumPaymentStatus(transactionId, transactionCode, paymentStatus, salt, checksum)) //only check for payment status if request is valid.
                    //This is a bit redundant, since you allready now the paymentStatus. But we could choose to do something with the extra info you get from this request e.g. IBAN
                {

                    var args = new SortedList<string, string>
                        {
                            {"TransactionID", transactionId},
                            {"TransactionCode", transactionCode}
                        };

                    var xmlRequest = GetXml(TRANSACTIONSTATUS, args, merchantId, merchantKey, merchantSecret);

                    XDocument xmlResponse = XDocument.Parse(PostXml(xmlRequest, url));

                    var responseStatus = xmlResponse.Element("Response").Element("Status").FirstNode.ToString();

                    if (responseStatus == "OK")
                    {
                        if (xmlResponse.Element("Response").Element("Transaction").Element("Paid").FirstNode.ToString() == "Y")
                        {
                            orderInfo.Paid = true;
                            orderInfo.Status = OrderStatus.ReadyForDispatch;
                            redirectUrl = successUrl;

                        }
                        else
                        {
                            orderInfo.Paid = false;
                            orderInfo.Status = OrderStatus.PaymentFailed;
                        }
                    }
                }

            }
            catch (Exception ex)
            {
                Log.Instance.LogError("EasyIdealPaymentResponseHandler.HandlePaymentResponse: " + ex);
            }

            HttpContext.Current.Response.Redirect(redirectUrl);

            return orderInfo;
        }
コード例 #13
0
        /// <summary>
        /// Handles the response
        /// </summary>
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            var payPalTestMode = paymentProvider != null && paymentProvider.TestMode;

            var liveUrl = "https://www.paypal.com/cgi-bin/webscr";
            var testUrl = "https://www.sandbox.paypal.com/us/cgi-bin/webscr";

            var configLiveUrl = paymentProvider.GetSetting("Url");
            var configTestUrl = paymentProvider.GetSetting("testUrl");

            if (!string.IsNullOrEmpty(configLiveUrl))
            {
                liveUrl = configLiveUrl;
            }
            if (!string.IsNullOrEmpty(configTestUrl))
            {
                testUrl = configTestUrl;
            }


            var req = payPalTestMode ? (HttpWebRequest)WebRequest.Create(testUrl) : (HttpWebRequest)WebRequest.Create(liveUrl);

            //Set values for the request back
            req.Method      = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            var param      = HttpContext.Current.Request.BinaryRead(HttpContext.Current.Request.ContentLength);
            var strRequest = Encoding.ASCII.GetString(param);

            strRequest       += "&cmd=_notify-validate";
            req.ContentLength = strRequest.Length;

            //for proxy
            //WebProxy proxy = new WebProxy(new Uri("http://url:port#"));
            //req.Proxy = proxy;

            //Send the request to PayPal and get the response
            var streamOut = new StreamWriter(req.GetRequestStream(), Encoding.ASCII);

            streamOut.Write(strRequest);
            streamOut.Close();
            var streamIn    = new StreamReader(req.GetResponse().GetResponseStream());
            var strResponse = streamIn.ReadToEnd();

            streamIn.Close();

            Log.Instance.LogDebug("PAYPAL RETURN strResponse: " + strResponse);

            switch (strResponse)
            {
            case "VERIFIED":
            {
                // PayPal POSTS some values
                var paymentStatus = HttpContext.Current.Request["payment_status"];

                Log.Instance.LogDebug("PAYPAL RETURN paymentStatus: " + paymentStatus);

                // Get identifier created with the RequestHandler
                var transactionId = HttpContext.Current.Request["custom"];

                Log.Instance.LogDebug("PAYPAL RETURN transactionId: " + transactionId);

                // Match  identifier to order
                var order = OrderHelper.GetOrder(transactionId);

                // Check for match
                if (order != null && order.Paid == false)
                {
                    Log.Instance.LogDebug("PAYPAL RETURN STATUS: " + paymentStatus);
                    // Get statusses from payment provider Response
                    switch (paymentStatus)
                    {
                    case "Completed":
                        order.Paid   = true;
                        order.Status = OrderStatus.ReadyForDispatch;
                        break;

                    case "Failed":
                        order.Paid   = false;
                        order.Status = OrderStatus.PaymentFailed;
                        break;

                    case "Denied":
                        order.Paid   = false;
                        order.Status = OrderStatus.PaymentFailed;
                        break;

                    case "Pending":
                        order.Status = OrderStatus.WaitingForPaymentProvider;

                        break;
                    }
                    order.Save();

                    orderInfo = order;
                }
            }
            break;

            case "INVALID":
                break;
            }

            return(orderInfo);
        }
コード例 #14
0
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            try
            {
                var transactionId = HttpContext.Current.Request["transaction_id"];

                Log.Instance.LogDebug("Mollie Transaction Id: " + transactionId);

                if (string.IsNullOrEmpty(transactionId))
                {
                    Log.Instance.LogError("Mollie: TransactionId IsNullOrEmpty");
                    return null;
                }

                orderInfo = OrderHelper.GetOrder(transactionId);

                if (orderInfo == null)
                {
                    Log.Instance.LogError("Mollie: Order Not Found For TransactionId: " + transactionId);
                    return null;
                }

                if (orderInfo.Paid != false)
                {
                    Log.Instance.LogDebug("Mollie: Order already paid! TransactionId: " + transactionId);
                    return null;
                }

                var partnerId = paymentProvider.GetSetting("PartnerId");
                var testMode = paymentProvider.TestMode;

                var idealCheck = new IdealCheck(partnerId, testMode, transactionId);

                if (idealCheck.Error)
                {
                    if (idealCheck.Message != null)
                    {
                        Log.Instance.LogError(string.Format("Mollie idealCheck.Error Error! idealCheck.Message: {0}", idealCheck.Message));
                    }
                    if (idealCheck.ErrorMessage != null)
                    {
                        Log.Instance.LogError(string.Format("Mollie idealCheck.Error Error! idealCheck.ErrorMessage: {0}", idealCheck.ErrorMessage));
                    }

                    if (orderInfo.Status == OrderStatus.ReadyForDispatch)
                    {
                        return null;
                    }
                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.PaymentFailed;

                    if (idealCheck.ErrorMessage != null)
                    {
                        orderInfo.PaymentInfo.ErrorMessage = idealCheck.ErrorMessage;
                    }
                }

                if (idealCheck.Payed)
                {
                    orderInfo.Paid = true;
                    orderInfo.Status = OrderStatus.ReadyForDispatch;
                }
                else
                {
                    if (idealCheck.Message != null)
                    {
                        Log.Instance.LogError(string.Format("Mollie idealCheck.Payed Error! idealCheck.Message: {0}", idealCheck.Message));
                    }
                    if (idealCheck.ErrorMessage != null)
                    {
                        Log.Instance.LogError(string.Format("Mollie idealCheck.Payed Error! idealCheck.ErrorMessage: {0}", idealCheck.ErrorMessage));
                    }

                    orderInfo.Paid = false;
                    orderInfo.Status = OrderStatus.PaymentFailed;
                    orderInfo.PaymentInfo.ErrorMessage = idealCheck.ErrorMessage;
                }

                orderInfo.Save();
            }
            catch (Exception ex)
            {
                Log.Instance.LogError("MolliePaymentResponseHandler.HandlePaymentResponse: " + ex);
            }

            return null;
        }
コード例 #15
0
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            var transactionId = HttpContext.Current.Request["transactionid"];

            if (string.IsNullOrEmpty(transactionId))
            {
                Log.Instance.LogDebug("MultiSafePay IPaymentResponseHandler transactionId == null");
                return null;
            }

            orderInfo = OrderHelper.GetOrder(transactionId);

            if (orderInfo.Paid != false)
            {
                Log.Instance.LogDebug("MultiSafePay IPaymentResponseHandler Order Already Paid for transactionId: " + transactionId);
                return null;
            }

            var accountId = paymentProvider.GetSetting("accountId");
            var siteId = paymentProvider.GetSetting("siteId");
            var siteSecureId = paymentProvider.GetSetting("siteSecureId");
            var testURL = paymentProvider.GetSetting("testURL");
            var liveUrl = paymentProvider.GetSetting("url");

            var statusRequest = new StatusRequest
                                {
                                    AccountId = long.Parse(accountId),
                                    TransactionId = transactionId,
                                    SiteId = long.Parse(siteId),
                                    SiteSecureId = long.Parse(siteSecureId)
                                };

            var apiURL = paymentProvider.TestMode ? testURL : liveUrl;

            try
            {
                var httpWebRequest = (HttpWebRequest) WebRequest.Create(apiURL);
                httpWebRequest.Method = "POST";
                httpWebRequest.ContentLength = Encoding.UTF8.GetByteCount(statusRequest.GetXml());
                httpWebRequest.ContentType = "application/x-www-form-urlencoded";

                var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream());
                streamWriter.Write(statusRequest.GetXml());
                streamWriter.Close();

                var httpWebResponse = (HttpWebResponse) httpWebRequest.GetResponse();
                var streamReader = new StreamReader(httpWebResponse.GetResponseStream());
                var xmlDoc = XDocument.Parse(streamReader.ReadToEnd());

                Log.Instance.LogDebug("MultiSafePay IPaymentResponseHandler XML Answer: " + HttpUtility.HtmlEncode(xmlDoc.ToString(SaveOptions.None)));

                var ewallet = xmlDoc.Root.Element("ewallet");
                var status = ewallet.Element("status").Value;

                orderInfo.Status = OrderStatus.WaitingForPayment;

                //– completed: succesvol voltooid
                //– initialized: aangemaakt, maar nog niet voltooid
                //– uncleared: aangemaakt, maar nog niet vrijgesteld (credit cards)
                //– void: geannuleerd
                //– declined: afgewezen
                //– refunded: terugbetaald
                //– expired: verlopen

                switch (status)
                {
                    case "completed":
                        orderInfo.Paid = true;
                        orderInfo.Status = OrderStatus.ReadyForDispatch;
                        break;
                    case "uncleared":
                        orderInfo.Status = OrderStatus.WaitingForPaymentProvider;
                        break;
                    case "declined":
                        orderInfo.Paid = false;
                        orderInfo.Status = OrderStatus.PaymentFailed;
                        orderInfo.PaymentInfo.ErrorMessage = status;
                        break;
                    case "expired":
                        orderInfo.Paid = false;
                        orderInfo.Status = OrderStatus.PaymentFailed;
                        orderInfo.PaymentInfo.ErrorMessage = status;
                        break;
                    case "void":
                        orderInfo.Paid = false;
                        orderInfo.Status = OrderStatus.PaymentFailed;
                        orderInfo.PaymentInfo.ErrorMessage = status;
                        break;
                }

                orderInfo.Save();
            }
            catch (Exception ex)
            {
                Log.Instance.LogError("MultiSafePayPaymentResponseHandler.HandlePaymentResponse: " + ex);
            }

            return orderInfo;
        }
コード例 #16
0
        public OrderInfo HandlePaymentResponse(PaymentProvider paymentProvider, OrderInfo orderInfo)
        {
            var httpRequest = HttpContext.Current.Request;

            Dictionary <string, string> requestParams     = new Dictionary <string, string>();
            NameValueCollection         httpRequestParams = httpRequest.HttpMethod == "POST"
                                                                ? httpRequest.Form
                                                                : httpRequest.QueryString;

            foreach (string key in httpRequestParams)
            {
                requestParams.Add(key, httpRequest[key]);
            }

            BuckarooResponseParameters buckarooParams = new BuckarooResponseParameters(paymentProvider.GetSetting("SecretKey"), requestParams);

            if (buckarooParams.IsValid())
            {
                HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
            }

            string signatureFromBuckaroo = buckarooParams.Signature;
            string calculatedSignature   = buckarooParams.GetSignature();

            if (string.Compare(signatureFromBuckaroo, calculatedSignature) != 0)
            {
                HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
            }

            Log.Instance.LogError("Buckaroo returned transactionId: " + buckarooParams.TransactionId + " resultCode: " + buckarooParams.StatusCode + " currency:" + buckarooParams.Currency + " amount: " + buckarooParams.Amount);

            if (string.IsNullOrEmpty(buckarooParams.TransactionId))
            {
                HttpContext.Current.Response.Redirect(paymentProvider.ErrorUrl());
            }

            var localizedPaymentProvider = PaymentProvider.GetPaymentProvider(paymentProvider.Id, orderInfo.StoreInfo.Alias);

            var succesUrl = localizedPaymentProvider.SuccessUrl();
            var failUrl   = localizedPaymentProvider.ErrorUrl();

            var redirectUrl = succesUrl;

            if (orderInfo.Paid == true)
            {
                Log.Instance.LogError("Buckaroo Already PAID returned transactionId: " + buckarooParams.TransactionId + " resultCode: " + buckarooParams.StatusCode + " currency:" + buckarooParams.Currency + " amount: " + buckarooParams.Amount);
                HttpContext.Current.Response.Redirect(succesUrl);
                HttpContext.Current.Response.End();
            }
            else
            {
                redirectUrl = failUrl;
            }

            //190	 Succes: De transactie is geslaagd en de betaling is ontvangen / goedgekeurd.	 Definitief	 Ja
            //490	 Mislukt: De transactie is mislukt.	 Definitief	 Nee
            //491	 Validatie mislukt: De transactie verzoek bevatte fouten en kon niet goed verwerkt worden	 Definitief	 Nee
            //492	 Technische storing: Door een technische storing kon de transactie niet worden afgerond
            //Definitief	 Nee
            //690	 Afgekeurd: De transactie is afgewezen door de (derde) payment provider.	 Definitief	 Nee
            //790	 In afwachting van invoer: De transactie is in de wacht, terwijl de payment enginge staat te wachten
            //op de inbreng van de consument.	 Tijdelijk	 Nee
            //791	 In afwachting van verwerking: De transactie wordt verwerkt.	 Tijdelijk	 Nee
            //792	 In afwachting van de consument: de betaling Engine wacht voor de consument om terug te keren van
            //een website van derden, die nodig is om de transactie te voltooien.	 Tijdelijk	 Nee
            //793	 De transactie is onhold.
            //Tijdelijk	 Nee
            //890	 Geannuleerd door Gebruiker: De transactie is geannuleerd door de klant.
            //Definitief	 Nee
            //891	 Geannuleerd door Merchant: De merchant heeft de transactie geannuleerd.	 Definitief	 Nee

            switch (buckarooParams.StatusCode)
            {
            case "190":
                orderInfo.Paid   = true;
                orderInfo.Status = OrderStatus.ReadyForDispatch;
                redirectUrl      = succesUrl;
                break;

            case "490":
                orderInfo.Paid   = false;
                orderInfo.Status = OrderStatus.PaymentFailed;
                redirectUrl      = failUrl;
                Log.Instance.LogError("Buckaroo ResponseHandler Transaction Failed (490) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                break;

            case "491":
                orderInfo.Paid   = false;
                orderInfo.Status = OrderStatus.PaymentFailed;
                redirectUrl      = failUrl;
                Log.Instance.LogError("Buckaroo ResponseHandler Validation Failed (491) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                break;

            case "492":
                orderInfo.Paid   = false;
                orderInfo.Status = OrderStatus.PaymentFailed;
                redirectUrl      = failUrl;
                Log.Instance.LogError("Buckaroo ResponseHandler Technical Failure (492) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                break;

            case "690":
                orderInfo.Paid   = false;
                orderInfo.Status = OrderStatus.PaymentFailed;
                redirectUrl      = failUrl;
                Log.Instance.LogError("Buckaroo ResponseHandler Payment Denied by 3rd Party (690) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                break;

            case "790":
                orderInfo.Paid   = false;
                orderInfo.Status = OrderStatus.WaitingForPayment;
                redirectUrl      = failUrl;
                Log.Instance.LogError("Buckaroo ResponseHandler Waiting for customer input (790) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                break;

            case "791":
                orderInfo.Paid   = false;
                orderInfo.Status = OrderStatus.WaitingForPayment;
                redirectUrl      = failUrl;
                Log.Instance.LogError("Buckaroo ResponseHandler Waiting for transaction handling (791) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                break;

            case "792":
                orderInfo.Paid   = false;
                orderInfo.Status = OrderStatus.WaitingForPayment;
                redirectUrl      = failUrl;
                Log.Instance.LogError("Buckaroo ResponseHandler Waiting for customer to return from 3rd party website (792) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                break;

            case "793":
                orderInfo.Paid   = false;
                orderInfo.Status = OrderStatus.WaitingForPayment;
                redirectUrl      = failUrl;
                Log.Instance.LogError("Buckaroo ResponseHandler Transaction is On Hold (793) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                break;

            case "890":
                orderInfo.Paid   = false;
                orderInfo.Status = OrderStatus.WaitingForPayment;
                redirectUrl      = failUrl;
                Log.Instance.LogError("Buckaroo ResponseHandler Transaction Cancelled by Customer (890) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                break;

            case "891":
                orderInfo.Paid   = false;
                orderInfo.Status = OrderStatus.WaitingForPayment;
                redirectUrl      = failUrl;
                Log.Instance.LogError("Buckaroo ResponseHandler Transaction Cancelled by Merchant (891) for transactionId: " + buckarooParams.TransactionId + " Ordernumber: " + orderInfo.OrderNumber);
                break;
            }

            orderInfo.Save();


            HttpContext.Current.Response.Redirect(redirectUrl);

            return(orderInfo);
        }