Ejemplo n.º 1
0
        private String RefundOrder <TPaymentMethod>(Order order, int originalOrderNumber, int newOrderNumber, decimal refundAmount, String refundReason, Address useBillingAddress, GatewayMoneybookers.IPaymentMethodXmlTransformer <TPaymentMethod> paymentMethodXmlTransformer)
            where TPaymentMethod : GatewayMoneybookers.PaymentMethod
        {
            decimal amount = refundAmount;

            GatewayMoneybookers.PaymentType paymentType = GatewayMoneybookers.PaymentType.Refund;

            DB.ExecuteSQL("update orders set RefundTXCommand=NULL, RefundTXResult=NULL where OrderNumber=" + originalOrderNumber.ToString());

            // Generate payment request
            GatewayMoneybookers.PaymentRequestBuilder requestBuilder = new GatewayMoneybookers.PaymentRequestBuilder();
            var paymentRequest = requestBuilder.BuildReferencedPaymentRequest <TPaymentMethod>(
                paymentType,
                order.OrderNumber,
                order.AuthorizationPNREF.Substring(order.AuthorizationPNREF.IndexOf("|CAPTURE=") + 9),
                amount);

            GatewayMoneybookers.PaymentXmlTransformer <TPaymentMethod> paymentTransformer = new GatewayMoneybookers.PaymentXmlTransformer <TPaymentMethod>();
            var paymentRequestData = paymentTransformer.TransformRequest(paymentRequest, paymentMethodXmlTransformer);

            // Submit request and get response
            string paymentResponseData = null;
            string result      = String.Empty;
            int    maxAttempts = AppLogic.AppConfigUSInt("GatewayRetries") + 1;

            DB.ExecuteSQL("update orders set RefundTXCommand=" + DB.SQuote(paymentRequestData) + " where OrderNumber=" + originalOrderNumber.ToString());

            for (int attemptCount = 0; attemptCount < maxAttempts; attemptCount++)
            {
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestUri);
                request.Method      = "POST";
                request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";

                try
                {
                    using (var requestStream = request.GetRequestStream())
                    {
                        using (StreamWriter requestWriter = new StreamWriter(requestStream))
                        {
                            requestWriter.Write("load={0}", Uri.EscapeDataString(paymentRequestData));
                            requestWriter.Close();
                        }

                        requestStream.Close();
                    }

                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    using (var responseStream = response.GetResponseStream())
                    {
                        using (StreamReader responseReader = new StreamReader(responseStream))
                        {
                            paymentResponseData = responseReader.ReadToEnd();
                            responseReader.Close();
                        }

                        responseStream.Close();
                    }

                    break;
                }
#if DEBUG
                catch (WebException exception)
                {
                    using (var responseStream = exception.Response.GetResponseStream())
                    {
                        using (StreamReader responseReader = new StreamReader(responseStream))
                        {
                            result = String.Format("Error calling Skrill (Moneybookers) payment gateway. {0}{1}", exception.Message, responseReader.ReadToEnd());
                            responseReader.Close();
                        }
                        responseStream.Close();
                    }
                }
#endif
                catch (Exception exception)
                {
                    result = String.Format("Error calling Skrill (Moneybookers) payment gateway. {0}", exception.Message);
                }
            }

            // Process response
            if (paymentResponseData != null)
            {
                GatewayMoneybookers.PaymentResponse paymentResponse = paymentTransformer.TransformResponse(paymentResponseData);
                DB.ExecuteSQL("update orders set RefundTXResult=" + DB.SQuote(paymentResponseData) + " where OrderNumber=" + originalOrderNumber.ToString());

                if (paymentResponse.Result.ToUpperInvariant() == "ACK")
                {
                    result = AppLogic.ro_OK;

                    // We can't record the transaction ID because the field is not long enough
                    //DB.ExecuteSQL("update orders set AuthorizationPNREF=AuthorizationPNREF+" + DB.SQuote("|REFUND=" + paymentResponse.TransactionUniqueId) + " where OrderNumber=" + originalOrderNumber.ToString());
                }
                else
                {
                    result = String.Format("{0} - {1} - {2} - {3}", paymentResponse.Result, paymentResponse.Status, paymentResponse.Reason, paymentResponse.Return);
                    if (result.Length == 0)
                    {
                        result = "Unspecified Error";
                    }
                }
            }

            return(result);
        }
Ejemplo n.º 2
0
        public override String CaptureOrder(Order order)
        {
            decimal amount = order.Total(true);;

            GatewayMoneybookers.PaymentType paymentType = GatewayMoneybookers.PaymentType.Capture;

            // Generate payment request
            GatewayMoneybookers.PaymentRequestBuilder requestBuilder = new GatewayMoneybookers.PaymentRequestBuilder();
            var paymentRequest = requestBuilder.BuildReferencedPaymentRequest <GatewayMoneybookers.CreditCardPaymentMethod>(
                paymentType,
                order.OrderNumber,
                order.AuthorizationPNREF.Substring(5),                  // Trim off "AUTH="
                amount);

            GatewayMoneybookers.PaymentXmlTransformer <GatewayMoneybookers.CreditCardPaymentMethod> paymentTransformer = new GatewayMoneybookers.PaymentXmlTransformer <GatewayMoneybookers.CreditCardPaymentMethod>();
            var paymentRequestData = paymentTransformer.TransformRequest(paymentRequest, null);

            // Submit request and get response
            string paymentResponseData = null;
            string result      = String.Empty;
            int    maxAttempts = AppLogic.AppConfigUSInt("GatewayRetries") + 1;

            for (int attemptCount = 0; attemptCount < maxAttempts; attemptCount++)
            {
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestUri);
                request.Method      = "POST";
                request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";

                try
                {
                    using (var requestStream = request.GetRequestStream())
                    {
                        using (StreamWriter requestWriter = new StreamWriter(requestStream))
                        {
                            requestWriter.Write("load={0}", Uri.EscapeDataString(paymentRequestData));
                            requestWriter.Close();
                        }

                        requestStream.Close();
                    }

                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    using (var responseStream = response.GetResponseStream())
                    {
                        using (StreamReader responseReader = new StreamReader(responseStream))
                        {
                            paymentResponseData = responseReader.ReadToEnd();
                            responseReader.Close();
                        }

                        responseStream.Close();
                    }

                    break;
                }
#if DEBUG
                catch (WebException exception)
                {
                    using (var responseStream = exception.Response.GetResponseStream())
                    {
                        using (StreamReader responseReader = new StreamReader(responseStream))
                        {
                            result = String.Format("Error calling Skrill (Moneybookers) payment gateway. {0}{1}", exception.Message, responseReader.ReadToEnd());
                            responseReader.Close();
                        }
                        responseStream.Close();
                    }
                }
#endif
                catch (Exception exception)
                {
                    result = String.Format("Error calling Skrill (Moneybookers) payment gateway. {0}", exception.Message);
                }
            }

            // Process response
            if (paymentResponseData != null)
            {
                GatewayMoneybookers.PaymentResponse paymentResponse = paymentTransformer.TransformResponse(paymentResponseData);
                order.CaptureTXCommand = paymentRequestData;
                order.CaptureTXResult  = paymentResponseData;

                if (paymentResponse.Result.ToUpperInvariant() == "ACK")
                {
                    order.AuthorizationPNREF = order.AuthorizationPNREF + "|CAPTURE=" + paymentResponse.TransactionUniqueId;
                    result = AppLogic.ro_OK;
                }
                else
                {
                    result = String.Format("{0} - {1} - {2} - {3}", paymentResponse.Result, paymentResponse.Status, paymentResponse.Reason, paymentResponse.Return);
                    if (result.Length == 0)
                    {
                        result = "Unspecified Error";
                    }
                }
            }

            return(result);
        }
Ejemplo n.º 3
0
        public ExternalPaymentMethodContext BeginCheckout(AspDotNetStorefrontCore.ShoppingCart cart)
        {
            decimal amount = cart.Total(true);

            GatewayMoneybookers.PaymentType paymentType = GatewayMoneybookers.PaymentType.Capture;

            string customerIpAddress = CommonLogic.CustomerIpAddress();

            if (customerIpAddress == "::1")
            {
                customerIpAddress = "127.0.0.1";
            }
            else if (customerIpAddress.Contains(":"))
            {
                throw new Exception("The Moneybookers payment gateway does not support IPv6.");
            }

            // Generate payment request
            GatewayMoneybookers.PaymentRequestBuilder requestBuilder = new GatewayMoneybookers.PaymentRequestBuilder();
            var paymentRequest = requestBuilder.BuildQuickCheckoutRequest(
                GetEncryptedTransactionId(cart, amount),
                cart.ThisCustomer.CustomerID,
                cart.ThisCustomer.EMail,
                cart.ThisCustomer.PrimaryBillingAddress.FirstName,
                cart.ThisCustomer.PrimaryBillingAddress.LastName,
                cart.ThisCustomer.PrimaryBillingAddress.Address1,
                cart.ThisCustomer.PrimaryBillingAddress.City,
                CommonLogic.IIF(String.IsNullOrEmpty(cart.ThisCustomer.PrimaryBillingAddress.State), null, cart.ThisCustomer.PrimaryBillingAddress.State),
                cart.ThisCustomer.PrimaryBillingAddress.Zip,
                cart.ThisCustomer.PrimaryBillingAddress.Country,
                customerIpAddress,
                amount);

            GatewayMoneybookers.PaymentXmlTransformer <GatewayMoneybookers.VirtualAccountPaymentMethod> paymentTransformer = new GatewayMoneybookers.PaymentXmlTransformer <GatewayMoneybookers.VirtualAccountPaymentMethod>();
            var paymentRequestData = paymentTransformer.TransformRequest(paymentRequest, new VirtualAccountPaymentMethodXmlTransformer());

            // Submit request and get response
            string paymentResponseData = null;
            string result      = String.Empty;
            int    maxAttempts = AppLogic.AppConfigUSInt("GatewayRetries") + 1;

            for (int attemptCount = 0; attemptCount < maxAttempts; attemptCount++)
            {
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(RequestUri);
                request.Method      = "POST";
                request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";

                try
                {
                    using (var requestStream = request.GetRequestStream())
                    {
                        using (StreamWriter requestWriter = new StreamWriter(requestStream))
                        {
                            requestWriter.Write("load={0}", Uri.EscapeDataString(paymentRequestData));
                            requestWriter.Close();
                        }

                        requestStream.Close();
                    }

                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    using (var responseStream = response.GetResponseStream())
                    {
                        using (StreamReader responseReader = new StreamReader(responseStream))
                        {
                            paymentResponseData = responseReader.ReadToEnd();
                            responseReader.Close();
                        }

                        responseStream.Close();
                    }

                    break;
                }
#if DEBUG
                catch (WebException exception)
                {
                    using (var responseStream = exception.Response.GetResponseStream())
                    {
                        using (StreamReader responseReader = new StreamReader(responseStream))
                        {
                            result = String.Format("Error calling Skrill (Moneybookers) payment gateway. {0}{1}", exception.Message, responseReader.ReadToEnd());
                            responseReader.Close();
                        }
                        responseStream.Close();
                    }
                }
#endif
                catch (Exception exception)
                {
                    result = String.Format("Error calling Skrill (Moneybookers) payment gateway. {0}", exception.Message);
                }
            }

            // Process response
            if (paymentResponseData != null)
            {
                GatewayMoneybookers.PaymentResponse paymentResponse = paymentTransformer.TransformResponse(paymentResponseData);
                result = String.Format("{0} - {1} - {2} - {3}", paymentResponse.Result, paymentResponse.Status, paymentResponse.Reason, paymentResponse.Return);

                if (paymentResponse.Result.ToUpperInvariant() == "ACK")
                {
                    return(new ExternalPaymentMethodContext(result, paymentResponse.RedirectUrl, paymentResponse.RedirectParameters));
                }
                else
                {
                    if (result.Length == 0)
                    {
                        result = "Unspecified Error";
                    }

                    return(new ExternalPaymentMethodContext(result));
                }
            }
            else
            {
                return(new ExternalPaymentMethodContext(result));
            }
        }