public static PaymentBase CreateMaskedClone(this PaymentBase obj)
        {
            PaymentBase clone = obj.DeepClone();

            clone.Card?.Mask();
            return(clone);
        }
Example #2
0
 public PaymentKey(PaymentBase entity)
 {
     this.Entity = entity;
     if (entity != null)
     {
         this.paymentCode = entity.PaymentCode;
     }
 }
Example #3
0
        public static bool FromOperationResponse(Operation.OperationBody operation, stellar_dotnet_sdk.KeyPair source, PaymentResults pResult, byte[] transactionHash, out PaymentBase payment)
        {
            payment = null;
            int asset;
            //check supported deposit operations is overkill, but we need to keep SupportedDepositOperations up to date
            bool result = false;

            if (!SupportedDepositOperations.Contains(operation.Discriminant.InnerValue))
            {
                return(false);
            }
            switch (operation.Discriminant.InnerValue)
            {
            case OperationTypeEnum.PAYMENT:
                if (!TryGetAsset(operation.PaymentOp.Asset, out asset))
                {
                    return(result);
                }
                var amount      = operation.PaymentOp.Amount.InnerValue;
                var destKeypair = stellar_dotnet_sdk.KeyPair.FromPublicKey(operation.PaymentOp.Destination.Ed25519.InnerValue);
                if (Global.Constellation.Vault.Equals((RawPubKey)destKeypair.PublicKey))
                {
                    payment = new Deposit
                    {
                        Destination = new RawPubKey()
                        {
                            Data = source.PublicKey
                        },
                        Amount          = amount,
                        Asset           = asset,
                        TransactionHash = transactionHash
                    }
                }
                ;
                else if (Global.Constellation.Vault.Equals((RawPubKey)source.PublicKey))
                {
                    payment = new Withdrawal {
                        TransactionHash = transactionHash
                    }
                }
                ;
                if (payment != null)
                {
                    payment.PaymentResult = pResult;
                    result = true;
                }
                break;

            case OperationTypeEnum.PATH_PAYMENT_STRICT_SEND:
            case OperationTypeEnum.PATH_PAYMENT_STRICT_RECEIVE:
                //TODO: handle path payment
                break;

            case OperationTypeEnum.ACCOUNT_MERGE:
                //TODO: handle account merge
                break;
            }
            return(result);
        }
Example #4
0
        public ActionResult CheckoutCompletedPage(ContentModel model)
        {
            var currentCart = CurrentCart.Create(SnuffoSettings.STORE_NAME);

            if (currentCart.ItemsCount == 0)
            {
                return(Redirect($"/{CurrentUser.LanguageCode}/cart/"));
            }
            try
            {
                var order = currentCart.GetOrder();

                var    checkoutOrder = OrderMapper.Map <CheckoutOrder>(order);
                string baseUrl       = WebUtils.GetApplicationUrlPath(HttpContext.ApplicationInstance.Context);
                checkoutOrder.CallBackUrlOnPaymentSucceed = $"{baseUrl}{CurrentUser.LanguageCode}/checkout-completed";
                checkoutOrder.CallBackUrlOnPaymentFailed  = $"{baseUrl}{CurrentUser.LanguageCode}/checkout-cancelled";

                checkoutOrder.OrderDetails.AddRange(OrderMapper.Map <List <CheckoutOrderDetail> >(order.ProductOrderDetails));
                checkoutOrder.OrderDetails.AddRange(OrderMapper.Map <List <CheckoutOrderDetail> >(order.TicketOrderDetails));

                var payment = PaymentBase.CreatePayment(checkoutOrder);
                if (payment.PaymentMethod == CS.PaymentMethod.PayPal)
                {
                    PayPalPayment paypal = payment as PayPalPayment;
                    paypal.IsSandbox    = string.Equals(order.PaymentMethod["Mode"], "sandbox");
                    paypal.ClientId     = order.PaymentMethod["ClientId"];
                    paypal.ClientSecret = order.PaymentMethod["ClientSecret"];
                }

                if (Request.QueryString.Count == 0)
                {
                    var response = payment.DoPayment();
                    order.PaymentTransactionId = response.PaymentTransactionId;

                    // Save the order
                    currentCart.SaveOrder(order);

                    return(Redirect(response.PaymentServiceUrl));
                }

                order.PayerId = Request.QueryString["PayerID"];
                if (payment.RequestPaymentStatus(order.PaymentTransactionId, order.PayerId, out string message) != PaymentStatus.Success)
                {
                    order.PaymentError = message;
                    // Save order
                    order.OrderStatusId = OrderStatus.Cancelled.Id;
                    currentCart.SaveOrder(order);

                    return(Redirect($"/{CurrentUser.LanguageCode}/checkout-cancelled/"));
                }
                // Tickets are sent immediately
                order.OrderStatusId = (order.ProductOrderDetails.IsNullOrEmpty()) ? OrderStatus.Sent.Id : OrderStatus.Started.Id;

                order.Paid       = true;
                order.PaidAmount = order.CalculateTotal();

                currentCart.CompleteOrder(order);

                if (order.ProductOrderDetails.Any())
                {
                    // Send order confirmation mail.
                    MailController.Instance(Request, model.Content, CurrentUser.LanguageCode).ConfirmOrderMail(order).Send();
                }
                if (order.TicketOrderDetails.Any()) // tickets bought
                {
                    MailController.Instance(Request, model.Content, CurrentUser.LanguageCode).SendTicketsPDF(order).Send();
                }
            }
            catch (OrderAlreadyProcessedException)
            {
                // Clear cart.
                currentCart.ClearCart();
            }

            return(CurrentTemplate(model));
        }