示例#1
0
        public void InitiateCheckoutAuthenticationReturnNullTest()
        {
            CheckoutResponse response  = null;
            JsonResult       actResult = null;

            var randomKey  = Guid.NewGuid().ToString("N");
            var privateKey = ConfigurationManager.AppSettings["AppTestSecretKey"];
            var signature  = Md5Helper.GetMd5Hash(randomKey + privateKey + 123 + "AB-123" + 500);

            var request = new Mock <CheckoutRequest>().Object;

            request.type        = "sale";
            request.randomkey   = randomKey;
            request.orderid     = 123;
            request.invoice     = "AB-123";
            request.amounttotal = 500;
            request.signature   = signature;

            _gatewayAuthenticationService.Setup(m => m.GetGatewayToken(It.IsAny <string>(), It.IsAny <string>())).Returns(() => null);

            actResult = _checkoutController.InitiateCheckout(request);
            Assert.IsNotNull(actResult);
            Assert.IsInstanceOf <JsonResult>(actResult);

            response = actResult.Data as CheckoutResponse;
            Assert.IsNotNull(response);
            Assert.IsInstanceOf <CheckoutResponse>(response);

            StringAssert.AreEqualIgnoringCase("101", response.errorcode);
            StringAssert.Contains("Gateway authentication transaction failed.", response.errormessage);
        }
示例#2
0
 void HandleCheckOutResponse(CheckoutResponse response)
 {
     checkOut.Invoke(new Action(() =>
     {
         checkOut.HandleCheckOutResponse(response.Payload.Success, response.Payload.DueDate[0].Date);
     }));
 }
示例#3
0
        public void InitiateCheckoutSignatureValidationTest()
        {
            CheckoutResponse response  = null;
            JsonResult       actResult = null;

            // Signature validation
            var randomKey = Guid.NewGuid().ToString("N");
            var request   = new Mock <CheckoutRequest>().Object;

            request.type        = "sale";
            request.randomkey   = randomKey;
            request.orderid     = 123;
            request.invoice     = "AB-123";
            request.amounttotal = 500;
            request.signature   = "4545A3SD22DD";

            actResult = _checkoutController.InitiateCheckout(request);
            Assert.IsNotNull(actResult);
            Assert.IsInstanceOf <JsonResult>(actResult);

            response = actResult.Data as CheckoutResponse;
            Assert.IsNotNull(response);
            Assert.IsInstanceOf <CheckoutResponse>(response);

            Assert.That("100", Is.EqualTo(response.errorcode));
            Assert.That("Bad Request. Invalid Signature.", Is.EqualTo(response.errormessage));
        }
示例#4
0
        public CheckoutResponse ProcessCheckout(CheckoutRequest checkoutRequest)
        {
            CheckoutResponse response = new CheckoutResponse();
            var customer = _messageMapper.MapToCustomer(checkoutRequest.CustomerDto);
            var person   = customer.Person;

            _personRepositery.SavePerson(person);
            var address = _messageMapper.MapTopAddress(checkoutRequest.addressDto);

            _addressRespository.SaveAddress(address);

            customer.PersonId = person.Id;
            customer.Person   = person;
            _customerRepository.SaveCustomer(customer);
            var cart = _cartService.GetCart();

            if (cart != null)
            {
                var     cartItems      = _cartItemRepository.FindCartItemsById(cart.Id);
                var     cartTotal      = _cartService.GetCartTotal();
                decimal shippingCharge = 0;
                var     orderTotal     = cartTotal + shippingCharge;
                var     order          = new Order
                {
                    OrderTotal        = orderTotal,
                    OrderItemTotal    = cartTotal,
                    ShippingCharge    = shippingCharge,
                    AddressId         = address.Id,
                    DeliveryAddresses = address,
                    CustomerId        = customer.Id,
                    Customer          = customer,
                    OrderStatus       = OrderStatus.Submitted
                };
                _orderRepository.SaveOrder(order);
                foreach (var cartItem in cartItems)
                {
                    var orderItem = new OrderItem
                    {
                        Quantity  = cartItem.Quantity,
                        Order     = order,
                        OrderId   = order.Id,
                        Product   = cartItem.product,
                        ProductId = cartItem.ProductId
                    };
                    _orderItemRepository.SaveOrderItem(orderItem);
                }
                _cartRepository.DeleteCart(cart);

                response.StatusCode = System.Net.HttpStatusCode.Created;
                response.Messages.Add(item: "Order Created");
            }
            else
            {
                response.StatusCode = System.Net.HttpStatusCode.NoContent;
                response.Messages.Add(item: "Order Emptiy");
            }


            return(response);
        }
示例#5
0
        public void TestInitiateCheckout()
        {
            Guid userId = new Guid("92A8AA97-294C-487F-8B82-4DA9836C1136");
            User user   = DbCommonManager.GetUser(userId);

            Configuration config      = new Configuration();
            PayUManager   payUManager = new PayUManager(config);

            CheckoutRequest cr = new CheckoutRequest();

            cr.User          = user;
            cr.CheckoutItems = new CheckoutItems();
            cr.CheckoutItems.TotalCalcPrice = 135;

            List <CheckoutItem> cil = new List <CheckoutItem>();
            CheckoutItem        ci  = new CheckoutItem();

            ci.SID  = 1;
            ci.Qty  = 1;
            ci.ID   = 1;
            ci.IPID = 1;
            cil.Add(ci);

            cr.CheckoutItems.Items = cil.ToArray();

            CheckoutResponse response = payUManager.InitiateCheckout(cr);
        }
示例#6
0
        public void OnCheckout(Session session, CheckoutRequest request, CheckoutResponse response)
        {
            Console.WriteLine("Checkout Message");

            // обязательные поля
            response.Ok              = true;
            response.RenewalOk       = false;
            response.MagneticMedia   = true;
            response.Desensitize     = true;
            response.TransactionDate = DateTime.Now;

            response.InstitutionId    = "The Institiotion Id";
            response.PatronIdentifier = request.PatronIdentifier + " (took from request)";
            response.ItemIdentifier   = request.ItemIdentifier + " (also took from request)";
            response.TitleIdentifier  = "The MEGA Title";
            response.DueDate          = DateTime.Now;

            // необязательные поля
            response.FeeType         = FeeType.OTHER_UNKNOWN;
            response.SecurityInhibit = true;
            response.CurrencyType    = Currency.USD;
            response.FeeAmount       = 100;
            response.MediaType       = MediaType.BOOK_WITH_CD;
            response.ItemProperties  = "The SUPA DUPA Properies";
            response.TransactionId   = "The Trans Id";

            response.ScreenMessage = "F**K The Police";
            response.PrintLine     = "The Print Line";
        }
示例#7
0
        public CheckoutResponse Checkout()
        {
            var response = new CheckoutResponse
            {
                CheckedOutBasket = _basket,
                Total            = _basket.Sum(b => b.Price * b.Quantity)
            };

            _basket = new List <BasketItem>();
            return(response);
        }
示例#8
0
        public HttpResponseMessage InitiatePayUCheckout()
        {
            HttpResponseMessage httpResponseMessage = Request.CreateResponse(HttpStatusCode.OK);
            string strRequest = string.Empty;

            try
            {
                strRequest = Request.Content.ReadAsStringAsync().Result;
                if (string.IsNullOrWhiteSpace(strRequest))
                {
                    httpResponseMessage.StatusCode = System.Net.HttpStatusCode.InternalServerError;
                    httpResponseMessage.Content    = new StringContent(Constants.INVALID_REQUEST);
                    return(httpResponseMessage);
                }

                JsonSerializerHelper serializer      = new JsonSerializerHelper();
                CheckoutRequest      checkoutRequest = (CheckoutRequest)serializer.Deserialize(strRequest, typeof(CheckoutRequest));
                if (checkoutRequest == null)
                {
                    httpResponseMessage.StatusCode = System.Net.HttpStatusCode.InternalServerError;
                    httpResponseMessage.Content    = new StringContent(Constants.INVALID_REQUEST);
                    return(httpResponseMessage);
                }

                Configuration config = new Configuration();
                config.PayUFailureUrl = "FailureUrl";
                config.PayUSuccessUrl = "SuccessUrl";
                config.PayUSalt       = "Salt";
                config.PayUKey        = "Key";

                PayUManager      payUManager = new PayUManager(config);
                CheckoutResponse response    = payUManager.InitiateCheckout(checkoutRequest);
                if (response != null && response.Status == Status.Success)
                {
                    string responseContent = serializer.Serialize(response);
                    httpResponseMessage.Content = new StringContent(responseContent, Encoding.UTF8, "application/json");
                }
                else
                {
                    httpResponseMessage.StatusCode = System.Net.HttpStatusCode.InternalServerError;
                    httpResponseMessage.Content    = new StringContent(Constants.PROCESSING_ERROR);
                }
            }
            catch (Exception ex)
            {
                this.HandleException(ex, strRequest);
                httpResponseMessage.StatusCode = System.Net.HttpStatusCode.InternalServerError;
                httpResponseMessage.Content    = new StringContent(Constants.PROCESSING_ERROR);
            }

            return(httpResponseMessage);
        }
示例#9
0
        protected void CreditCardButton_Click(object sender, EventArgs e)
        {
            if (Page.IsValid && CustomValidation())
            {
                //CREATE THE PAYMENT OBJECT
                Payment payment = GetPayment();
                //PROCESS CHECKING OUT EVENT
                bool checkOut = true;
                if (CheckingOut != null)
                {
                    CheckingOutEventArgs c = new CheckingOutEventArgs(payment);
                    CheckingOut(this, c);
                    checkOut = !c.Cancel;
                }
                if (checkOut)
                {
                    //PROCESS A CHECKOUT
                    ICheckoutService checkoutService  = AbleContext.Resolve <ICheckoutService>();
                    CheckoutRequest  checkoutRequest  = new CheckoutRequest(_Basket, payment);
                    CheckoutResponse checkoutResponse = checkoutService.ExecuteCheckout(checkoutRequest, false);
                    if (checkoutResponse.Success)
                    {
                        if (CheckedOut != null)
                        {
                            CheckedOut(this, new CheckedOutEventArgs(checkoutResponse));
                        }
                        Response.Redirect(AbleCommerce.Code.NavigationHelper.GetReceiptUrl(checkoutResponse.Order.OrderNumber));
                    }
                    else
                    {
                        IList <string> warningMessages = checkoutResponse.WarningMessages;
                        if (warningMessages.Count == 0)
                        {
                            warningMessages.Add("The order could not be submitted at this time.  Please try again later or contact us for assistance.");
                        }
                        if (CheckedOut != null)
                        {
                            CheckedOut(this, new CheckedOutEventArgs(checkoutResponse));
                        }
                    }
                }
            }
            else
            {
                CreditCardButton.Text = "Pay With Card";
            }

            // IF NOT SUCCESSFULL / ENABLE THE CHECKOUT BUTTON
            CreditCardButton.Enabled = true;
            FormIsSubmitted.Value    = "0";
        }
示例#10
0
    public void CompleteCheckout()
    {
        //int id = this.transform.parent.parent.parent.parent.GetComponent<cartId>().cId;
        int            id      = 5;
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://dc3e9063.ngrok.io/carts/" + id + "/checkout");

        request.Method = "POST";

        HttpWebResponse  response       = (HttpWebResponse)request.GetResponse();
        StreamReader     reader         = new StreamReader(response.GetResponseStream());
        string           jsonResponse   = reader.ReadToEnd();
        CheckoutResponse parsedResponse = JsonUtility.FromJson <CheckoutResponse>(jsonResponse);

        StartCoroutine(updateCheckout(parsedResponse.message));
    }
示例#11
0
 protected void CheckButton_Click(object sender, EventArgs e)
 {
     if (Page.IsValid)
     {
         //CREATE THE PAYMENT OBJECT
         Payment payment = GetPayment();
         //PROCESS CHECKING OUT EVENT
         bool checkOut = true;
         if (CheckingOut != null)
         {
             CheckingOutEventArgs c = new CheckingOutEventArgs(payment);
             CheckingOut(this, c);
             checkOut = !c.Cancel;
         }
         if (checkOut)
         {
             //PROCESS THE CHECKOUT
             ICheckoutService checkoutService  = AbleContext.Resolve <ICheckoutService>();
             CheckoutRequest  checkoutRequest  = new CheckoutRequest(_Basket, payment);
             CheckoutResponse checkoutResponse = checkoutService.ExecuteCheckout(checkoutRequest, false);
             if (checkoutResponse.Success)
             {
                 if (CheckedOut != null)
                 {
                     CheckedOut(this, new CheckedOutEventArgs(checkoutResponse));
                 }
                 Response.Redirect(AbleCommerce.Code.NavigationHelper.GetReceiptUrl(checkoutResponse.Order.OrderNumber));
             }
             else
             {
                 IList <string> warningMessages = checkoutResponse.WarningMessages;
                 if (warningMessages.Count == 0)
                 {
                     warningMessages.Add("The order could not be submitted at this time.  Please try again later or contact us for assistance.");
                 }
                 if (CheckedOut != null)
                 {
                     CheckedOut(this, new CheckedOutEventArgs(checkoutResponse));
                 }
             }
         }
     }
     else
     {
         CheckButton.Text = string.Format("Pay by {0}", _PaymentMethod.Name);
     }
 }
示例#12
0
        public void InitiateCheckoutPassedTest()
        {
            CheckoutResponse response  = null;
            JsonResult       actResult = null;

            var randomKey  = Guid.NewGuid().ToString("N");
            var privateKey = ConfigurationManager.AppSettings["AppTestSecretKey"];
            var signature  = Md5Helper.GetMd5Hash(randomKey + privateKey + 123 + "AB-123" + 500);

            var request = new Mock <CheckoutRequest>().Object;

            request.type        = "sale";
            request.randomkey   = randomKey;
            request.orderid     = 123;
            request.invoice     = "AB-123";
            request.amounttotal = 500;
            request.signature   = signature;

            var token = new Mock <GatewayToken>().Object;

            token.token           = Guid.NewGuid().ToString("N");
            token.expiration_date = DateTime.Now.AddDays(1).ToString();

            _gatewayAuthenticationService.Setup(m => m.GetGatewayToken(It.IsAny <string>(), It.IsAny <string>())).Returns(token);

            var gatewayCheckoutResponse = new Mock <GatewayCheckoutResponse>().Object;

            gatewayCheckoutResponse.checkout_url = "www.test.com";

            _gatewayChekoutService.Setup(x => x.InitiateGatewayChechout(request, token)).Returns(gatewayCheckoutResponse);

            actResult = _checkoutController.InitiateCheckout(request);
            Assert.IsNotNull(actResult);
            Assert.IsInstanceOf <JsonResult>(actResult);

            response = actResult.Data as CheckoutResponse;
            Assert.IsNotNull(response);
            Assert.IsInstanceOf <CheckoutResponse>(response);

            Assert.IsEmpty(response.errorcode, string.Empty);
            Assert.IsEmpty(response.errormessage, string.Empty);

            Assert.IsNotEmpty(response.redirecturl);
            StringAssert.AreEqualIgnoringCase("www.test.com", response.redirecturl);

            StringAssert.AreEqualIgnoringCase(Md5Helper.GetMd5Hash(response.randomkey + privateKey + "" + response.redirecturl), response.signature);
        }
示例#13
0
        protected void PlaceOrderButton_Click(object sender, EventArgs e)
        {
            MethodInfo widgetMethod       = _AmazonProvider.GetType().GetMethod("Checkout");
            string     purchaseContractId = Request.QueryString["purchaseContractId"];

            object[]         parameters = new object[] { AbleContext.Current.User.Basket, purchaseContractId };
            CheckoutResponse result     = (CheckoutResponse)widgetMethod.Invoke(_AmazonProvider, parameters);

            if (!result.Success)
            {
                PlaceOrderButton.Text = result.WarningMessages[0];
            }
            else
            {
                Response.Redirect("~/Members/MyOrder.aspx?OrderNumber=" + result.Order.OrderNumber);
            }
        }
        protected void PhoneCallButton_Click(object sender, EventArgs e)
        {
            // CREATE THE PAYMENT OBJECT
            Payment payment = GetPayment();

            payment.ReferenceNumber = AbleContext.Current.User.PrimaryAddress.Phone;

            // PROCESS CHECKING OUT EVENT
            bool checkOut = true;

            if (CheckingOut != null)
            {
                CheckingOutEventArgs c = new CheckingOutEventArgs(payment);
                CheckingOut(this, c);
                checkOut = !c.Cancel;
            }
            if (checkOut)
            {
                // CONTINUE TO PROCESS THE CHECKOUT
                Basket           basket           = AbleContext.Current.User.Basket;
                ICheckoutService checkoutService  = AbleContext.Resolve <ICheckoutService>();
                CheckoutRequest  checkoutRequest  = new CheckoutRequest(basket, payment);
                CheckoutResponse checkoutResponse = checkoutService.ExecuteCheckout(checkoutRequest);
                if (checkoutResponse.Success)
                {
                    if (CheckedOut != null)
                    {
                        CheckedOut(this, new CheckedOutEventArgs(checkoutResponse));
                    }
                    Response.Redirect(AbleCommerce.Code.NavigationHelper.GetReceiptUrl(checkoutResponse.Order.OrderNumber));
                }
                else
                {
                    IList <string> warningMessages = checkoutResponse.WarningMessages;
                    if (warningMessages.Count == 0)
                    {
                        warningMessages.Add("The order could not be submitted at this time.  Please try again later or contact us for assistance.");
                    }
                    if (CheckedOut != null)
                    {
                        CheckedOut(this, new CheckedOutEventArgs(checkoutResponse));
                    }
                }
            }
        }
        void CheckedOut(object sender, CheckedOutEventArgs e)
        {
            CheckoutResponse response = e.CheckoutResponse;

            if (response.Success)
            {
                // STOP TRACKING THE ANONYMOUS USER
                Session["CreateOrder_AnonUserId"] = null;

                // CREATE / LINK USER ACCOUNT IF NEEDED
                if (RegisterPanel.Visible && CreateAccount.Checked)
                {
                    if (_ExistingUser == null)
                    {
                        // THERE IS NO EXISTING ACCOUNT, SO CREATE A NEW USER
                        string email = _User.PrimaryAddress.Email;
                        _User.UserName   = email;
                        _User.Email      = email;
                        _User.IsApproved = true;
                        _User.Save();
                        _User.SetPassword(Password.Text);
                        _User.Passwords[0].ForceExpiration = ForceExpiration.Checked;
                        _User.Save();
                    }
                    else
                    {
                        // THERE IS AN EXISTING USER, SO MIGRATE THIS ORDER
                        OrderDataSource.UpdateUser(_UserId, _ExistingUser.Id);
                        AddressDataSource.UpdateUser(_UserId, _ExistingUser.Id);
                    }
                }

                // REDIRECT TO THE FINAL ORDER
                Response.Redirect("~/Admin/Orders/ViewOrder.aspx?OrderNumber=" + response.Order.OrderNumber);
            }
            else
            {
                // SHOW ERRORS TO CUSTOMER
                WarningMessageList.DataSource = e.CheckoutResponse.WarningMessages;
                WarningMessageList.DataBind();
            }
        }
示例#16
0
        public void InitiateCheckoutTransactionTypeValidationTest()
        {
            CheckoutResponse response  = null;
            JsonResult       actResult = null;
            //Transaction type validation
            var request = new Mock <CheckoutRequest>();

            request.Object.type = "any wrong type";

            actResult = _checkoutController.InitiateCheckout(request.Object);
            Assert.IsNotNull(actResult);
            Assert.IsInstanceOf <JsonResult>(actResult);

            response = actResult.Data as CheckoutResponse;
            Assert.IsNotNull(response);
            Assert.IsInstanceOf <CheckoutResponse>(response);

            Assert.That("100", Is.EqualTo(response.errorcode));
            Assert.That("Bad Request. Invalid Transaction Type.", Is.EqualTo(response.errormessage));
        }
示例#17
0
        public static void InitiateCheckout()
        {
            Guid userId = new Guid("92A8AA97-294C-487F-8B82-4DA9836C1136");
            User user   = DbCommonManager.GetUser(userId);

            Configuration config = new Configuration();

            config.PayUFailureUrl = "FailureUrl";
            config.PayUSuccessUrl = "SuccessUrl";
            config.PayUSalt       = "Salt";
            config.PayUKey        = "Key";

            PayUManager payUManager = new PayUManager(config);

            CheckoutRequest cr = new CheckoutRequest();

            cr.User                    = user;
            cr.DeliveryAddress         = new OrderDeliveryAddressMap();
            cr.DeliveryAddress.City    = "Bangalore";
            cr.DeliveryAddress.ZipCode = "560068";
            cr.DeliveryAddress.State   = "Karnataka";
            cr.DeliveryAddress.Address = "No 204 Sunnyvale apartment, 15th main road, AECS layout block A, Singasandra/Kudlu";

            CheckoutItems coi = new CheckoutItems();

            cr.CheckoutItems = coi;
            List <CheckoutItem> cil = new List <CheckoutItem>();
            CheckoutItem        ci  = new CheckoutItem();

            ci.SID       = 1;
            ci.Qty       = 1;
            ci.ID        = 1;
            ci.IPID      = 1;
            ci.CalcPrice = 135;
            cil.Add(ci);
            cr.CheckoutItems.Items          = cil.ToArray();
            cr.CheckoutItems.TotalCalcPrice = 135;

            CheckoutResponse response = payUManager.InitiateCheckout(cr);
        }
示例#18
0
        public async Task <IActionResult> Post([FromBody] CheckoutRequest request)
        {
            if (request == null ||
                request.PostalCode == null)
            {
                return(BadRequest());
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var checkoutResult = await _checkoutService.Checkout(request.PostalCode);

            var response = new CheckoutResponse()
            {
                PreTax = checkoutResult.PreTax, PostTax = checkoutResult.PostTax
            };

            return(new OkObjectResult(response));
        }
示例#19
0
        protected void CompleteButton_Click(object sender, EventArgs e)
        {
            bool checkOut = true;

            if (CheckingOut != null)
            {
                CheckingOutEventArgs c = new CheckingOutEventArgs();
                CheckingOut(this, c);
                checkOut = !c.Cancel;
            }
            if (checkOut)
            {
                Basket basket = AbleContext.Current.User.Basket;
                //PROCESS THE CHECKOUT
                ICheckoutService checkoutService  = AbleContext.Resolve <ICheckoutService>();
                CheckoutRequest  checkoutRequest  = new CheckoutRequest(basket);
                CheckoutResponse checkoutResponse = checkoutService.ExecuteCheckout(checkoutRequest);
                if (checkoutResponse.Success)
                {
                    if (CheckedOut != null)
                    {
                        CheckedOut(this, new CheckedOutEventArgs(checkoutResponse));
                    }
                    Response.Redirect(AbleCommerce.Code.NavigationHelper.GetReceiptUrl(checkoutResponse.Order.OrderNumber));
                }
                else
                {
                    IList <string> warningMessages = checkoutResponse.WarningMessages;
                    if (warningMessages.Count == 0)
                    {
                        warningMessages.Add("The order could not be submitted at this time.  Please try again later or contact us for assistance.");
                    }
                    if (CheckedOut != null)
                    {
                        CheckedOut(this, new CheckedOutEventArgs(checkoutResponse));
                    }
                }
            }
        }
示例#20
0
        public CheckoutResponse InitiateCheckout(CheckoutRequest Request)
        {
            CheckoutResponse response = new CheckoutResponse();

            // TODO - Logic to call TPro3 and get the response of it
            // create the responce to send to 3dcart with the responce recieved from TPro3

            #region Test Data
            #if DEBUG
            response = new CheckoutResponse
            {
                paymenttoken   = "abc123xyz321",
                redirecturl    = "https://www.someurlpointingtotheircheckoutpage.com/script.asp",
                errorcode      = "abc123",
                errormessage   = "error message",
                randomkey      = "999azswed23xyz",
                redirectmethod = "GET",
                signature      = "md5(randomkey + app_privatekey + paymenttoken + redirecturl)"
            };
            #endif
            #endregion

            return(response);
        }
        protected void CompleteButton_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                bool checkOut = true;
                if (CheckingOut != null)
                {
                    CheckingOutEventArgs c = new CheckingOutEventArgs();
                    CheckingOut(this, c);
                    checkOut = !c.Cancel;
                }
                if (checkOut)
                {
                    Basket basket = AbleContext.Current.User.Basket;
                    //PROCESS THE CHECKOUT
                    ICheckoutService checkoutService  = AbleContext.Resolve <ICheckoutService>();
                    CheckoutRequest  checkoutRequest  = new CheckoutRequest(basket);
                    CheckoutResponse checkoutResponse = checkoutService.ExecuteCheckout(checkoutRequest);
                    if (checkoutResponse.Success)
                    {
                        GatewayPaymentProfile profile = null;
                        this.Visible = true;

                        if (ProfilesPH.Visible)
                        {
                            profile = GatewayPaymentProfileDataSource.Load(AlwaysConvert.ToInt(ProfilesList.SelectedValue));
                        }

                        if (CardPH.Visible)
                        {
                            AccountDataDictionary cardDetails = new AccountDataDictionary();
                            cardDetails["AccountName"]     = CardName.Text.Trim();
                            cardDetails["AccountNumber"]   = CardNumber.Text.Trim();
                            cardDetails["ExpirationMonth"] = ExpirationMonth.SelectedItem.Value;
                            cardDetails["ExpirationYear"]  = ExpirationYear.SelectedItem.Value;
                            cardDetails["SecurityCode"]    = SecurityCode.Text.Trim();
                            profile = CreateProfile(cardDetails);
                        }

                        if (profile != null)
                        {
                            IList <Subscription> subscriptions = SubscriptionDataSource.LoadForOrder(checkoutResponse.Order.Id);
                            foreach (Subscription subscription in subscriptions)
                            {
                                if (subscription.PaymentFrequency.HasValue && subscription.PaymentFrequencyUnit.HasValue)
                                {
                                    subscription.PaymentProfile        = profile;
                                    subscription.PaymentProcessingType = PaymentProcessingType.ArbProfileManaged;
                                    subscription.Save();
                                }
                            }
                        }

                        if (CheckedOut != null)
                        {
                            CheckedOut(this, new CheckedOutEventArgs(checkoutResponse));
                        }
                        Response.Redirect(AbleCommerce.Code.NavigationHelper.GetReceiptUrl(checkoutResponse.Order.OrderNumber));
                    }
                    else
                    {
                        IList <string> warningMessages = checkoutResponse.WarningMessages;
                        if (warningMessages.Count == 0)
                        {
                            warningMessages.Add("The order could not be submitted at this time.  Please try again later or contact us for assistance.");
                        }
                        if (CheckedOut != null)
                        {
                            CheckedOut(this, new CheckedOutEventArgs(checkoutResponse));
                        }
                    }
                }
            }
        }
示例#22
0
 protected void GiftCertificateButton_Click(object sender, EventArgs e)
 {
     if (Page.IsValid)
     {
         bool checkOut = true;
         if (CheckingOut != null)
         {
             // CREATE THE PAYMENT OBJECT
             Payment payment        = GetPayment();
             CheckingOutEventArgs c = new CheckingOutEventArgs(payment);
             CheckingOut(this, c);
             checkOut = !c.Cancel;
         }
         if (checkOut)
         {
             Basket basket = AbleContext.Current.User.Basket;
             GiftCertificateNumber.Text = StringHelper.StripHtml(GiftCertificateNumber.Text);
             GiftCertificate gc = GiftCertificateDataSource.LoadForSerialNumber(GiftCertificateNumber.Text);
             if (gc == null)
             {
                 GiftCertPaymentErrors.Text = "This is not a valid gift certificate : " + GiftCertificateNumber.Text;
             }
             else if (gc.Balance <= 0)
             {
                 GiftCertPaymentErrors.Text = "There is no balance left for this gift certificate : " + GiftCertificateNumber.Text;
             }
             else if (gc.IsExpired())
             {
                 GiftCertPaymentErrors.Text = "This gift certificate is expired : " + GiftCertificateNumber.Text;
             }
             else if (AlreadyInUse(basket, gc))
             {
                 GiftCertPaymentErrors.Text = "This gift certificate is already applied to your basket : " + GiftCertificateNumber.Text;
             }
             else
             {
                 // process this gift certificate
                 decimal    basketTotal = basket.Items.TotalPrice();
                 BasketItem bitem       = new BasketItem();
                 bitem.Basket        = basket;
                 bitem.OrderItemType = OrderItemType.GiftCertificatePayment;
                 bitem.Price         = -(gc.Balance > basketTotal ? basketTotal : gc.Balance);
                 bitem.Quantity      = 1;
                 bitem.Name          = gc.Name;
                 bitem.Sku           = gc.SerialNumber;
                 basket.Items.Add(bitem);
                 basket.Save();
                 decimal remBalance = basket.Items.TotalPrice();
                 if (remBalance > 0)
                 {
                     GiftCertPaymentErrors.Text = string.Format("A payment of {0} will be made using gift certificate {1}. It will leave a balance of {2} for this order. Please make additional payments.", gc.Balance.LSCurrencyFormat("lc"), GiftCertificateNumber.Text, remBalance.LSCurrencyFormat("lc"));
                 }
                 else
                 {
                     //payment done. process checkout
                     ICheckoutService checkoutService  = AbleContext.Resolve <ICheckoutService>();
                     CheckoutRequest  checkoutRequest  = new CheckoutRequest(basket);
                     CheckoutResponse checkoutResponse = checkoutService.ExecuteCheckout(checkoutRequest);
                     if (checkoutResponse.Success)
                     {
                         if (CheckedOut != null)
                         {
                             CheckedOut(this, new CheckedOutEventArgs(checkoutResponse));
                         }
                         Response.Redirect(AbleCommerce.Code.NavigationHelper.GetReceiptUrl(checkoutResponse.Order.OrderNumber));
                     }
                     else
                     {
                         IList <string> warningMessages = checkoutResponse.WarningMessages;
                         if (warningMessages.Count == 0)
                         {
                             warningMessages.Add("The order could not be submitted at this time.  Please try again later or contact us for assistance.");
                         }
                         if (CheckedOut != null)
                         {
                             CheckedOut(this, new CheckedOutEventArgs(checkoutResponse));
                         }
                     }
                 }
             }
             if (!string.IsNullOrEmpty(GiftCertPaymentErrors.Text))
             {
                 GiftCertErrorsPanel.Visible = true;
             }
         }
     }
 }
示例#23
0
 public CheckoutShippingRequest()
 {
     CheckoutResponse = new CheckoutResponse();
 }
示例#24
0
 public void SetCheckout(CheckoutResponse checkout)
 {
     Add(Config.Keys.Checkout, checkout);
 }
示例#25
0
        public JsonResult InitiateCheckout(CheckoutRequest request)
        {
            CheckoutResponse response = null;

            var randomKey    = Guid.NewGuid().ToString("N");
            var privateKey   = ConfigurationManager.AppSettings["AppTestSecretKey"];
            var paymenttoken = "";
            var checkouturl  = "";
            var errorMsg     = "";

            //validations
            if (!request.type.Equals("sale"))
            {
                errorMsg = "Bad Request. Invalid Transaction Type.";
                response = DoCheckoutResponse(randomKey, privateKey, paymenttoken, checkouturl, "100", errorMsg);
                return(Json(response));
            }
            if (request.signature != Md5Helper.GetMd5Hash(request.randomkey + privateKey + request.orderid + request.invoice + request.amounttotal))
            {
                errorMsg = "Bad Request. Invalid Signature.";
                response = DoCheckoutResponse(randomKey, privateKey, paymenttoken, checkouturl, "100", errorMsg);
                return(Json(response));
            }

            //authentication
            GatewayToken token = null;

            try
            {
                token = _gatewayAuthenticationService.GetGatewayToken(request.username, request.password);
            }
            catch (Exception ex)
            {
                errorMsg = "Gateway authentication transaction failed. " + ex.Message;
                response = DoCheckoutResponse(randomKey, privateKey, paymenttoken, checkouturl, "101", errorMsg);
                return(Json(response));
            }

            if (token == null)
            {
                errorMsg = "Gateway authentication transaction failed.";
                response = DoCheckoutResponse(randomKey, privateKey, paymenttoken, checkouturl, "101", errorMsg);
                return(Json(response));
            }

            //checkout
            GatewayCheckoutResponse gatewayCheckoutResponse = null;

            try
            {
                gatewayCheckoutResponse = _gatewayChekoutService.InitiateGatewayChechout(request, token);
            }
            catch (Exception ex)
            {
                errorMsg = "Gateway checkout transaction failed. " + ex.Message;
                response = DoCheckoutResponse(randomKey, privateKey, paymenttoken, checkouturl, "102", errorMsg);
                return(Json(response));
            }

            if (gatewayCheckoutResponse == null)
            {
                errorMsg = "Gateway checkout transaction failed.";
                response = DoCheckoutResponse(randomKey, privateKey, paymenttoken, checkouturl, "102", errorMsg);
                return(Json(response));
            }

            checkouturl = gatewayCheckoutResponse.checkout_url;
            response    = DoCheckoutResponse(randomKey, privateKey, paymenttoken, checkouturl, "", "");
            return(Json(response));
        }
        public CheckoutResponse ProcessCheckout(CheckoutRequest request)
        {
            var response = new CheckoutResponse();
            var customer = request.Customer.MapToCustomer();

            var person = customer.Person;

            _personRepository.SavePerson(person);

            var address = request.Address.MapToAddress();

            _addressRepository.SaveAddress(address);

            customer.PersonId = person.Id;
            customer.Person   = person;

            _customerRepository.SaveCustomer(customer);

            var cart = _cartService.GetCart();

            if (cart != null)
            {
                var     cartItems      = _cartItemRepository.FindCartItemsByCartId(cart.Id);
                var     cartTotal      = _cartService.GetCartTotal();
                decimal shippingCharge = 0;
                var     orderTotal     = cartTotal + shippingCharge;

                var order = new Order
                {
                    OrderTotal      = orderTotal,
                    OrderItemTotal  = cartTotal,
                    ShippingCharge  = shippingCharge,
                    AddressId       = address.Id,
                    DeliveryAddress = address,
                    CustomerId      = customer.Id,
                    Customer        = customer,
                    OrderStatus     = OrderStatus.Submitted
                };

                _orderRepository.SaveOrder(order);

                foreach (var cartItem in cartItems)
                {
                    var orderItem = new OrderItem
                    {
                        Quantity  = cartItem.Quantity,
                        Order     = order,
                        OrderId   = order.Id,
                        Product   = cartItem.Product,
                        ProductId = cartItem.ProductId
                    };

                    _orderItemRepository.SaveOrderItem(orderItem);
                }

                _cartRepository.DeleteCart(cart);

                response.StatusCode = HttpStatusCode.Created;
                response.Messages.Add("Order created");
            }
            else
            {
                response.StatusCode = HttpStatusCode.InternalServerError;
                response.Messages.Add("There is a problem creating the order");
            }

            return(response);
        }
示例#27
0
 public CheckoutApplyCouponRequest()
 {
     CheckoutResponse = new CheckoutResponse();
 }
示例#28
0
        public void Process()
        {
            TraceContext trace    = WebTrace.GetTraceContext();
            string       traceKey = "GoogleCheckout.AC.NewOrderHandler";

            trace.Write(traceKey, "Begin NewOrderHandler.Process, Google order number " + N1.googleordernumber);

            Order order = OrderDataSource.LoadForGoogleOrderNumber(N1.googleordernumber);

            if (order == null) // ordernumber not already entered
            {
                trace.Write(traceKey, "Google order not present in database, get basket");
                Basket basket = AcHelper.GetAcBasket(N1.shoppingcart, true);
                if (basket == null)
                {
                    trace.Write(traceKey, "Basket could not be obtained (End NewOrderHandler.Process)");
                    return;
                }

                //basket is ready. check if there are any order adjustments to be made
                trace.Write(traceKey, "Check for order adjustments");
                OrderAdjustment orderAdj = N1.orderadjustment;
                if (orderAdj != null)
                {
                    trace.Write(traceKey, "Order adjustments present, add to basket");
                    OrderAdjustmentHelper.DoOrderAdjustments(orderAdj, basket);
                }

                trace.Write(traceKey, "set billing address");
                Users.Address primaryAddress = basket.User.PrimaryAddress;
                AcHelper.PopulateAcAddress(primaryAddress, N1.buyerbillingaddress);
                trace.Write(traceKey, "set shipping address");
                Users.Address shipAddr = AcHelper.GetAcAddress(basket.User, N1.buyershippingaddress);
                basket.User.Addresses.Add(shipAddr);
                basket.User.Save();

                trace.Write(traceKey, "package the basket");
                basket.Package(false);

                if (basket.Shipments.Count > 0)
                {
                    //there are shippable items / shipments
                    //set shipment address and shipment method
                    trace.Write(traceKey, "shippable items present, get shipping method");
                    ShipMethod shipMethod = AcHelper.GetShipMethod(basket);
                    trace.Write(traceKey, "ship method is " + shipMethod.Name + " (ID" + shipMethod.ShipMethodId.ToString() + ")");
                    foreach (BasketShipment shipment in basket.Shipments)
                    {
                        shipment.AddressId    = shipAddr.AddressId;
                        shipment.ShipMethodId = shipMethod.ShipMethodId;
                        shipment.Save();
                    }
                    //have to link the shipping charges with some shipment.
                    //we can't know which shipment. Just link to the first.
                    trace.Write(traceKey, "assign shipping charges to first shipment");
                    BasketShipment basketShipment = basket.Shipments[0];
                    foreach (BasketItem item in basket.Items)
                    {
                        if (item.OrderItemType == OrderItemType.Shipping)
                        {
                            item.BasketShipmentId = basketShipment.BasketShipmentId;
                            //update the sku and shipping method name so that scrubbed name is not used
                            item.Name = shipMethod.Name;
                            item.Sku  = string.Empty;
                        }
                    }
                }

                trace.Write(traceKey, "save basket");
                basket.Save();

                //now checkout the order with null payment.
                //this will alow payment to be processed later
                trace.Write(traceKey, "submit basket checkout");
                CheckoutRequest  acCheckout = new CheckoutRequest(null);
                CheckoutResponse acResp     = basket.Checkout(acCheckout);
                if (acResp.Success)
                {
                    trace.Write(traceKey, "checkout was successful, update the google order number for AC order number " + acResp.OrderNumber.ToString());
                    order = OrderDataSource.Load(acResp.OrderId, false);
                    if (order != null)
                    {
                        //update email address associated with order
                        order.BillToEmail       = N1.buyerbillingaddress.email;
                        order.GoogleOrderNumber = N1.googleordernumber;

                        bool isPaidByGc = false;

                        //IF THERE IS ONE PAYMENT AND IT IS A GIFT CERTIFICATE
                        //AND IT COVERS THE BALANCE OF THE ORDER THEN THIS IS THE GOOGLE PAYMENT
                        if (order.Payments.Count == 1)
                        {
                            int     gcPayMethodId = PaymentEngine.GetGiftCertificatePaymentMethod().PaymentMethodId;
                            Payment payment       = order.Payments[0];
                            if (payment.PaymentMethodId == gcPayMethodId)
                            {
                                if (payment.Amount == order.TotalCharges)
                                {
                                    isPaidByGc = true;
                                }
                            }
                        }
                        if (!isPaidByGc)
                        {
                            //We need to create a new payment with status of authorization pending
                            Payment payment = new Payment();
                            payment.PaymentMethodId   = AcHelper.GetGCPaymentMethodId(this.GatewayInstance);
                            payment.Amount            = order.GetBalance(false);
                            payment.OrderId           = order.OrderId;
                            payment.PaymentMethodName = "GoogleCheckout";
                            Transaction trans = new Transaction();
                            trans.TransactionType       = TransactionType.Authorize;
                            trans.TransactionStatus     = TransactionStatus.Pending;
                            trans.Amount                = payment.Amount;
                            trans.PaymentGatewayId      = this.GatewayInstance.PaymentGatewayId;
                            trans.ProviderTransactionId = N1.googleordernumber;
                            trans.TransactionDate       = N1.timestamp;
                            payment.Transactions.Add(trans);
                            payment.PaymentStatus = PaymentStatus.AuthorizationPending;
                            order.Payments.Add(payment);
                        }
                        order.Save();
                    }
                    else
                    {
                        OrderDataSource.UpdateGoogleOrderNumber(acResp.OrderId, N1.googleordernumber);
                    }
                }
                else
                {
                    trace.Write(traceKey, "checkout failed for google order");
                    CommerceBuilder.Utility.Logger.Warn("GoogleCheckout : New Order Checkout Failed.");
                }

                trace.Write(traceKey, "Send AC order number back to Google");
                AcNotifier.AddMerchantOrderNumber(GatewayInstance, N1.googleordernumber, acResp.OrderNumber.ToString());
            }
            else
            {
                //order number already entered. Just send notification
                trace.Write(traceKey, "Google order in database, send AC order number back to Google");
                AcNotifier.AddMerchantOrderNumber(GatewayInstance, N1.googleordernumber, order.OrderNumber.ToString());
            }
            trace.Write(traceKey, "End NewOrderHandler.Process");
        }
示例#29
0
 public CheckedOutEventArgs(CheckoutResponse response)
 {
     this.CheckoutResponse = response;
 }
        protected void CreditCardButton_Click(object sender, EventArgs e)
        {
            if (Page.IsValid && CustomValidation())
            {
                // CREATE THE PAYMENT OBJECT
                Payment payment = GetPayment();

                // PROCESS CHECKING OUT EVENT
                bool checkOut = true;
                if (CheckingOut != null)
                {
                    CheckingOutEventArgs c = new CheckingOutEventArgs(payment);
                    CheckingOut(this, c);
                    checkOut = !c.Cancel;
                }

                if (checkOut)
                {
                    // CONTINUE TO PROCESS THE CHECKOUT
                    Basket           basket           = AbleContext.Current.User.Basket;
                    ICheckoutService checkoutService  = AbleContext.Resolve <ICheckoutService>();
                    CheckoutRequest  checkoutRequest  = new CheckoutRequest(basket, payment);
                    CheckoutResponse checkoutResponse = checkoutService.ExecuteCheckout(checkoutRequest);
                    if (checkoutResponse.Success)
                    {
                        GatewayPaymentProfile profile = null;
                        if (trSaveCard.Visible && SaveCard.Checked)
                        {
                            AccountDataDictionary cardDetails = new AccountDataDictionary();
                            cardDetails["AccountName"]     = CardName.Text.Trim();
                            cardDetails["AccountNumber"]   = CardNumber.Text.Trim();
                            cardDetails["ExpirationMonth"] = ExpirationMonth.SelectedItem.Value;
                            cardDetails["ExpirationYear"]  = ExpirationYear.SelectedItem.Value;
                            cardDetails["SecurityCode"]    = SecurityCode.Text.Trim();
                            profile = CreateProfile(cardDetails);
                        }

                        if (AbleContext.Current.Store.Settings.ROCreateNewOrdersEnabled && OrderHelper.HasRecurringSubscriptions(checkoutResponse.Order))
                        {
                            IList <Subscription> subscriptions = SubscriptionDataSource.LoadForOrder(checkoutResponse.Order.Id);
                            foreach (Subscription subscription in subscriptions)
                            {
                                OrderItem oi = subscription.OrderItem;
                                if (oi != null && oi.Price == 0 && OrderHelper.HasRecurringSubscriptions(oi) && subscription.PaymentProfile == null)
                                {
                                    if (profile == null)
                                    {
                                        if (ProfilesPH.Visible)
                                        {
                                            profile = GatewayPaymentProfileDataSource.Load(AlwaysConvert.ToInt(ProfilesList.SelectedValue));
                                        }

                                        if (CardPH.Visible)
                                        {
                                            AccountDataDictionary cardDetails = new AccountDataDictionary();
                                            cardDetails["AccountName"]     = CardName.Text.Trim();
                                            cardDetails["AccountNumber"]   = CardNumber.Text.Trim();
                                            cardDetails["ExpirationMonth"] = ExpirationMonth.SelectedItem.Value;
                                            cardDetails["ExpirationYear"]  = ExpirationYear.SelectedItem.Value;
                                            cardDetails["SecurityCode"]    = SecurityCode.Text.Trim();
                                            profile = CreateProfile(cardDetails);
                                        }
                                    }

                                    subscription.PaymentProfile        = profile;
                                    subscription.PaymentProcessingType = PaymentProcessingType.ArbProfileManaged;
                                    subscription.Save();
                                }
                            }
                        }

                        if (profile != null && payment.PaymentProfile == null)
                        {
                            payment.PaymentProfile = profile;
                            payment.Save();
                        }

                        if (CheckedOut != null)
                        {
                            CheckedOut(this, new CheckedOutEventArgs(checkoutResponse));
                        }
                        Response.Redirect(AbleCommerce.Code.NavigationHelper.GetReceiptUrl(checkoutResponse.Order.OrderNumber));
                    }
                    else
                    {
                        IList <string> warningMessages = checkoutResponse.WarningMessages;
                        if (warningMessages.Count == 0)
                        {
                            warningMessages.Add("The order could not be submitted at this time.  Please try again later or contact us for assistance.");
                        }
                        if (CheckedOut != null)
                        {
                            CheckedOut(this, new CheckedOutEventArgs(checkoutResponse));
                        }
                    }
                }
            }
        }