Ejemplo n.º 1
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.º 2
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.º 3
0
        private string ProcessOrderThroughGateway(int OrderNumber, int CustomerID, Decimal OrderTotal, TransactionModeEnum TransactionMode, Address UseBillingAddress, String CardExtraCode, ref String AuthorizationResult, ref String AuthorizationCode, ref String AuthorizationTransID, ref String TransactionCommandOut, ref String TransactionResponse, Customer customer, GatewayMoneybookers.IPaymentType paymentType, string customerIpAddress, string cardType)
        {
            GatewayMoneybookers.PaymentRequestBuilder requestBuilder = new GatewayMoneybookers.PaymentRequestBuilder();
            var paymentRequest = requestBuilder.BuildCreditCardPaymentRequest(
                paymentType,
                OrderNumber,
                null,
                CustomerID,
                customer.EMail,
                UseBillingAddress.FirstName,
                UseBillingAddress.LastName,
                UseBillingAddress.Address1,
                UseBillingAddress.City,
                CommonLogic.IIF(String.IsNullOrEmpty(UseBillingAddress.State), null, UseBillingAddress.State),
                UseBillingAddress.Zip,
                UseBillingAddress.Country,
                customerIpAddress,
                OrderTotal,
                cardType,
                UseBillingAddress.CardNumber,
                UseBillingAddress.CardExpirationMonth.PadLeft(2, '0'),
                UseBillingAddress.CardExpirationYear,
                CommonLogic.IIF(String.IsNullOrEmpty(UseBillingAddress.CardIssueNumber), null, UseBillingAddress.CardIssueNumber),
                CardExtraCode);

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

            // 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 Moneybookers payment gateway. {0}{1}", exception.Message, responseReader.ReadToEnd());
                            responseReader.Close();
                        }
                        responseStream.Close();
                    }
                }
#endif
                catch (Exception exception)
                {
                    result = String.Format("Error calling Moneybookers payment gateway. {0}", exception.Message);
                }
            }

            // Process response
            if (paymentResponseData != null)
            {
                GatewayMoneybookers.PaymentResponse paymentResponse = paymentTransformer.TransformResponse(paymentResponseData);
                AuthorizationCode    = paymentResponse.ProcessingCode;
                AuthorizationResult  = paymentResponse.Return;
                AuthorizationTransID = CommonLogic.IIF(TransactionMode == TransactionModeEnum.auth, "AUTH=", "CAPTURE=") + paymentResponse.TransactionUniqueId;

                TransactionCommandOut = paymentRequestData;
                TransactionResponse   = paymentResponseData;

                if (paymentResponse.Result.ToUpperInvariant() == "ACK")
                {
                    if (paymentResponse.ResponseMode == GatewayMoneybookers.ResponseMode.Async)
                    {
                        string redirectUrl = paymentResponse.RedirectUrl;

                        string parameterKeys = String.Join(";", paymentResponse.RedirectParameters.Keys.Select(s => "Moneybookers_3DSecure_Parameter_" + s).ToArray());

                        CustomerSession customerSession = new CustomerSession(CustomerID);
                        customerSession["Moneybookers_3DSecure_OrderNumber"]   = OrderNumber.ToString();
                        customerSession["Moneybookers_3DSecure_RedirectUrl"]   = paymentResponse.RedirectUrl;
                        customerSession["Moneybookers_3DSecure_ParameterKeys"] = parameterKeys;

                        foreach (var kvp in paymentResponse.RedirectParameters)
                        {
                            customerSession["Moneybookers_3DSecure_Parameter_" + kvp.Key] = kvp.Value;
                        }

                        result = AppLogic.ro_3DSecure;
                    }
                    else
                    {
                        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.º 4
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));
            }
        }